sentinel阿里開源的項(xiàng)目,提供了流量控制、熔斷降級(jí)、系統(tǒng)負(fù)載保護(hù)等多個(gè)維度來(lái)保障服務(wù)之間的穩(wěn)定性。隨著微服務(wù)的流行,服務(wù)和服務(wù)之間的穩(wěn)定性變得越來(lái)越重要。Sentinel 是面向分布式服務(wù)架構(gòu)的流量控制組件,主要以流量為切入點(diǎn),從流量控制、熔斷降級(jí)、系統(tǒng)自適應(yīng)保護(hù)等多個(gè)維度來(lái)幫助保障微服務(wù)的穩(wěn)定性。

流量控制在網(wǎng)絡(luò)傳輸中是一個(gè)常用的概念,它用于調(diào)整網(wǎng)絡(luò)包的發(fā)送數(shù)據(jù)。然而,從系統(tǒng)穩(wěn)定性角度考慮,在處理請(qǐng)求的速度上,也有非常多的講究。任意時(shí)間到來(lái)的請(qǐng)求往往是隨機(jī)不可控的,而系統(tǒng)的處理能力是有限的。我們需要根據(jù)系統(tǒng)的處理能力對(duì)流量進(jìn)行控制。Sentinel 作為一個(gè)調(diào)配器,可以根據(jù)需要把隨機(jī)的請(qǐng)求調(diào)整成合適的形狀。
資源
資源是 Sentinel 的關(guān)鍵概念。它可以是 Java 應(yīng)用程序中的任何內(nèi)容,例如,由應(yīng)用程序提供的服務(wù),或由應(yīng)用程序調(diào)用的其它應(yīng)用提供的服務(wù),甚至可以是一段代碼。
只要通過(guò) Sentinel API 定義的代碼,就是資源,能夠被 Sentinel 保護(hù)起來(lái)。大部分情況下,可以使用方法簽名,URL,甚至服務(wù)名稱作為資源名來(lái)標(biāo)示資源。
規(guī)則
圍繞資源的實(shí)時(shí)狀態(tài)設(shè)定的規(guī)則,可以包括流量控制規(guī)則、熔斷降級(jí)規(guī)則以及系統(tǒng)保護(hù)規(guī)則。所有規(guī)則可以動(dòng)態(tài)實(shí)時(shí)調(diào)整。
流量控制有以下幾個(gè)角度:
- 資源的調(diào)用關(guān)系,例如資源的調(diào)用鏈路,資源和資源之間的關(guān)系;
- 運(yùn)行指標(biāo),例如 QPS、線程池、系統(tǒng)負(fù)載等;
- 控制的效果,例如直接限流、冷啟動(dòng)、排隊(duì)等;
Sentinel 的設(shè)計(jì)理念是可以自由選擇控制的角度,并進(jìn)行靈活組合,從而達(dá)到想要的效果。
本系列使用官方提供的控制臺(tái)界面進(jìn)行接口的控制以及概念介紹,并完成服務(wù)的管理。
項(xiàng)目配置
基于上一篇服務(wù)治理的項(xiàng)目,服務(wù)提供者增加如下依賴:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
然后配置增加兩項(xiàng):
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080
management:
endpoints:
web:
exposure:
include: '*'
dashboard指向sentinel服務(wù),代碼中指向我本機(jī)安裝的sentinel,端口默認(rèn)是8080。
安裝sentinel
sentinel jar 程序下載后,使用java -jar sentinel-dashboard-1.7.2.jar運(yùn)行即可,然后使用瀏覽器訪問(wèn),端口默認(rèn)是8080,用戶名密碼分別默認(rèn)都是sentinel。
如果要更改端口和登錄用戶數(shù)據(jù),使用java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar命令,其中-Dserver.port=8080用于更改端口。
用戶可以通過(guò)如下參數(shù)進(jìn)行配置:
-
-Dsentinel.dashboard.auth.username=sentinel用于指定控制臺(tái)的登錄用戶名為 sentinel; -
-Dsentinel.dashboard.auth.password=123456用于指定控制臺(tái)的登錄密碼為 123456;如果省略這兩個(gè)參數(shù),默認(rèn)用戶和密碼均為 sentinel; -
-Dserver.servlet.session.timeout=7200用于指定 Spring Boot 服務(wù)端 session 的過(guò)期時(shí)間,如 7200 表示 7200 秒;60m 表示 60 分鐘,默認(rèn)為 30 分鐘;

登錄成功后,如果有服務(wù)運(yùn)行,即可看到如下圖所示的監(jiān)控效果。其中provider就是上一篇搭建的provider服務(wù)的名字。(上一篇項(xiàng)目中暴露了一個(gè)localhost:8081/index接口,訪問(wèn)幾次即可出現(xiàn)效果)

代碼地址
本文是流量控制的第一步,搭建環(huán)境,后續(xù)回持續(xù)更新流量控制的限流、熔斷機(jī)制等內(nèi)容。如果喜歡,點(diǎn)個(gè)關(guān)注吧。?