前言
相對來說,Sentinel的學(xué)習(xí)難度比之之前的Dubbo要低了不少。不過在學(xué)習(xí)過程中也遇到了一些認(rèn)知局限帶來的困難。比如,雖然還是學(xué)習(xí)了Sentinel,但是不知道生產(chǎn)環(huán)境該如何配置才是最佳的狀態(tài)。
說到底,Sentinel還是沒有提供很好的文檔支持。比如:生產(chǎn)最佳實踐方案。 官方也確實提供了一個,但是總感覺不太完備。
另外在學(xué)習(xí)的過程中再次提醒了我:不要盲目的添加中間件,中間件的引入勢必會造成系統(tǒng)復(fù)雜度上升,也帶來了一定的運維成本。所以,若非有必要的,還是不要特定地去引入某個中間件吧。
最難受的是,文檔資料的缺失,不少問題官網(wǎng)沒解釋,百度沒答案,難受死了。
當(dāng)然,這里是以學(xué)習(xí)目的出發(fā)的,就算是引入也無所謂。
閱讀對象
閱讀導(dǎo)航
系列上一篇文章:《【分布式微服務(wù)專題】從單體到分布式(三、SpringCloud整合Dubbo)》
前置知識
一、什么是服務(wù)雪崩
1.1 基本介紹
在一個高度服務(wù)化的系統(tǒng)中,我們實現(xiàn)的一個業(yè)務(wù)邏輯通常會依賴多個服務(wù)。比如:訂單服務(wù)會依賴用戶服務(wù)、商品服務(wù)等。此時,若其中一個服務(wù)不可用,就會導(dǎo)致訂單服務(wù)的所有線程都因等待而引起阻塞,最終導(dǎo)致沒有線程可用,進(jìn)而引起整個服務(wù)不可用,這就是服務(wù)雪崩
導(dǎo)致服務(wù)不可用的可能有很多,比如:程序BUG、流量激增、緩存擊穿,甚至是硬件故障。
在服務(wù)提供者不可用的時候,會出現(xiàn)大量重試的情況:用戶重試、代碼邏輯重試,這些重試最終導(dǎo)致進(jìn)一步的流量激增,所以歸根結(jié)底導(dǎo)致雪崩效應(yīng)的最根本原因是:大量請求線程同步等待造成的資源耗盡。當(dāng)服務(wù)調(diào)用者使用同步調(diào)用時, 會產(chǎn)生大量的等待線程占用系統(tǒng)資源。一旦線程資源被耗盡,服務(wù)調(diào)用者提供的服務(wù)也將處于不可用狀態(tài),于是服務(wù)雪崩效應(yīng)產(chǎn)生了
1.2 解決方案
服務(wù)雪崩常用的解決方案如下:
- 超時機制:設(shè)定接口超時時間,不做無休止的等待。屬于一種緩解手段,只要流量足夠大,依然有擊穿的可能性
- 服務(wù)限流:限制QPS,避免流量突增而故障。屬于一種預(yù)防手段
- 服務(wù)熔斷降級:類似保險絲。如果某個服務(wù)調(diào)用慢,或者本身短時間內(nèi)就有大量超時,那后續(xù)的請求再進(jìn)來其實已經(jīng)沒有意義了,不如快速返回一個失敗答復(fù),避免擁擠(參考以前你搶小米手機的時候)
二、什么是Sentinel
Sentinel官方文檔傳送門:傳送門
2.1 基本介紹
隨著微服務(wù)的流行,服務(wù)和服務(wù)之間的穩(wěn)定性變得越來越重要。Sentinel 是面向分布式、多語言異構(gòu)化服務(wù)架構(gòu)的流量治理組件,主要以流量為切入點,從流量路由、流量控制、流量整形、熔斷降級、系統(tǒng)自適應(yīng)過載保護、熱點流量防護等多個維度來幫助開發(fā)者保障微服務(wù)的穩(wěn)定性。
2.2 設(shè)計目的
流量
流量
流量
面向分布式、多語言異構(gòu)化服務(wù)架構(gòu)的流量治理組件,主要以流量為切入點,從流量路由、流量控制、流量整形、熔斷降級、系統(tǒng)自適應(yīng)過載保護、熱點流量防護等多個維度來幫助開發(fā)者保障微服務(wù)的穩(wěn)定性。
2.3 基本概念
資源
資源是 Sentinel 的關(guān)鍵概念。它可以是 Java 應(yīng)用程序中的任何內(nèi)容,例如,由應(yīng)用程序提供的服務(wù),或由應(yīng)用程序調(diào)用的其它應(yīng)用提供的服務(wù),甚至可以是一段代碼。在接下來的文檔中,我們都會用資源來描述代碼塊。
意思是,粒度可以為:進(jìn)程、組件、方法,甚至是一段代碼
只要通過 Sentinel API 定義的代碼,就是資源,能夠被 Sentinel 保護起來。大部分情況下,可以使用方法簽名,URL,甚至服務(wù)名稱作為資源名來標(biāo)示資源。
規(guī)則
圍繞資源的實時狀態(tài)設(shè)定的規(guī)則,可以包括流量控制規(guī)則、熔斷降級規(guī)則以及系統(tǒng)保護規(guī)則。所有規(guī)則可以動態(tài)實時調(diào)整。
三、Sentinel 功能和設(shè)計理念
Sentinel主要的功能有:流量控制、熔斷降級、系統(tǒng)負(fù)載保護
3.1 流量控制
流量控制在網(wǎng)絡(luò)傳輸中是一個常用的概念,它用于調(diào)整網(wǎng)絡(luò)包的發(fā)送數(shù)據(jù)。然而,從系統(tǒng)穩(wěn)定性角度考慮,在處理請求的速度上,也有非常多的講究。任意時間到來的請求往往是隨機不可控的,而系統(tǒng)的處理能力是有限的。我們需要根據(jù)系統(tǒng)的處理能力對流量進(jìn)行控制。Sentinel 作為一個調(diào)配器,可以根據(jù)需要把隨機的請求調(diào)整成合適的形狀,如下圖所示:
流量控制有以下幾個角度:
- 資源的調(diào)用關(guān)系,例如資源的調(diào)用鏈路,資源和資源之間的關(guān)系;
- 運行指標(biāo),例如 QPS、線程池、系統(tǒng)負(fù)載等;
- 控制的效果,例如直接限流、冷啟動、排隊等。
Sentinel 的設(shè)計理念是讓用戶自由選擇控制的角度,并進(jìn)行靈活組合,從而達(dá)到想要的效果。
3.2 熔斷降級
什么是熔斷降級
除了流量控制以外,降低調(diào)用鏈路中的不穩(wěn)定資源也是 Sentinel 的使命之一。由于調(diào)用關(guān)系的復(fù)雜性,如果調(diào)用鏈路中的某個資源出現(xiàn)了不穩(wěn)定,最終會導(dǎo)致請求發(fā)生堆積。這個問題和 Hystrix 里面描述的問題是一樣的。
Sentinel 和 Hystrix 的原則是一致的:當(dāng)調(diào)用鏈路中某個資源出現(xiàn)不穩(wěn)定,例如,表現(xiàn)為 timeout,異常比例升高的時候,則對這個資源的調(diào)用進(jìn)行限制,并讓請求快速失敗,避免影響到其它的資源進(jìn)而產(chǎn)生雪崩的效果。
熔斷降級設(shè)計理念
在限制的手段上,Sentinel 和 Hystrix 采取了完全不一樣的方法。
Hystrix 通過線程池的方式,來對依賴(在我們的概念中對應(yīng)資源)進(jìn)行了隔離。這樣做的好處是資源和資源之間做到了最徹底的隔離。缺點是除了增加了線程切換的成本,還需要預(yù)先給各個資源做線程池大小的分配。
Sentinel 對這個問題采取了兩種手段:
-
通過并發(fā)線程數(shù)進(jìn)行限制
和資源池隔離的方法不同,Sentinel 通過限制資源并發(fā)線程的數(shù)量,來減少不穩(wěn)定資源對其它資源的影響。這樣不但沒有線程切換的損耗,也不需要您預(yù)先分配線程池的大小。當(dāng)某個資源出現(xiàn)不穩(wěn)定的情況下,例如響應(yīng)時間變長,對資源的直接影響就是會造成線程數(shù)的逐步堆積。當(dāng)線程數(shù)在特定資源上堆積到一定的數(shù)量之后,對該資源的新請求就會被拒絕。堆積的線程完成任務(wù)后才開始繼續(xù)接收請求。 -
通過響應(yīng)時間對資源進(jìn)行降級
除了對并發(fā)線程數(shù)進(jìn)行控制以外,Sentinel 還可以通過響應(yīng)時間來快速降級不穩(wěn)定的資源。當(dāng)依賴的資源出現(xiàn)響應(yīng)時間過長后,所有對該資源的訪問都會被直接拒絕,直到過了指定的時間窗口之后才重新恢復(fù)。
3.3 系統(tǒng)負(fù)載保護
Sentinel 同時提供系統(tǒng)維度的自適應(yīng)保護能力,它的最終目的是:保證系統(tǒng)不被拖垮的同時,進(jìn)而保證系統(tǒng)的吞吐量。
防止雪崩,是系統(tǒng)防護中重要的一環(huán)。當(dāng)系統(tǒng)負(fù)載較高的時候,如果還持續(xù)讓請求進(jìn)入,可能會導(dǎo)致系統(tǒng)崩潰,無法響應(yīng)。在集群環(huán)境下,網(wǎng)絡(luò)負(fù)載均衡會把本應(yīng)這臺機器承載的流量轉(zhuǎn)發(fā)到其它的機器上去。如果這個時候其它的機器也處在一個邊緣狀態(tài)的時候,這個增加的流量就會導(dǎo)致這臺機器也崩潰,最后導(dǎo)致整個集群不可用。
針對這個情況,Sentinel 提供了對應(yīng)的保護機制,讓系統(tǒng)的入口流量和系統(tǒng)的負(fù)載達(dá)到一個平衡,保證系統(tǒng)在能力范圍之內(nèi)處理最多的請求。
四、Sentinel 是如何工作的
Sentinel 的主要工作機制如下:
- 對主流框架提供適配或者顯示的 API,來定義需要保護的資源,并提供設(shè)施對資源進(jìn)行實時統(tǒng)計和調(diào)用鏈路分析
- 根據(jù)預(yù)設(shè)的規(guī)則,結(jié)合對資源的實時統(tǒng)計信息,對流量進(jìn)行控制。同時,Sentinel 提供開放的接口,方便您定義及改變規(guī)則
- Sentinel 提供實時的監(jiān)控系統(tǒng),方便您快速了解目前系統(tǒng)的狀態(tài)
從一般性流程來說,我們想要使用Sentinel來進(jìn)行資源保護,主要分為幾個步驟:
- 定義資源
主流框架都提供了默認(rèn)的支持。例如使用SpringBoot開發(fā)的web應(yīng)用,會自動定義所有http接口為Sentinel的資源
- 定義規(guī)則
這個就需要好好了解一下規(guī)則是什么,都有哪些了
- 檢驗規(guī)則是否生效
這個根據(jù)我目前的測試情況看來,我有點不確定官方提供的校驗手段是否有效,你們看我【1.5 設(shè)置系統(tǒng)負(fù)載保護】內(nèi)容就知道我意思了
先把可能需要保護的資源定義好,之后再配置規(guī)則。也可以理解為,只要有了資源,我們就可以在任何時候靈活地定義各種流量控制規(guī)則。在編碼的時候,只需要考慮這個代碼是否需要保護,如果需要保護,就將之定義為一個資源。
筆記正文
我當(dāng)前項目結(jié)構(gòu):
├── shenadmin // 整個服務(wù)的頂級父項目
├── shen-common // 項目公共模塊
├── shen-dependencies // 項目依賴模塊
├── shen-provider-apis // 項目對外暴露接口apis列表。provider直譯:供應(yīng)商
├── shen-order-provider-api // 訂單服-對外暴露接口apis列表
├── shen-product-provider-api // 商品服-對外暴露接口apis列表
├── shen-user-provider-api // 用戶服-對外暴露接口apis列表
├── shen-wallet-provider-api // 錢包服-對外暴露接口apis列表
└── shen-servers // 項目微服務(wù)列表
└── shen-product // 商品服
└── shen-order // 訂單服
└── shen-user // 用戶服
└── shen-wallet // 錢包服
一、簡單整合Sentinel
我學(xué)習(xí)整合的教程,來自SpringCloud Alibaba整合Sentinel的sample:傳送門
另外,整合之前需要做一些工具準(zhǔn)備。
- 安裝Sentinel控制臺(我在【1.3 配置限流規(guī)則:定義Sentinel規(guī)則】中有提到)
- 安裝JMeter壓測工具
1.1 添加maven依賴
顯然,只有我的微服務(wù)項目才會用到Sentinel,所以,我只需要在shen-servers
下直接添加即可。而我早先已經(jīng)添加了Spring Cloud Alibaba
的管理,所以,我只需要添加依賴即可,版本由前者兼容了。
<!-- sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
1.2 接入限流埋點:定義Sentinel資源
【資源與規(guī)則】官方介紹傳送門:基本使用 - 資源與規(guī)則
在此之前,需要給大家介紹并解釋一下【埋點】這個概念。
Q1:什么是埋點?
埋點是一種數(shù)據(jù)采集技術(shù),主要用于收集用戶在應(yīng)用或網(wǎng)站中的行為數(shù)據(jù)。通過在特定的頁面或按鈕上植入代碼,可以監(jiān)聽用戶的行為并進(jìn)行收集上報。這樣,開發(fā)者或數(shù)據(jù)分析師就能獲取用戶在使用產(chǎn)品過程中的具體行為數(shù)據(jù),以進(jìn)行數(shù)據(jù)分析、用戶行為研究或產(chǎn)品優(yōu)化等。簡而言之,埋點是一種數(shù)據(jù)采集技術(shù),實質(zhì)是先監(jiān)聽軟件應(yīng)用運行過程中的事件,當(dāng)需要關(guān)注的事件發(fā)生時進(jìn)行判斷和捕獲。
翻譯一下:【埋點】這個操作,其實在Sentinel里面,就是【定義資源】的過程。講人話,就是設(shè)置哪些個url,甚至是方法需要被Sentinel管控。
可別剛說完就忘了Sentinel里面【資源】是什么東塞喔。我在【1.3 基本概念】中提到過,這是Sentinel里面一個核心概念
那么如何設(shè)置埋點呢?兩種方式:
- 默認(rèn)的
HTTP
。在Spring Cloud Alibaba
里面,默認(rèn)會為所有HTTP
請求埋點,所以對我們Web開發(fā)用戶來說,就不需要操心那么多了 - 自定義埋點。具體如何操作,可以參考官網(wǎng)的鏈接:基本使用(資源與規(guī)則)。不過自定義埋點操作,我稍微看了下,都是一些靜態(tài)的、硬編碼的方式,反正我是不喜歡這么干的。
1.3 配置限流規(guī)則:定義Sentinel規(guī)則
可得注意了啊,這里又是一個Sentinel核心概念噢?!举Y源與規(guī)則】官方介紹傳送門:基本使用 - 資源與規(guī)則
Sentinel 的所有規(guī)則都可以在內(nèi)存態(tài)中動態(tài)地查詢及修改,修改之后立即生效。同時 Sentinel 也提供相關(guān) API,供您來定制自己的規(guī)則策略。Sentinel 支持以下幾種規(guī)則:流量控制規(guī)則、熔斷降級規(guī)則、系統(tǒng)保護規(guī)則、來源訪問控制規(guī)則 和 熱點參數(shù)規(guī)則。
Sentinel 提供了兩種配置限流規(guī)則的方式:【代碼配置】和 【控制臺配置】。根據(jù)官方《在生產(chǎn)環(huán)境中使用 Sentinel》的指引,還是建議在【控制臺】中集中管理規(guī)則會比較合適,并且將規(guī)則推送之配置中心中。
本示例使用的方式為通過控制臺配置。具體操作步驟如下:
1)下載安裝Sentinel控制臺
下載并啟動Sentinel控制臺。官方傳送門:Sentinel 控制臺
注意:控制臺默認(rèn)啟動端口是8080,如果需要修改,啟動的時候可以新增命令參數(shù)-Dserver.port=端口
。比如,我就修改為8090
端口
java -Dserver.port=8090 -jar sentinel-dashboard.jar
2)增加Sentinel配置
在所有的微服務(wù)應(yīng)用中添加如下配置:
spring:
cloud:
sentinel:
transport:
# 下面的端口,
dashboard: localhost:8090
因為我已經(jīng)引入了Nacos配置中心,然后這個配置在我的實驗環(huán)境中,應(yīng)該是共享的,所以我就配置到了我在Nacos的application-conf.yaml
文件中。如下所示:
3)重啟所有微服務(wù)
4)驗證安裝
上述步驟完成之后,就可以打開http://localhost:8090/嘗試訪問了。如下所示:
注意,如果您在控制臺沒有找到應(yīng)用,請調(diào)用一下進(jìn)行了 Sentinel 埋點的 URL 或方法,因為 Sentinel 使用了【懶加載】策略。
5)配置限流規(guī)則
我在我的實驗環(huán)境這種,選擇了shen-wallet
,然后點擊流控規(guī)則
,新增流控規(guī)則
,內(nèi)容如下:
為了讓效果更明顯,我做了如上的配置,意思是:當(dāng)前/wallet/list
接口1秒內(nèi)最大訪問次數(shù)。
6)簡單驗證
快速刷新訪問http://localhost:9032/wallet/list
,會出現(xiàn)如下所示的結(jié)果:
正常結(jié)果:
限流結(jié)果:(Blocked by Sentinel (flow limiting))
hold on hold on,我當(dāng)然是比較建議下載JMeter來測試的,我自己就簡單測試了
1.4 設(shè)置熔斷規(guī)則
啊,很尷尬的一個點。如果你們的PRC使用的是OpenFeign
,那么可以直接參考這個官方示例,我截圖給大家看吧。
但是,我在我的整合方案中,RPC使用的是Dubbo框架的Dubbo協(xié)議,所以,我得另外配置才能實驗這個特性了。
1.4.1 Dubbo整合Sentinel
Dubbo整合Sentinel很簡單,就是引入一個maven依賴就好了
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-dubbo-adapter</artifactId>
<version>版本</version>
</dependency>
通過引入這個項目,所有Dubbo接口也會被自動【埋點】。后面的所有規(guī)則設(shè)置,跟上面介紹的操作基本是一樣的。給你們看看我的效果:
1)Dubbo接口被Sentinel管理
2)對Dubbo資源做降級處理
1.5 設(shè)置系統(tǒng)負(fù)載保護
這一點我暫時擱置一下,MD,卡了我一天了,從昨天到現(xiàn)在,我不知道自己哪里沒有設(shè)置對。
反正就是沒效果。不知道是不是版本的問題,我百度別人的Sentinel Admin跟我的不是很像。為了校驗我的規(guī)則是否生效,我采用了如下方式:
- 通過端點信息查看,規(guī)則是設(shè)置成功的(Endpoint)
- 我設(shè)置了最簡單的入口QPS限制,通過壓測工具發(fā)送N多條請求發(fā)現(xiàn)調(diào)用是成功的,反過來證明我的系統(tǒng)負(fù)載設(shè)置失敗
- 通過實時監(jiān)控發(fā)現(xiàn),
b_qps
指標(biāo)又是正常的,證明系統(tǒng)負(fù)載設(shè)置成功 - 根據(jù)秒級監(jiān)控日志,看每個指標(biāo)也是合理的,證明系統(tǒng)負(fù)載設(shè)置成功
- 自定義了BlockedException想要捕獲異常日志,但是沒有發(fā)現(xiàn)系統(tǒng)保護異常
SystemBlockException
暫時性放棄了xdm
二、概念補充:Sentinel規(guī)則
我在學(xué)習(xí)的過程中,發(fā)現(xiàn),Sentinel的規(guī)則還是非常重要的,只有熟練的掌握了這些規(guī)則,我們才能在實際的生產(chǎn)中,做更豐富的流控策略。
2.1 規(guī)則的種類
Sentinel 的所有規(guī)則都可以在內(nèi)存態(tài)中動態(tài)地查詢及修改,修改之后立即生效。同時 Sentinel 也提供相關(guān) API,供您來定制自己的規(guī)則策略。
總的來說,Sentinel 支持以下幾種規(guī)則:流量控制規(guī)則、熔斷降級規(guī)則、系統(tǒng)保護規(guī)則、來源訪問控制規(guī)則 和 熱點參數(shù)規(guī)則。
2.1.1 流量控制規(guī)則 (FlowRule)
重要屬性:
PS:同一個資源可以同時有多個限流規(guī)則
通過代碼定義流量控制規(guī)則:
理解上面規(guī)則的定義之后,我們可以通過調(diào)用 FlowRuleManager.loadRules()
方法來用硬編碼的方式定義流量控制規(guī)則,比如:
private static void initFlowQpsRule() {
List<FlowRule> rules = new ArrayList<>();
FlowRule rule1 = new FlowRule();
rule1.setResource(resource);
// Set max qps to 20
rule1.setCount(20);
rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule1.setLimitApp("default");
rules.add(rule1);
FlowRuleManager.loadRules(rules);
}
2.1.2 熔斷降級規(guī)則 (DegradeRule)
重要屬性:
PS:同一個資源可以同時有多個降級規(guī)則
通過代碼定義熔斷降級規(guī)則:
理解上面規(guī)則的定義之后,我們可以通過調(diào)用 DegradeRuleManager.loadRules()
方法來用硬編碼的方式定義流量控制規(guī)則。
private static void initDegradeRule() {
List<DegradeRule> rules = new ArrayList<>();
DegradeRule rule = new DegradeRule(resource);
.setGrade(CircuitBreakerStrategy.ERROR_RATIO.getType());
.setCount(0.7); // Threshold is 70% error ratio
.setMinRequestAmount(100)
.setStatIntervalMs(30000) // 30s
.setTimeWindow(10);
rules.add(rule);
DegradeRuleManager.loadRules(rules);
}
2.1.3 系統(tǒng)保護規(guī)則 (SystemRule)
Sentinel 系統(tǒng)自適應(yīng)限流從整體維度對應(yīng)用入口流量進(jìn)行控制,結(jié)合應(yīng)用的 Load、CPU 使用率、總體平均 RT、入口 QPS 和并發(fā)線程數(shù)等幾個維度的監(jiān)控指標(biāo),通過自適應(yīng)的流控策略,讓系統(tǒng)的入口流量和系統(tǒng)的負(fù)載達(dá)到一個平衡,讓系統(tǒng)盡可能跑在最大吞吐量的同時保證系統(tǒng)整體的穩(wěn)定性。
重要屬性:
通過代碼定義系統(tǒng)保護規(guī)則:
理解上面規(guī)則的定義之后,我們可以通過調(diào)用 SystemRuleManager.loadRules()
方法來用硬編碼的方式定義流量控制規(guī)則:
private void initSystemProtectionRule() {
List<SystemRule> rules = new ArrayList<>();
SystemRule rule = new SystemRule();
rule.setHighestSystemLoad(10);
rules.add(rule);
SystemRuleManager.loadRules(rules);
}
2.1.4 訪問控制規(guī)則 (AuthorityRule)
很多時候,我們需要根據(jù)調(diào)用方來限制資源是否通過,這時候可以使用 Sentinel 的訪問控制(黑白名單)的功能。黑白名單根據(jù)資源的請求來源(origin)限制資源是否通過,若配置白名單則只有請求來源位于白名單內(nèi)時才可通過;若配置黑名單則請求來源位于黑名單時不通過,其余的請求通過。
授權(quán)規(guī)則,即黑白名單規(guī)則(AuthorityRule)非常簡單,主要有以下配置項:
-
resource
:資源名,即限流規(guī)則的作用對象 -
limitApp
:對應(yīng)的黑名單/白名單,不同 origin 用 , 分隔,如 appA,appB -
strategy
:限制模式,AUTHORITY_WHITE 為白名單模式,AUTHORITY_BLACK 為黑名單模式,默認(rèn)為白名單模式
2.1.5 熱點規(guī)則 (ParamFlowRule)
熱點規(guī)則的配置略顯麻煩一點。首先需要理解,什么是熱點
熱點:
何為熱點?熱點即經(jīng)常訪問的數(shù)據(jù)。很多時候我們希望統(tǒng)計某個熱點數(shù)據(jù)中訪問頻次最高的 Top K 數(shù)據(jù),并對其訪問進(jìn)行限制。比如:
- 商品 ID 為參數(shù),統(tǒng)計一段時間內(nèi)最常購買的商品 ID 并進(jìn)行限制
- 用戶 ID 為參數(shù),針對一段時間內(nèi)頻繁訪問的用戶 ID 進(jìn)行限制
熱點參數(shù)限流會統(tǒng)計傳入?yún)?shù)中的熱點參數(shù),并根據(jù)配置的限流閾值與模式,對包含熱點參數(shù)的資源調(diào)用進(jìn)行限流。熱點參數(shù)限流可以看做是一種特殊的流量控制,僅對包含熱點參數(shù)的資源調(diào)用生效。
限流原理:
Sentinel 利用 LRU 策略統(tǒng)計最近最常訪問的熱點參數(shù),結(jié)合令牌桶算法來進(jìn)行參數(shù)級別的流控
在我們項目中,如果想要使用改規(guī)則,還需要額外引入maven依賴:文章來源:http://www.zghlxwxcb.cn/news/detail-819092.html
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-parameter-flow-control</artifactId>
<version>x.y.z</version>
</dependency>
重要屬性:文章來源地址http://www.zghlxwxcb.cn/news/detail-819092.html
學(xué)習(xí)總結(jié)
感謝
- 感謝Alibaba Sentinel的文章《在生產(chǎn)環(huán)境中使用 Sentinel》
到了這里,關(guān)于【分布式微服務(wù)專題】從單體到分布式(四、SpringCloud整合Sentinel)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!