Sentinel 分布式系统的流量防卫兵
sentinel
- sentinel base
- 服務編寫
- 關鍵名詞解釋
sentinel base
官網:
https://github.com/alibaba/Sentinel
https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D
是什么?
組成部分
核心庫(Java 客戶端)不依賴任何框架/庫, 能夠運行于所有 Java 運行時環境,同時對 Dubbo / Spring Cloud 等框架也有較好的支持。控制臺(Dashboard)基于 Spring Boot 開發,打包后可以直接運行, 不需要額外的 Tomcat 等應用容器。去哪兒下
https://github.com/alibaba/Sentinel/releases
能干嗎
怎么玩
https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_sentinel
sentinel安裝:
https://github.com/alibaba/Sentinel/releases
選擇1.x版本下載. localhost:8080端口訪問。
如上圖,還沒有一個服務交給sentinel進行管理。
需要編寫服務,讓sentinel接管服務。
服務編寫
啟動nacos
http://localhost:8848/nacos/#/login
創建模塊cloudalibaba-sentinel-service8401
pom
<!-- nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--將sentinel的配置持久化交給nacos管理,持久化到數據庫 --><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency><!-- sentinel --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>yaml
server:port: 8401spring:application:name: cloudalibaba-sentinel-servicecloud:nacos:discovery:server-addr: localhost:8848sentinel:transport:dashboard: localhost:8080 # 當前服務交給sentinel接管port: 8719 #默認8719,假如被占用了會自動從8719開始依次+1掃描。直至找到未被占用的端口management:endpoints:web:exposure:include: '*'主啟動
@EnableDiscoveryClient編寫rest接口,用來測試控制臺配置限流的規則
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class FlowLimitController {@GetMapping("/test/a")public String testA() {return "------testA";}@GetMapping("/testB")public String testB() {return "------testB";} }基本的限流規則配置
訪問任意rest接口,可以看到流控,降級,熱點,授權配置。
關鍵名詞解釋
流控
流量控制(flow control),其原理是監控應用流量的 QPS 或并發線程數等指標,當達到指定的閾值時對流量進行控制,以避免被瞬時的流量高峰沖垮,從而保障應用的高可用性。
一條限流規則主要由下面幾個因素組成,我們可以組合這些元素來實現不同的限流效果:
resource:資源名,即限流規則的作用對象 count: 限流閾值 grade: 限流閾值類型(QPS 或并發線程數) limitApp: 流控針對的調用來源,若為 default 則不區分調用來源 strategy: 調用關系限流策略 controlBehavior: 流量控制效果(直接拒絕、Warm Up、勻速排隊)https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6
熔斷降級
除了流量控制以外,對調用鏈路中不穩定的資源進行熔斷降級也是保障高可用的重要措施之一。一個服務常常會調用別的模塊,可能是另外的一個遠程服務、數據庫,或者第三方 API 等。例如,支付的時候,可能需要遠程調用銀聯提供的 API;查詢某個商品的價格,可能需要進行數據庫查詢。然而,這個被依賴服務的穩定性是不能保證的。如果依賴的服務出現了不穩定的情況,請求的響應時間變長,那么調用服務的方法的響應時間也會變長,線程會產生堆積,最終可能耗盡業務自身的線程池,服務本身也變得不可用。
現代微服務架構都是分布式的,由非常多的服務組成。不同服務之間相互調用,組成復雜的調用鏈路。以上的問題在鏈路調用中會產生放大的效果。復雜鏈路上的某一環不穩定,就可能會層層級聯,最終導致整個鏈路都不可用。因此我們需要對不穩定的弱依賴服務調用進行熔斷降級,暫時切斷不穩定調用,避免局部不穩定因素導致整體的雪崩。熔斷降級作為保護自身的手段,通常在客戶端(調用端)進行配置。
熔斷策略
慢調用比例 (SLOW_REQUEST_RATIO):選擇以慢調用比例作為閾值,需要設置允許的慢調用 RT(即最大的響應時間),請求的響應時間大于該值則統計為慢調用。當單位統計時長(statIntervalMs)內請求數目大于設置的最小請求數目,并且慢調用的比例大于閾值,則接下來的熔斷時長內請求會自動被熔斷。經過熔斷時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態),若接下來的一個請求響應時間小于設置的慢調用 RT 則結束熔斷,若大于設置的慢調用 RT 則會再次被熔斷。
異常比例 (ERROR_RATIO):當單位統計時長(statIntervalMs)內請求數目大于設置的最小請求數目,并且異常的比例大于閾值,則接下來的熔斷時長內請求會自動被熔斷。經過熔斷時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態),若接下來的一個請求成功完成(沒有錯誤)則結束熔斷,否則會再次被熔斷。異常比率的閾值范圍是 [0.0, 1.0],代表 0% - 100%。
異常數 (ERROR_COUNT):當單位統計時長內的異常數目超過閾值之后會自動進行熔斷。經過熔斷時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態),若接下來的一個請求成功完成(沒有錯誤)則結束熔斷,否則會再次被熔斷。
https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7
更多使用看這個小姐姐的博客,細… 代碼已經在我的倉庫了。
總結
以上是生活随笔為你收集整理的Sentinel 分布式系统的流量防卫兵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python正则表达式试题_正则表达式练
- 下一篇: 星痕 轻松实现大屏数据可视化_数据可视化