6.1 Sentinel 介紹和工作機制
6.1.1 微服務流量治理元件介紹
隨著微服務的流行,服務和服務之間的呼叫導致服務的穩定性問題變得越來越重要。 雪崩問題: 微服務呼叫鏈路中的某個服務故障,引起整個鏈路中的所有微服務都不可用,即雪崩。 解決雪崩問題的常見方式有四種: 1.超時處理:設定超時時間,請求超過一定時間沒有響應就返回錯誤資訊,不會無休止等待 2.流量控制:限制業務訪問的QPS,避免服務因流量的突增而故障。 3.熔斷降級:由斷路器統計業務執行的異常比例,如果超出閾值則會熔斷該業務,攔截訪問該業務的一切請求。 4.艙壁模式:限定每個業務能使用的執行緒數,避免耗盡整個tomcat的資源, 因此也叫執行緒隔離。
https://sentinelguard.io/zh-cn/
#資源 資源在java中的資源一般是介面方法。通常就是一個URL,比如:/hello/get #規則 圍繞資源的實時狀態設定的規則,可以包括流量控制規則、熔斷降級規則以及系統保護規則。所有規則可以動態實時調整。
Sentinel 的構成可以分為兩個部分:
核心庫(Java 客戶端):
開發寫程式碼呼叫sentinel的庫
控制檯(Dashboard):
運維部署控制檯,Dashboard 主要負責管理推送規則、監控、管理機器資訊等。
https://github.com/alibaba/Sentinel/releases #直接下二進位制包如sentinel-dashboard-1.87.jar(jar命令直接跑), Source code為原始碼還要編譯 使用如下命令啟動控制檯: java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar #-Dserver.port定義dashboard web介面埠(預設8858) #-Dcsp.sentinel.dashboard.server自己作為微服務註冊到dashboard進行監控 -Dproject.name註冊的專案名 #從 Sentinel 1.6.0 起,Sentinel 控制檯引入基本的登入功能,預設使用者名稱和密碼都是 sentinel
範例: Java 包啟動控制檯
#安裝JDK8或以上版本 [root@ubuntu2204 ~]#apt update && apt -y install openjdk-8-jdk [root@ubuntu2204 ~]#apt update && apt -y install openjdk-11-jdk [root@ubuntu2204 ~]#wget https://github.com/alibaba/Sentinel/releases/download/1.8.6/sentinel-dashboard-1.8.6.jar [root@ubuntu2204 ~]#java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.6.jar #瀏覽器使用預設使用者名稱和密碼sentinel登入訪問 http://10.0.0.151:8080/
docker網上有,但非官方版,很久沒更新了,建議自己製作
sentinel控制檯 #左側簇點鏈路:生成key訪問的路徑,如: http://10.0.0.151:8080/version 流量控制控制/version路徑 #可以在流量規則里加,但不夠快,直接在簇點鏈路下在/version下點選流控 #QPS 單向閾值1表示每秒鐘只能接受一個請求,超出就拒絕。點選新增會出現在流控規則中 此時訪問http://10.0.0.151:8080/version,就能看到失敗情況 #java程式可以呼叫sentinel,來控制流量 #java程式會在配置裡標註sentinel的地址,如果不想用java配置裡寫的sentinel地址,可以在啟動時引數修改 #如果臨時修改sentinel地址資訊,可以不用修改application.yml檔案重新編譯,直接新增下面選項再執行 [root@ubuntu2204 sentinel-sample]#java -Dspring.cloud.sentinel.transport.dashboard=10.0.0.100:8080 -jar target/sentinel-sample-0.0.1-SNAPSHOT.jar
7.1 Spring Cloud Gateway 介紹
7.1.1 什麼是 API 閘道器
API閘道器作用就是把各個微服務對外提供的API匯聚起來,讓外界看起來是一個統一的入口
同時還實現了微服務閘道器的額外功能, 包含:負載均衡、路由轉發、身份認證、許可權安全、請求限流、監控/指標等功能
#一般都是開發寫的排程規則 1.路由轉發 轉發後端服務去查nacos服務,如果有多個,配合nacos實現負載均衡,輪流發 2.過濾器 過濾器中預設提供了多種內建功能還支援額外的自定義功能。 比較常用的功能有閘道器的容錯、限流以及請求及相應的額外處理。
7.2.1 Spring Cloud Gateway 相關概念介紹
Route 稱為路由,一個Gateway專案可以包含多個Route。 一個Route路由包含如下部分: 1.Route ID: 是自定的,路由的唯一標識 2.URI: 路由目的地,為一個地址, 支援 LB,http,websocket 3.predicates: 路由斷言,判斷請求是否匹配和符合轉發規則的要求,如果符合則轉發到路由目的地 4.filters: 路由過濾器,對請求或響應進行過濾處理, 比如: 身份認證和許可權校驗限流限速,此為可選項
示例: 路由配置
#微服務專案中的application.yml內容 server: port: 10010 #閘道器埠 spring: application: name: gateway #服務名稱 cloud : nacos: server-addr: localhost:8848 # nacos地址 gateway: routes: #閘道器路由配置 (下面兩個路由) - id: user-service #路由id,自定義值,必須唯一 uri: lb://userservice #路由的目標地址Lb表示負載均衡,後面跟Nacos中微服務名稱 # uri: http://127.0.0.1:8081 #路由的目標地址,如果使用 http表示固定地址 predicates: #路由斷言,判斷請求是否符合路由規則的條件 - Path=/user/** #這個是按照路徑匹配,只要以/user/開頭就符合要求 - id: order-service uri: lb://orderservice/order predicates: - Path=/order/** filters: - StripPrefix=1 #從請求路徑中刪除第一個字首/order,再轉發給後端
#這些一般都是開發去呼叫,修改 路由斷言工廠 RoutePredicateFactory 包含的主要實現類如圖所示,包括 Datetime 、請求的遠端地址、路由權重、請求頭、Host 地址、請求方法、
請求路徑和請求引數等型別的路由斷言。
Gateway Filter是閘道器中提供的一種過濾器,可以對進入閘道器的請求和微服務返回的響應做處理
7.2.4 過濾器工廠 GatewayFilterFactory
當前支援34類路由過濾器工廠,實現請求和響應的定製功能
7.3 Spring Cloud Gateway 開發
這是一個庫,需要java寫程式碼呼叫