阿里巴巴哨兵Sentinel簡介 | Baeldung
顧名思義,Sentinel是微服務的強大後衛。它提供了流量控制,併發限制,電路中斷和自適應系統保護等功能,以確保其可靠性。這是阿里巴巴集團積極維護的開源元件。此外,它正式是Spring Cloud Circuit Breaker的一部分。
在本教程中,我們將瞭解Sentinel的一些主要功能。此外,我們將看到一個有關如何使用它,其註釋支援以及其監視儀表板的示例。
Sentinel控制隨機傳入請求的速度,以避免微服務過載。這樣可以確保我們的服務不會因流量激增而中斷。它支援多種流量調整策略。當每秒查詢數(QPS)太高時,這些策略會自動將流量調整為適當的形狀。
這些流量整形策略包括:
- 直接拒絕模式–當每秒請求數超過設定的閾值時,它將自動拒絕其他請求
- 慢啟動熱身模式-如果流量突然激增,此模式可確保請求計數持續遞增,直到達到上限
當一個服務同步呼叫另一個服務時,另一種服務可能由於某種原因而關閉。在這種情況下,執行緒將被阻塞,因為它們繼續等待其他服務做出響應。這可能導致資源耗盡,並且呼叫者服務也將無法處理其他請求。這被稱為級聯效應,它可能會破壞我們的整個微服務體系結構。
斷路器可防止此類情況,它將立即阻止對其他服務的所有後續呼叫。超時時間過後,一些請求將透過。如果它們成功,則斷路器將恢復正常流量。否則,超時時間將再次開始。
Sentinel使用最大併發限制的原理來實現斷路。透過限制併發執行緒數,它減少了不穩定資源的影響。
Sentinel還會降級不穩定的資源。當資源的響應時間過長時,將在指定的時間視窗中拒絕對資源的所有呼叫。這樣可以防止呼叫變得非常慢的情況,從而導致級聯效果。
如果系統負載過高,Sentinel可以保護我們的伺服器。它使用load1(系統負載)作為度量標準來啟動流量控制。在以下情況下,該請求將被阻止:
- 當前系統負載(load1)>閾值(maximumSystemLoad);
- 當前併發請求(執行緒數)>估計容量(最小響應時間*最大QPS)
新增Maven依賴:
<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId> <version>1.8.0</version> </dependency> |
讓我們使用Sentinel API在try-catch 塊中用相應的業務邏輯定義資源:
try (Entry entry = SphU.entry("HelloWorld")) { // Our business logic here. System.out.println("hello world"); } catch (BlockException e) { // Handle rejected request. } |
這個try-catch程式碼與資源名稱“HelloWorld”的區塊,作為切入點,我們的業務邏輯,由哨兵Sentinel把守。
定義流控制規則
這些規則控制著流向我們資源的流量,例如閾值計數或控制行為,例如,直接拒絕或啟動緩慢。讓我們使用FlowRuleManager.loadRules()來配置流規則:
List<FlowRule> flowRules = new ArrayList<>(); FlowRule flowRule = new FlowRule(); flowRule.setResource(RESOURCE_NAME); flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS); flowRule.setCount(1); flowRules.add(flowRule); FlowRuleManager.loadRules(flowRules); |
此規則定義我們的資源“ RESOURCE_NAME”每秒最多可以響應一個請求。
定義降級規則
使用降級規則,我們可以配置斷路器的閾值請求計數,恢復超時和其他設定。讓我們使用DegradeRuleManager.loadRules()配置降級規則:
List<DegradeRule> rules = new ArrayList<DegradeRule>(); DegradeRule rule = new DegradeRule(); rule.setResource(RESOURCE_NAME); rule.setCount(10); rule.setTimeWindow(10); rules.add(rule); DegradeRuleManager.loadRules(rules); |
此規則指定當我們的資源RESOURCE_NAME無法滿足10個請求(閾值計數)時,電路將斷開。Sentinel將阻止對該資源的所有後續請求10秒鐘(時間視窗)。
定義系統保護規則
使用系統保護規則,我們可以配置並確保自適應系統保護(load1的閾值,平均響應時間,併發執行緒數)。讓我們使用SystemRuleManager.loadRules()方法配置系統規則:
List<SystemRule> rules = new ArrayList<>(); SystemRule rule = new SystemRule(); rule.setHighestSystemLoad(10); rules.add(rule); SystemRuleManager.loadRules(rules); |
該規則指定,對於我們的系統,最高的系統負載是每秒10個請求。如果當前負載超過此閾值,則所有其他請求都將被阻止。
Sentinel還提供了一個監視儀表板。這樣,我們可以監視客戶端並動態配置規則。我們可以實時檢視到我們定義的資源的傳入流量。需要下載Sentinel Dashboard jar。然後,我們可以使用以下命令啟動儀表板:
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar |
在我們的pom.xml中新增sentinel-transport-simple-http依賴項:
<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-transport-simple-http</artifactId> <version>1.8.0</version> </dependency> |
啟動應用程式時,我們需要新增儀表板IP地址:
-Dcsp.sentinel.dashboard.server=consoleIp:port |
現在,無論何時呼叫資源,儀表板都會從我們的應用程式接收到心跳訊號。還可以使用儀表板動態地控制流程,降級和系統規則。
相應的示例可以在GitHub上找到。
相關:
相關文章
- Redis哨兵sentinelRedis
- 【Redis】Sentinel 哨兵模式Redis模式
- Redis 哨兵高可用(Sentinel)Redis
- redis sentinel哨兵 例項Redis
- Redis Sentinel哨兵模式部署Redis模式
- Netflix Mantis簡介 - Baeldung
- Evrete 規則引擎簡介 | baeldungVR
- Redis Sentinel哨兵模式原理及配置Redis模式
- Apache Kafka資料模型概念簡介 - BaeldungApacheKafka模型
- Redis docker 主從模式與哨兵sentinelRedisDocker模式
- Sentinel哨兵模式解決故障轉移模式
- Redis學習筆記(十六) Sentinel(哨兵)(下)Redis筆記
- redis sentinel哨兵模式安裝部署和切換Redis模式
- Redis安裝之叢集-哨兵模式(sentinel)模式Redis模式
- 非同步程式設計測試Awaitlity簡介| Baeldung非同步程式設計AI
- redis主從叢集搭建及容災部署(哨兵sentinel)Redis
- Redis | 第12章 Sentinel 哨兵模式《Redis設計與實現》Redis模式
- Sentinel簡單使用(1)
- AORedis哨兵模式介紹jtqRedis模式
- 用 docker 學習 redis 主從複製3 redis-sentinel(哨兵模式)DockerRedis模式
- 阿里巴巴開源限流系統 Sentinel 全解析阿里
- 阿里巴巴開源限流元件Sentinel初探之整合Gateway阿里元件Gateway
- Spring Cloud Alibaba系列——Sentinel降級規則簡介與實踐SpringCloud
- Redis for linux原始碼&叢集(cluster)&主從(master-slave)&哨兵(sentinel)安裝配置RedisLinux原始碼AST
- redis cluster + sentinel詳細過程和錯誤處理三主三備三哨兵Redis
- 用 docker 學習 redis 主從複製3.2 redis-sentinel「哨兵模式」核心配置-命令-原理DockerRedis模式
- 三千字介紹Redis主從+哨兵+叢集Redis
- Sentinel實現限流,竟是如此的簡單!
- Axon框架指南 - Baeldung框架
- 用 docker 學習 redis 主從複製3.3 redis-sentinel「哨兵模式」 資料丟失的情況DockerRedis模式
- redis 哨兵Redis
- Redis哨兵Redis
- SpringCloud使用Sentinel,Sentinel持久化,Sentinel使用nacos持久化SpringGCCloud持久化
- SpringCloud之Sentinel高可用流量框架簡單搭建SpringGCCloud框架
- redis系列:哨兵Redis
- Redis哨兵模式Redis模式
- Redis哨兵模式(sentinel)學習總結及部署記錄(主從複製、讀寫分離、主從切換)Redis模式
- Spring Cloud Alibaba Sentinel 主要原理和核心類介紹SpringCloud