阿里巴巴Sentinel簡介

1.概述

顧名思義, Sentinel是微服務的強大後衛。它提供了流量控制,並發限制,電路中斷和自適應系統保護等功能,以確保其可靠性。這是阿里巴巴集團積極維護的開源組件。此外,它正式是Spring Cloud Circuit Breaker的一部分。

在本教程中,我們將了解Sentinel的一些主要功能。此外,我們將看到一個有關如何使用它,其註釋支持以及其監視儀表板的示例。

2.特點

2.1 流量控制

Sentinel控制隨機傳入請求的速度,以避免微服務過載。這樣可以確保我們的服務不會因流量激增而中斷。它支持多種流量調整策略。當每秒查詢數(QPS)太高時,這些策略會自動將流量調整為適當的形狀。

這些流量整形策略包括:

  • 直接拒絕模式–當每秒請求數超過設置的閾值時,它將自動拒絕其他請求
  • 慢啟動熱身模式-如果流量突然激增,此模式可確保請求計數持續遞增,直到達到上限

2.2 斷路和降級

當一個服務同步調用另一個服務時,另一種服務可能由於某種原因而關閉。在這種情況下,線程將被阻塞,因為它們繼續等待其他服務做出響應。這可能導致資源耗盡,並且呼叫者服務也將無法處理其他請求。這被稱為級聯效應,它可能會破壞我們的整個微服務體系結構

為防止此類情況,斷路器進入了圖片。它將立即阻止對其他服務的所有後續調用。超時時間過後,一些請求將通過。如果它們成功,則斷路器將恢復正常流量。否則,超時時間將再次開始。

Sentinel使用最大並發限制的原理來實現斷路。通過限制並發線程數,它減少了不穩定資源的影響。

Sentinel還會降級不穩定的資源。當資源的響應時間過長時,將在指定的時間窗口中拒絕對資源的所有調用。這樣可以防止呼叫變得非常慢的情況,從而導致級聯效果。

2.3 自適應系統保護

如果系統負載過高,Sentinel可以保護我們的服務器。它使用load1 (系統負載)作為度量標準來啟動流量控制。在以下情況下,該請求將被阻止:

  • 當前系統負載( load1 )>閾值( highestSystemLoad );
  • 當前並發請求(線程數)>估計容量(最小響應時間*最大QPS)

3.使用方法

3.1 添加Maven依賴

在我們的Maven項目中,我們需要pom.xml sentinel-core依賴項:

<dependency>

 <groupId>com.alibaba.csp</groupId>

 <artifactId>sentinel-core</artifactId>

 <version>1.8.0</version>

 </dependency>

3.2 定義資源

讓我們使用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塊用作Sentinel保護的業務邏輯的入口點。

3.3 定義流控制規則

這些規則控制著流向我們資源的流量,例如閾值計數或控制行為,例如,直接拒絕或啟動緩慢。讓我們使用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”每秒最多可以響應一個請求。

3.4 定義降級規則

使用降級規則,我們可以配置斷路器的閾值請求計數,恢復超時和其他設置。
讓我們使用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秒鐘(時間窗口)。

3.5。定義系統保護規則

使用系統保護規則,我們可以配置並確保自適應系統保護( load1閾值,平均響應時間,並發線程數)。讓我們使用SystemRuleManager.loadRules()方法配置系統規則:

List<SystemRule> rules = new ArrayList<>();

 SystemRule rule = new SystemRule();

 rule.setHighestSystemLoad(10);

 rules.add(rule);

 SystemRuleManager.loadRules(rules);

該規則指定,對於我們的系統,最高的系統負載是每秒10個請求。如果當前負載超過此閾值,則所有其他請求都將被阻止。

4.註釋支持

Sentinel還提供了面向方面的註釋支持,用於定義資源

首先,我們將為sentinel-annotation-aspectj添加Maven依賴項:

<dependency>

 <groupId>com.alibaba.csp</groupId>

 <artifactId>sentinel-annotation-aspectj</artifactId>

 <version>1.8.0</version>

 </dependency>

然後,將@Configuration添加到我們的配置類中,以將前哨方面註冊為Spring bean:

@Configuration

 public class SentinelAspectConfiguration {



 @Bean

 public SentinelResourceAspect sentinelResourceAspect() {

 return new SentinelResourceAspect();

 }

 }

@SentinelResource指示資源定義。它具有類似於value屬性,該屬性定義了資源名稱。屬性fallback是fallback方法名稱。當電路斷開時,這種後備方法定義了我們程序的替代流程。讓我們使用@SentinelResource批註定義資源:

@SentinelResource(value = "resource_name", fallback = "doFallback")

 public String doSomething(long i) {

 return "Hello " + i;

 }



 public String doFallback(long i, Throwable t) {

 // Return fallback value.

 return "fallback";

 }

這定義了名稱為resource_name以及後備方法。

5.監控儀表板

Sentinel還提供了一個監視儀表板。這樣,我們可以監視客戶端並動態配置規則。我們可以實時查看到我們定義的資源的傳入流量。

5.1 啟動儀表板

首先,我們需要下載Sentinel Dashboard jar 。然後,我們可以使用以下命令啟動儀表板:

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

儀表板應用程序啟動後,我們可以按照下一部分中的步驟連接我們的應用程序。

5.2 準備我們的依賴項

讓我們在我們的pom.xml sentinel-transport-simple-http依賴項:

<dependency>

 <groupId>com.alibaba.csp</groupId>

 <artifactId>sentinel-transport-simple-http</artifactId>

 <version>1.8.0</version>

 </dependency>

5.3 將我們的應用程序連接到儀表板

啟動應用程序時,我們需要添加儀表板IP地址:

-Dcsp.sentinel.dashboard.server=consoleIp:port

現在,無論何時調用資源,儀表板都會從我們的應用程序接收到心跳信號:

阿里巴巴前哨簡介

我們還可以使用儀表板動態地控制流程,降級和系統規則。

六,結論

在本文中,我們了解了阿里巴巴Sentinel流量控制,斷路器和自適應系統保護的主要功能。

相關推薦
每個Android開發人員都應該知道的8個最佳Android庫

每個Android開發人員都應該知道的8個最佳Android庫: Dagger 2, Retrofit,Picasso,Glide,Zxing,CAMView,Stetho,ButterKnife

2020年11月6日閱讀 142

成為Android開發人員的最佳方法-完整的路線圖

成為Android開發人員的最佳方法-完整的路線圖, Android是一個開源操作系統,基於該Linux內核和在像智能電話,平板用於移動設備,等等。此外,它被開發智能手錶和Android TV。他們每個人都有一個專門的界面。Android一直是智能手機上最暢銷的操作系統之一。

2020年11月8日閱讀 153

Kubernetes Java客戶端快速入門

Kubernetes Java客戶端快速入門, 我們對Java的Kubernetes API進行了簡要介紹。在以後的文章中,我們將更深入地研究此API,並探索其一些其他功能

2021年3月2日閱讀 589

具有MQTT,NiFi和InfluxDB的物聯網數據管道

我們在本教程中介紹了一個基本的IoT用例。我們還了解瞭如何使用MQTT,NiFi和InfluxDB之類的工具來構建可擴展的數據管道。當然,這並不涵蓋物聯網應用程序的全部範圍,並且擴展數據分析管道的可能性是無限的。

2021年3月2日閱讀 145

系統存根庫指南

了解能夠模擬系統資源的重要性以及系統存根如何通過JUnit 4和JUnit 5插件實現存根的複雜配置

2021年3月5日閱讀 142

Spring用JobRunr分佈式後台作業調度和處理

使用JobRunr研究Java中的分佈式後台作業調度和處理,並將其與Spring集成。

2021年3月17日閱讀 453