新聞中心
今日目標(biāo)
- 理解Sentinel原理
之前已經(jīng)介紹了雪崩產(chǎn)生原因和解決方式,那么這些解決方式如何落地?現(xiàn)在支持SpringCloud微服務(wù)保護(hù)技術(shù)一般都是:Hystrix和Sentinle,早期比較流行的是Hystrix框架,但目前國(guó)內(nèi)實(shí)用最廣泛的還是阿里巴巴的Sentinel框架,我們對(duì)這兩種常見(jiàn)技術(shù)進(jìn)行對(duì)比:

成都一家集口碑和實(shí)力的網(wǎng)站建設(shè)服務(wù)商,擁有專業(yè)的企業(yè)建站團(tuán)隊(duì)和靠譜的建站技術(shù),十年企業(yè)及個(gè)人網(wǎng)站建設(shè)經(jīng)驗(yàn) ,為成都上1000家客戶提供網(wǎng)頁(yè)設(shè)計(jì)制作,網(wǎng)站開(kāi)發(fā),企業(yè)網(wǎng)站制作建設(shè)等服務(wù),包括成都營(yíng)銷型網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),同時(shí)也為不同行業(yè)的客戶提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作的服務(wù),包括成都電商型網(wǎng)站制作建設(shè),裝修行業(yè)網(wǎng)站制作建設(shè),傳統(tǒng)機(jī)械行業(yè)網(wǎng)站建設(shè),傳統(tǒng)農(nóng)業(yè)行業(yè)網(wǎng)站制作建設(shè)。在成都做網(wǎng)站,選網(wǎng)站制作建設(shè)服務(wù)商就選成都創(chuàng)新互聯(lián)公司。
|
Sentinel |
Hystrix |
|
|
隔離策略 |
信號(hào)量隔離 |
線程池隔離/信號(hào)量隔離 |
|
熔斷降級(jí)策略 |
基于慢調(diào)用比例或異常比例 |
基于失敗比率 |
|
實(shí)時(shí)指標(biāo)實(shí)現(xiàn) |
滑動(dòng)窗口 |
滑動(dòng)窗口(基于 RxJava) |
|
規(guī)則配置 |
支持多種數(shù)據(jù)源 |
支持多種數(shù)據(jù)源 |
|
擴(kuò)展性 |
多個(gè)擴(kuò)展點(diǎn) |
插件的形式 |
|
基于注解的支持 |
支持 |
支持 |
|
限流 |
基于 QPS,支持基于調(diào)用關(guān)系的限流 |
有限的支持 |
|
流量整形 |
支持慢啟動(dòng)、勻速排隊(duì)模式 |
不支持 |
|
系統(tǒng)自適應(yīng)保護(hù) |
支持 |
不支持 |
|
控制臺(tái) |
開(kāi)箱即用,可配置規(guī)則、查看秒級(jí)監(jiān)控、機(jī)器發(fā)現(xiàn)等 |
不完善 |
|
常見(jiàn)框架的適配 |
Servlet、Spring Cloud、Dubbo、gRPC 等 |
Servlet、Spring Cloud Netflix |
在種種差異中,我們重點(diǎn)關(guān)注加粗標(biāo)注的部分:
隔離策略:
- 線程池隔離:同上述線程隔離案例,給不同業(yè)務(wù)分配不同線程池,這種方案可以杜絕雪崩問(wèn)題;但是因?yàn)閠omcat之外的線程池開(kāi)銷也使得系統(tǒng)開(kāi)銷增加,頻繁的上下文切換將給系統(tǒng)性能帶來(lái)額外的損失。
- 信號(hào)量隔離:不會(huì)給業(yè)務(wù)單獨(dú)創(chuàng)建線程池(統(tǒng)一使用tomcat一個(gè)容器),而是限制每個(gè)業(yè)務(wù)能使用的線程數(shù)量。統(tǒng)計(jì)當(dāng)前業(yè)務(wù)使用的線程數(shù),當(dāng)達(dá)到指定數(shù)量后(類似計(jì)數(shù)器)觸發(fā)隔離。相較于線程池隔離性差一點(diǎn)。
熔斷降級(jí)策略
- 慢調(diào)用比例/異常比例/異常數(shù):統(tǒng)計(jì)調(diào)用中慢性能的比例、異常的比例、或異常數(shù)量均可觸發(fā)熔斷降級(jí)。
- 失敗比例:只能根據(jù)異常請(qǐng)求比例觸發(fā)熔斷降級(jí)策略。
限流:
- 基于QPS/調(diào)用鏈路:基于調(diào)用的QPS、調(diào)用鏈路都可以做到限流。
- 有限的控制:沒(méi)有專門的限流方案,基于線程池隔離做的,線程池有多少線程數(shù)就限制到多少。
流量整形:
- 慢調(diào)用/排隊(duì)等待:避免突發(fā)流量的暴增而引起系統(tǒng)崩潰,而Hystrix則沒(méi)有解決方案
控制臺(tái):
- Sentinel有較為完善的控制臺(tái),界面化操作實(shí)時(shí)生效,而Hystrix只能查看一下服務(wù)狀態(tài),不可動(dòng)態(tài)調(diào)整。
對(duì)比可以發(fā)現(xiàn)Hystrix的重點(diǎn)在于隔離、熔斷為主的容錯(cuò)機(jī)制,而Sentinel的側(cè)重點(diǎn)在于:多樣化的流量控制、熔斷降級(jí)、系統(tǒng)保護(hù)、實(shí)時(shí)監(jiān)控和控制臺(tái)。同時(shí)基于HyStrix停止維護(hù),加上Sentinel在阿里巴巴經(jīng)過(guò)雙十一的高峰流量驗(yàn)證,目前國(guó)內(nèi)主流保護(hù)還是選擇了后者。因?yàn)楹罄m(xù)的章節(jié)中我們也將借助于Sentinel為大家實(shí)踐微服務(wù)保護(hù)相關(guān)的知識(shí)點(diǎn)。
1. Sentinel基本概念
資源
資源是 Sentinel 的關(guān)鍵概念。它可以是 Java 應(yīng)用程序中的任何內(nèi)容,例如,由應(yīng)用程序提供的服務(wù),或由應(yīng)用程序調(diào)用的其它應(yīng)用提供的服務(wù),甚至可以是一段代碼。在接下來(lái)的文檔中,我們都會(huì)用資源來(lái)描述代碼塊。
只要通過(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)整。
2.Sentinel 功能和設(shè)計(jì)理念
2.1 流量控制
流量控制在網(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)整成合適的形狀,如下圖所示:
圖片
流量控制有以下幾個(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á)到想要的效果。
2.2 熔斷降級(jí)
什么是熔斷降級(jí)
除了流量控制以外,降低調(diào)用鏈路中的不穩(wěn)定資源也是 Sentinel 的使命之一。由于調(diào)用關(guān)系的復(fù)雜性,如果調(diào)用鏈路中的某個(gè)資源出現(xiàn)了不穩(wěn)定,最終會(huì)導(dǎo)致請(qǐng)求發(fā)生堆積。這個(gè)問(wèn)題和 Hystrix 里面描述的問(wèn)題是一樣的。
圖片
Sentinel 和 Hystrix 的原則是一致的: 當(dāng)調(diào)用鏈路中某個(gè)資源出現(xiàn)不穩(wěn)定,例如,表現(xiàn)為 timeout,異常比例升高的時(shí)候,則對(duì)這個(gè)資源的調(diào)用進(jìn)行限制,并讓請(qǐng)求快速失敗,避免影響到其它的資源,最終產(chǎn)生雪崩的效果。
熔斷降級(jí)設(shè)計(jì)理念
在限制的手段上,Sentinel 和 Hystrix 采取了完全不一樣的方法。
Hystrix 通過(guò)線程池的方式,來(lái)對(duì)依賴(在我們的概念中對(duì)應(yīng)資源)進(jìn)行了隔離。這樣做的好處是資源和資源之間做到了最徹底的隔離。缺點(diǎn)是除了增加了線程切換的成本,還需要預(yù)先給各個(gè)資源做線程池大小的分配。
Sentinel 對(duì)這個(gè)問(wèn)題采取了兩種手段:
1.通過(guò)并發(fā)線程數(shù)進(jìn)行限制
和資源池隔離的方法不同,Sentinel 通過(guò)限制資源并發(fā)線程的數(shù)量,來(lái)減少不穩(wěn)定資源對(duì)其它資源的影響。這樣不但沒(méi)有線程切換的損耗,也不需要您預(yù)先分配線程池的大小。當(dāng)某個(gè)資源出現(xiàn)不穩(wěn)定的情況下,例如響應(yīng)時(shí)間變長(zhǎng),對(duì)資源的直接影響就是會(huì)造成線程數(shù)的逐步堆積。當(dāng)線程數(shù)在特定資源上堆積到一定的數(shù)量之后,對(duì)該資源的新請(qǐng)求就會(huì)被拒絕。堆積的線程完成任務(wù)后才開(kāi)始繼續(xù)接收請(qǐng)求。
2.通過(guò)響應(yīng)時(shí)間對(duì)資源進(jìn)行降級(jí)
除了對(duì)并發(fā)線程數(shù)進(jìn)行控制以外,Sentinel 還可以通過(guò)響應(yīng)時(shí)間來(lái)快速降級(jí)不穩(wěn)定的資源。當(dāng)依賴的資源出現(xiàn)響應(yīng)時(shí)間過(guò)長(zhǎng)后,所有對(duì)該資
系統(tǒng)負(fù)載保護(hù)
Sentinel 同時(shí)提供系統(tǒng)維度的自適應(yīng)保護(hù)能力。防止雪崩,是系統(tǒng)防護(hù)中重要的一環(huán)。當(dāng)系統(tǒng)負(fù)載較高的時(shí)候,如果還持續(xù)讓請(qǐng)求進(jìn)入,可能會(huì)導(dǎo)致系統(tǒng)崩潰,無(wú)法響應(yīng)。在集群環(huán)境下,網(wǎng)絡(luò)負(fù)載均衡會(huì)把本應(yīng)這臺(tái)機(jī)器承載的流量轉(zhuǎn)發(fā)到其它的機(jī)器上去。如果這個(gè)時(shí)候其它的機(jī)器也處在一個(gè)邊緣狀態(tài)的時(shí)候,這個(gè)增加的流量就會(huì)導(dǎo)致這臺(tái)機(jī)器也崩潰,最后導(dǎo)致整個(gè)集群不可用。
針對(duì)這個(gè)情況,Sentinel 提供了對(duì)應(yīng)的保護(hù)機(jī)制,讓系統(tǒng)的入口流量和系統(tǒng)的負(fù)載達(dá)到一個(gè)平衡,保證系統(tǒng)在能力范圍之內(nèi)處理最多的請(qǐng)求。
2.3. Sentinel 是如何工作的
Sentinel 的主要工作機(jī)制如下:
- 對(duì)主流框架提供適配或者顯示的 API,來(lái)定義需要保護(hù)的資源,并提供設(shè)施對(duì)資源進(jìn)行實(shí)時(shí)統(tǒng)計(jì)和調(diào)用鏈路分析。
- 根據(jù)預(yù)設(shè)的規(guī)則,結(jié)合對(duì)資源的實(shí)時(shí)統(tǒng)計(jì)信息,對(duì)流量進(jìn)行控制。同時(shí),Sentinel 提供開(kāi)放的接口,方便您定義及改變規(guī)則。
- Sentinel 提供實(shí)時(shí)的監(jiān)控系統(tǒng),方便您快速了解目前系統(tǒng)的狀態(tài)。
網(wǎng)頁(yè)標(biāo)題:Sentinel原理介紹,你學(xué)會(huì)了嗎?
本文來(lái)源:http://m.fisionsoft.com.cn/article/dhjshpd.html


咨詢
建站咨詢
