Sentinel與Hystrix的區(qū)別

Sentinel?是阿里中間件團隊研發(fā)的面向分布式服務(wù)架構(gòu)的輕量級高可用流量控制組件兵睛,最近正式開源洒敏。Sentinel 主要以流量為切入點,從流量控制滚秩、熔斷降級、系統(tǒng)負載保護等多個維度來幫助用戶保護服務(wù)的穩(wěn)定性榕吼。大家可能會問:Sentinel 和之前常用的熔斷降級庫 Netflix Hystrix 有什么異同呢您朽?本文將從多個角度對 Sentinel 和 Hystrix 進行對比,幫助大家進行技術(shù)選型仍源。?

Hystrix 的關(guān)注點在于以隔離和熔斷為主的容錯機制,超時或者熔斷的調(diào)用會快速失敗舔涎,并可以提供fallback機制笼踩,而Sentinel 的側(cè)重點在與:

多樣化的流量控制

熔斷升級

系統(tǒng)負載保護

實時監(jiān)控和控制臺

可以看到兩者解決的問題還是有比較大的不同的,下面我們來分別對比一下

Hystrix 的資源模型設(shè)計上采用了命令模式亡嫌,將對外部資源的調(diào)用和 fallback 邏輯封裝成一個命令對象(HystrixCommand?/?HystrixObservableCommand)嚎于,其底層的執(zhí)行是基于 RxJava 實現(xiàn)的。每個 Command 創(chuàng)建時都要指定 commandKey 和 groupKey(用于區(qū)分資源)以及對應(yīng)的隔離策略(線程池隔離 or 信號量隔離)挟冠。線程池隔離模式下需要配置線程池對應(yīng)的參數(shù)(線程池名稱于购、容量、排隊超時等)知染,然后 Command 就會在指定的線程池按照指定的容錯策略執(zhí)行肋僧;信號量隔離模式下需要配置最大并發(fā)數(shù),執(zhí)行 Command 時 Hystrix 就會限制其并發(fā)調(diào)用。


Sentinel 的設(shè)計則更為簡單嫌吠。相比 Hystrix Command 強依賴隔離規(guī)則止潘,Sentinel 的資源定義與規(guī)則配置的耦合度更低。Hystrix 的 Command 強依賴于隔離規(guī)則配置的原因是隔離規(guī)則會直接影響 Command 的執(zhí)行辫诅。在執(zhí)行的時候 Hystrix 會解析 Command 的隔離規(guī)則來創(chuàng)建 RxJava Scheduler 并在其上調(diào)度執(zhí)行凭戴,若是線程池模式則 Scheduler 底層的線程池為配置的線程池,若是信號量模式則簡單包裝成當(dāng)前線程執(zhí)行的 Scheduler炕矮。而 Sentinel 并不指定執(zhí)行模型么夫,也不關(guān)注應(yīng)用是如何執(zhí)行的。Sentinel 的原則非常簡單:根據(jù)對應(yīng)資源配置的規(guī)則來為資源執(zhí)行相應(yīng)的限流/降級/負載保護策略肤视。在 Sentinel 中資源定義和規(guī)則配置是分離的档痪。用戶先通過 Sentinel API 給對應(yīng)的業(yè)務(wù)邏輯定義資源(埋點),然后可以在需要的時候配置規(guī)則钢颂。埋點方式有兩種:

try-catch 方式(通過 SphU.entry(...))钞它,用戶在 catch 塊中執(zhí)行異常處理 / fallback

if-else 方式(通過 SphO.entry(...))拜银,當(dāng)返回 false 時執(zhí)行異常處理 / fallback


Sentinel 提供多樣化的規(guī)則配置方式殊鞭。除了直接通過?loadRules?API 將規(guī)則注冊到內(nèi)存態(tài)之外,用戶還可以注冊各種外部數(shù)據(jù)源來提供動態(tài)的規(guī)則尼桶。用戶可以根據(jù)系統(tǒng)當(dāng)前的實時情況去動態(tài)地變更規(guī)則配置操灿,數(shù)據(jù)源會將變更推送至 Sentinel 并即時生效。


隔離是 Hystrix 的核心功能之一泵督。Hystrix 提供兩種隔離策略:線程池隔離(Bulkhead Pattern)和信號量隔離趾盐,其中最推薦也是最常用的是線程池隔離。Hystrix 的線程池隔離針對不同的資源分別創(chuàng)建不同的線程池小腊,不同服務(wù)調(diào)用都發(fā)生在不同的線程池中救鲤,在線程池排隊、超時等阻塞情況時可以快速失敗秩冈,并可以提供 fallback 機制本缠。線程池隔離的好處是隔離度比較高,可以針對某個資源的線程池去進行處理而不影響其它資源入问,但是代價就是線程上下文切換的 overhead 比較大丹锹,特別是對低延時的調(diào)用有比較大的影響。

但是芬失,實際情況下楣黍,線程池隔離并沒有帶來非常多的好處。首先就是過多的線程池會非常影響性能棱烂∽馄考慮這樣一個場景,在 Tomcat 之類的 Servlet 容器使用 Hystrix,本身 Tomcat 自身的線程數(shù)目就非常多了(可能到幾十或一百多)窜锯,如果加上 Hystrix 為各個資源創(chuàng)建的線程池张肾,總共線程數(shù)目會非常多(幾百個線程),這樣上下文切換會有非常大的損耗锚扎。另外吞瞪,線程池模式比較徹底的隔離性使得 Hystrix 可以針對不同資源線程池的排隊、超時情況分別進行處理驾孔,但這其實是超時熔斷和流量控制要解決的問題芍秆,如果組件具備了超時熔斷和流量控制的能力,線程池隔離就顯得沒有那么必要了翠勉。

Sentinel 可以通過并發(fā)線程數(shù)模式的流量控制來提供信號量隔離的功能妖啥。這樣的隔離非常輕量級,僅限制對某個資源調(diào)用的并發(fā)數(shù)对碌,而不是顯式地去創(chuàng)建線程池荆虱,所以 overhead 比較小,但是效果不錯朽们。并且結(jié)合基于響應(yīng)時間的熔斷降級模式怀读,可以在不穩(wěn)定資源的平均響應(yīng)時間比較高的時候自動降級,防止過多的慢調(diào)用占滿并發(fā)數(shù)骑脱,影響整個系統(tǒng)菜枷。而 Hystrix 的信號量隔離比較簡單,無法對慢調(diào)用自動進行降級叁丧,只能等待客戶端自己超時啤誊,因此仍然可能會出現(xiàn)級聯(lián)阻塞的情況。

熔斷降級對比 sentinel和Hystrix的熔斷降級本質(zhì)都是基于熔斷器模式

?Sentinel 與 Hystrix 都支持基于失敗比率(異常比率) 的熔斷降級?此時所有對該資源的調(diào)用都會被 block拥娄,直到過了指定的時間窗口后才啟發(fā)性地恢復(fù)蚊锹。上面提到過,Sentinel 還支持基于平均響應(yīng)時間的熔斷降級稚瘾,可以在服務(wù)響應(yīng)時間持續(xù)飆高的時候自動熔斷牡昆,拒絕掉更多的請求,直到一段時間后才恢復(fù)孟抗。這樣可以防止調(diào)用非常慢造成級聯(lián)阻塞的情況迁杨。


實時指標統(tǒng)計實現(xiàn)對比

Hystrix 和 Sentinel 的實時指標數(shù)據(jù)統(tǒng)計實現(xiàn)都是基于滑動窗口的。Hystrix 1.5 之前的版本是通過環(huán)形數(shù)組實現(xiàn)的滑動窗口凄硼,通過鎖配合 CAS 的操作對每個桶的統(tǒng)計信息進行更新铅协。Hystrix 1.5 開始對實時指標統(tǒng)計的實現(xiàn)進行了重構(gòu),將指標統(tǒng)計數(shù)據(jù)結(jié)構(gòu)抽象成了響應(yīng)式流(reactive stream)的形式摊沉,方便消費者去利用指標信息狐史。同時底層改造成了基于 RxJava 的事件驅(qū)動模式,在服務(wù)調(diào)用成功/失敗/超時的時候發(fā)布相應(yīng)的事件,通過一系列的變換和聚合最終得到實時的指標統(tǒng)計數(shù)據(jù)流骏全,可以被熔斷器或 Dashboard 消費苍柏。

Sentinel 目前抽象出了 Metric 指標統(tǒng)計接口,底層可以有不同的實現(xiàn)姜贡,目前默認的實現(xiàn)是基于LeapArray的滑動窗口试吁,后續(xù)根據(jù)需要可能會引入 reactive stream 等實現(xiàn)。


Sentinel 的特色

除了之前提到的兩者的共同特性之外楼咳,Sentinel 還提供以下的特色功能:

輕量級熄捍,高性能?

Sentinel 作為一個功能完備的高可用流量管控組件,其核心sentinel-core沒有任何多余依賴母怜,打包后只有不到200K余耽,非常輕量級,開發(fā)者可以放心引入?sentinel-core?而不需擔(dān)心依賴問題 苹熏,同時sentinel提供多種擴展點碟贾,用戶可以很方便的根據(jù)需求去進行擴展,而且無縫切換到Sentinel中

引入Sentinel帶來的性能損耗非常小轨域。只有在業(yè)務(wù)單機量級超過 25W QPS 的時候才會有一些顯著的影響(5% - 10% 左右)袱耽,單機 QPS 不太大的時候損耗幾乎可以忽略不計。


流量控制

Sentinel可以針對不同的調(diào)用 以不同的運行指標?如 QPS疙挺、并發(fā)調(diào)用數(shù)扛邑、系統(tǒng)負載等)為基準怜浅,對資源調(diào)用進行流量控制铐然,將隨機的請求調(diào)整成合適的形狀。

Sentinel 支持多樣化的流量整形策略恶座,在 QPS 過高的時候可以自動將流量調(diào)整成合適的形狀搀暑。常用的有:

直接拒絕模式:即超出的請求直接拒絕。

慢啟動預(yù)熱模式: 當(dāng)流量激增的時候跨琳,控制流量通過的速率自点,讓通過的流量緩緩的增加,在一定時間內(nèi)逐漸增加到閾值上限脉让,給冷系統(tǒng)一個預(yù)熱的時間桂敛,避免冷系統(tǒng)被壓垮。

勻速器模式?利用 Leaky Bucket 算法實現(xiàn)的勻速模式溅潜,嚴格控制了請求通過的時間間隔术唬,同時堆積的請求將會排隊,超過超時時長的請求直接被拒絕滚澜。


Sentinel? ?Hystrix

隔離策略基于并發(fā)數(shù)線程池隔離/信號量隔離

熔斷降級策略基于響應(yīng)時間或失敗比率基于失敗比率

實時指標實現(xiàn)滑動窗口滑動窗口(基于 RxJava)

規(guī)則配置支持多種數(shù)據(jù)源支持多種數(shù)據(jù)源

擴展性多個擴展點插件的形式

基于注解的支持即將發(fā)布支持

調(diào)用鏈路信息支持同步調(diào)用不支持

限流基于 QPS / 并發(fā)數(shù)粗仓,支持基于調(diào)用關(guān)系的限流不支持

流量整形支持慢啟動、勻速器模式不支持

系統(tǒng)負載保護支持不支持

實時監(jiān)控 API各式各樣較為簡單

控制臺開箱即用,可配置規(guī)則借浊、查看秒級監(jiān)控塘淑、機器發(fā)現(xiàn)等不完善

常見框架的適配Servlet、Spring Cloud蚂斤、Dubbo存捺、gRPC 等Servlet、Spring Cloud Netflix


文章出處 https://blog.csdn.net/educast/article/details/88735339

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末曙蒸,一起剝皮案震驚了整個濱河市召噩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌逸爵,老刑警劉巖具滴,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異师倔,居然都是意外死亡构韵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門趋艘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疲恢,“玉大人,你說我怎么就攤上這事瓷胧∠匀” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵搓萧,是天一觀的道長杂数。 經(jīng)常有香客問我,道長瘸洛,這世上最難降的妖魔是什么揍移? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮反肋,結(jié)果婚禮上那伐,老公的妹妹穿的比我還像新娘。我一直安慰自己石蔗,他們只是感情好罕邀,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著养距,像睡著了一般诉探。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上铃在,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天阵具,我揣著相機與錄音碍遍,去河邊找鬼。 笑死阳液,一個胖子當(dāng)著我的面吹牛怕敬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播帘皿,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼东跪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鹰溜?” 一聲冷哼從身側(cè)響起虽填,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎曹动,沒想到半個月后斋日,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體墓陈,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡恶守,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贡必。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兔港。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖仔拟,靈堂內(nèi)的尸體忽然破棺而出衫樊,到底是詐尸還是另有隱情,我是刑警寧澤利花,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布科侈,位于F島的核電站,受9級特大地震影響晋被,放射性物質(zhì)發(fā)生泄漏兑徘。R本人自食惡果不足惜刚盈,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一羡洛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧藕漱,春花似錦欲侮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至橄仍,卻和暖如春韧涨,著一層夾襖步出監(jiān)牢的瞬間牍戚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工虑粥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留如孝,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓娩贷,卻偏偏與公主長得像第晰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子彬祖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容