自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Sentinel原理介紹,你學(xué)會了嗎?

開發(fā) 前端
Sentinel 和 Hystrix 的原則是一致的: 當(dāng)調(diào)用鏈路中某個資源出現(xiàn)不穩(wěn)定,例如,表現(xiàn)為 timeout,異常比例升高的時候,則對這個資源的調(diào)用進行限制,并讓請求快速失敗,避免影響到其它的資源,最終產(chǎn)生雪崩的效果。

今日目標(biāo)

  • 理解Sentinel原理

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


Sentinel

Hystrix

隔離策略

信號量隔離

線程池隔離/信號量隔離

熔斷降級策略

基于慢調(diào)用比例或異常比例

基于失敗比率

實時指標(biāo)實現(xiàn)

滑動窗口

滑動窗口(基于 RxJava)

規(guī)則配置

支持多種數(shù)據(jù)源

支持多種數(shù)據(jù)源

擴展性

多個擴展點

插件的形式

基于注解的支持

支持

支持

限流

基于 QPS,支持基于調(diào)用關(guān)系的限流

有限的支持

流量整形

支持慢啟動、勻速排隊模式

不支持

系統(tǒng)自適應(yīng)保護

支持

不支持

控制臺

開箱即用,可配置規(guī)則、查看秒級監(jiān)控、機器發(fā)現(xiàn)等

不完善

常見框架的適配

Servlet、Spring Cloud、Dubbo、gRPC  等

Servlet、Spring Cloud Netflix

在種種差異中,我們重點關(guān)注加粗標(biāo)注的部分:

隔離策略:

  • 線程池隔離:同上述線程隔離案例,給不同業(yè)務(wù)分配不同線程池,這種方案可以杜絕雪崩問題;但是因為tomcat之外的線程池開銷也使得系統(tǒng)開銷增加,頻繁的上下文切換將給系統(tǒng)性能帶來額外的損失。
  • 信號量隔離:不會給業(yè)務(wù)單獨創(chuàng)建線程池(統(tǒng)一使用tomcat一個容器),而是限制每個業(yè)務(wù)能使用的線程數(shù)量。統(tǒng)計當(dāng)前業(yè)務(wù)使用的線程數(shù),當(dāng)達到指定數(shù)量后(類似計數(shù)器)觸發(fā)隔離。相較于線程池隔離性差一點。

熔斷降級策略

  • 慢調(diào)用比例/異常比例/異常數(shù):統(tǒng)計調(diào)用中慢性能的比例、異常的比例、或異常數(shù)量均可觸發(fā)熔斷降級。
  • 失敗比例:只能根據(jù)異常請求比例觸發(fā)熔斷降級策略。

限流:

  • 基于QPS/調(diào)用鏈路:基于調(diào)用的QPS、調(diào)用鏈路都可以做到限流。
  • 有限的控制:沒有專門的限流方案,基于線程池隔離做的,線程池有多少線程數(shù)就限制到多少。

流量整形:

  • 慢調(diào)用/排隊等待:避免突發(fā)流量的暴增而引起系統(tǒng)崩潰,而Hystrix則沒有解決方案

控制臺:

  • Sentinel有較為完善的控制臺,界面化操作實時生效,而Hystrix只能查看一下服務(wù)狀態(tài),不可動態(tài)調(diào)整。

對比可以發(fā)現(xiàn)Hystrix的重點在于隔離、熔斷為主的容錯機制,而Sentinel的側(cè)重點在于:多樣化的流量控制、熔斷降級、系統(tǒng)保護、實時監(jiān)控和控制臺。同時基于HyStrix停止維護,加上Sentinel在阿里巴巴經(jīng)過雙十一的高峰流量驗證,目前國內(nèi)主流保護還是選擇了后者。因為后續(xù)的章節(jié)中我們也將借助于Sentinel為大家實踐微服務(wù)保護相關(guān)的知識點。

1. Sentinel基本概念

資源

資源是 Sentinel 的關(guān)鍵概念。它可以是 Java 應(yīng)用程序中的任何內(nèi)容,例如,由應(yīng)用程序提供的服務(wù),或由應(yīng)用程序調(diào)用的其它應(yīng)用提供的服務(wù),甚至可以是一段代碼。在接下來的文檔中,我們都會用資源來描述代碼塊。

只要通過 Sentinel API 定義的代碼,就是資源,能夠被 Sentinel 保護起來。大部分情況下,可以使用方法簽名,URL,甚至服務(wù)名稱作為資源名來標(biāo)示資源。

規(guī)則

圍繞資源的實時狀態(tài)設(shè)定的規(guī)則,可以包括流量控制規(guī)則、熔斷降級規(guī)則以及系統(tǒng)保護規(guī)則。所有規(guī)則可以動態(tài)實時調(diào)整。

2.Sentinel 功能和設(shè)計理念

2.1 流量控制

流量控制在網(wǎng)絡(luò)傳輸中是一個常用的概念,它用于調(diào)整網(wǎng)絡(luò)包的發(fā)送數(shù)據(jù)。然而,從系統(tǒng)穩(wěn)定性角度考慮,在處理請求的速度上,也有非常多的講究。任意時間到來的請求往往是隨機不可控的,而系統(tǒng)的處理能力是有限的。我們需要根據(jù)系統(tǒng)的處理能力對流量進行控制。Sentinel 作為一個調(diào)配器,可以根據(jù)需要把隨機的請求調(diào)整成合適的形狀,如下圖所示:

圖片圖片

流量控制有以下幾個角度:

  • 資源的調(diào)用關(guān)系,例如資源的調(diào)用鏈路,資源和資源之間的關(guān)系;
  • 運行指標(biāo),例如 QPS、線程池、系統(tǒng)負(fù)載等;
  • 控制的效果,例如直接限流、冷啟動、排隊等。

Sentinel 的設(shè)計理念是讓您自由選擇控制的角度,并進行靈活組合,從而達到想要的效果。

2.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)用進行限制,并讓請求快速失敗,避免影響到其它的資源,最終產(chǎn)生雪崩的效果。

熔斷降級設(shè)計理念

在限制的手段上,Sentinel 和 Hystrix 采取了完全不一樣的方法。

Hystrix 通過線程池的方式,來對依賴(在我們的概念中對應(yīng)資源)進行了隔離。這樣做的好處是資源和資源之間做到了最徹底的隔離。缺點是除了增加了線程切換的成本,還需要預(yù)先給各個資源做線程池大小的分配。

Sentinel 對這個問題采取了兩種手段:

1.通過并發(fā)線程數(shù)進行限制

和資源池隔離的方法不同,Sentinel 通過限制資源并發(fā)線程的數(shù)量,來減少不穩(wěn)定資源對其它資源的影響。這樣不但沒有線程切換的損耗,也不需要您預(yù)先分配線程池的大小。當(dāng)某個資源出現(xiàn)不穩(wěn)定的情況下,例如響應(yīng)時間變長,對資源的直接影響就是會造成線程數(shù)的逐步堆積。當(dāng)線程數(shù)在特定資源上堆積到一定的數(shù)量之后,對該資源的新請求就會被拒絕。堆積的線程完成任務(wù)后才開始繼續(xù)接收請求。

2.通過響應(yīng)時間對資源進行降級

除了對并發(fā)線程數(shù)進行控制以外,Sentinel 還可以通過響應(yīng)時間來快速降級不穩(wěn)定的資源。當(dāng)依賴的資源出現(xiàn)響應(yīng)時間過長后,所有對該資

系統(tǒng)負(fù)載保護

Sentinel 同時提供系統(tǒng)維度的自適應(yīng)保護能力。防止雪崩,是系統(tǒng)防護中重要的一環(huán)。當(dāng)系統(tǒng)負(fù)載較高的時候,如果還持續(xù)讓請求進入,可能會導(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ù)載達到一個平衡,保證系統(tǒng)在能力范圍之內(nèi)處理最多的請求。

2.3. Sentinel 是如何工作的

Sentinel 的主要工作機制如下:

  • 對主流框架提供適配或者顯示的 API,來定義需要保護的資源,并提供設(shè)施對資源進行實時統(tǒng)計和調(diào)用鏈路分析。
  • 根據(jù)預(yù)設(shè)的規(guī)則,結(jié)合對資源的實時統(tǒng)計信息,對流量進行控制。同時,Sentinel 提供開放的接口,方便您定義及改變規(guī)則。
  • Sentinel 提供實時的監(jiān)控系統(tǒng),方便您快速了解目前系統(tǒng)的狀態(tài)。

責(zé)任編輯:武曉燕 來源: springboot葵花寶典
相關(guān)推薦

2023-05-05 06:54:07

MySQL數(shù)據(jù)查詢

2023-03-30 08:26:31

DNSTCPUDP

2023-03-31 08:16:39

CDN網(wǎng)絡(luò)數(shù)據(jù)

2023-09-07 07:13:51

2024-03-12 08:37:32

asyncawaitJavaScript

2023-01-10 08:43:15

定義DDD架構(gòu)

2024-02-04 00:00:00

Effect數(shù)據(jù)組件

2023-07-26 13:11:21

ChatGPT平臺工具

2024-01-19 08:25:38

死鎖Java通信

2024-01-02 12:05:26

Java并發(fā)編程

2023-08-01 12:51:18

WebGPT機器學(xué)習(xí)模型

2024-05-11 09:03:26

數(shù)據(jù)表級鎖事務(wù)

2022-08-09 08:25:44

Stream創(chuàng)建流流計算

2024-05-06 00:00:00

InnoDBView隔離

2024-08-06 09:47:57

2022-07-08 09:27:48

CSSIFC模型

2023-01-30 09:01:54

圖表指南圖形化

2024-07-31 08:39:45

Git命令暫存區(qū)

2023-12-12 08:02:10

2023-10-10 11:04:11

Rust難點內(nèi)存
點贊
收藏

51CTO技術(shù)棧公眾號