當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]這一篇會講解被一線大廠使用的兩款流量防控組件:Sentinel 和 Hystrix,以及對它們的橫向?qū)Ρ龋约霸撊绾芜x型。

雙11的狂歡,干了這碗「流量防控」湯

來源 |?悟空聊架構(gòu)(ID:PassJava666)

臨近雙十一,從 2009 年第一屆雙十一開始,成交量只有 5000 萬,到去年 2019 年,成交量達(dá)到了 2684 億。今年迎來了第十二屆雙十一,想想都挺激動。

阿里人喜歡將雙十一視為 Team Building(團(tuán)隊建設(shè)),廣為流傳的一句話:打仗是最好的團(tuán)建,沒有參加過雙十一的叫同事,參加過雙十一的叫戰(zhàn)友。

上一篇我通過三國故事講解了服務(wù)雪崩和熔斷的機(jī)制,而且自己造了一個輪子:熔斷器。而這一篇會講解被一線大廠使用的兩款流量防控組件:SentinelHystrix,以及對它們的橫向?qū)Ρ?,以及?code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">如何選型。

本篇主要內(nèi)容如下:

雙11的狂歡,干了這碗「流量防控」湯


一、熔斷&降級&限流&隔離

面對高并發(fā)的流量,我們通常會使用四種方式(熔斷&降級&限流&隔離)來防止瞬時大流量對系統(tǒng)的沖擊。而今天要介紹的這兩款流量防衛(wèi)兵,是專門用在這方面的。下面我先給同學(xué)掃個小盲。

  • 什么是熔斷 ?
雙11的狂歡,干了這碗「流量防控」湯
熔斷場景圖@悟空聊架構(gòu)

關(guān)鍵字:斷路保護(hù)。比如 A 服務(wù)調(diào)用 B 服務(wù),由于網(wǎng)絡(luò)問題或 B 服務(wù)宕機(jī)了或 B 服務(wù)的處理時間長,導(dǎo)致請求的時間超長,如果在一定時間內(nèi)多次出現(xiàn)這種情況,就可以直接將 B 斷路了(A 不再請求B)。而調(diào)用 B 服務(wù)的請求直接返回降級數(shù)據(jù),不必等待 B 服務(wù)的執(zhí)行。因此 B 服務(wù)的問題,不會級聯(lián)影響到 A 服務(wù)。

  • 什么是降級 ?
雙11的狂歡,干了這碗「流量防控」湯
降級場景圖

關(guān)鍵字:返回降級數(shù)據(jù)。網(wǎng)站處于流量高峰期,服務(wù)器壓力劇增,根據(jù)當(dāng)前業(yè)務(wù)情況及流量,對一些服務(wù)和頁面進(jìn)行有策略的降級(停止服務(wù),所有的調(diào)用直接返回降級數(shù)據(jù))。以此緩解服務(wù)器資源的壓力,保證核心業(yè)務(wù)的正常運(yùn)行,保持了客戶和大部分客戶得到正確的響應(yīng)。降級數(shù)據(jù)可以簡單理解為快速返回了一個 false,前端頁面告訴用戶“服務(wù)器當(dāng)前正忙,請稍后再試。

  • 什么是限流?

    雙11的狂歡,干了這碗「流量防控」湯
    限流場景圖

    對請求的流量進(jìn)行控制, 只放行部分請求,使服務(wù)能夠承擔(dān)不超過自己能力的流量壓力。

  • 熔斷和降級的相同點(diǎn)?

    • 熔斷和限流都是為了保證集群大部分服務(wù)的 可用性可靠性防止核心服務(wù)崩潰。
    • 給終端用戶的感受就是某個功能不可用。
  • 熔斷和降級的不同點(diǎn)?

    • 熔斷是被調(diào)用方出現(xiàn)了故障, 主動觸發(fā)的操作。
    • 降級是基于全局考慮,停止某些正常服務(wù),釋放資源。
  • 什么是隔離?

    • 每個服務(wù)看作一個 獨(dú)立運(yùn)行的系統(tǒng),即使某一個系統(tǒng)有問題,也不會影響其他服務(wù)。

二、Hystrix

Hystrix 是什么

Hystrix:高可用性保障的一個框架。由 Netflix 出品(Netflix可以理解為國內(nèi)的愛奇藝等視頻網(wǎng)站)。

Hystrix 的歷史

  • 2011 年,其中的 API 團(tuán)隊為了提升系統(tǒng)的可用性和穩(wěn)定性,發(fā)展出了 Hystrix 框架。

  • 2012 年,Hystrix 區(qū)域比較成熟穩(wěn)定。其他團(tuán)隊也開始使用 Hystrix。

  • 2018 年 11 月,Hystrix在其 Github 主頁宣布,不再開放新功能,推薦開發(fā)者使用其他仍然活躍的開源項目。但是 Hystrix 價值依舊很大,功能強(qiáng)大,國內(nèi)很多一線互聯(lián)網(wǎng)公司在使用。

Hystrix 設(shè)計理念

  • 阻止服務(wù)的雪崩效應(yīng)。
  • 快速失敗和快速恢復(fù)。
  • 優(yōu)雅降級。
  • 使用資源隔離技術(shù),如 bulkhead(艙壁隔離技術(shù))、swimlane(泳道技術(shù))、circuit breaker(斷路技術(shù))。
  • 近實時的監(jiān)控、報警及運(yùn)維操作。

Hystrix 線程池隔離技術(shù)

使用線程池隔離,比如說有 3 個服務(wù) A、B、C,每個服務(wù)的線程池分配 10,20,30個線程,當(dāng) A 服務(wù)線程池中的 10 個線程都拿出來使用后,如果調(diào)用服務(wù) A 的請求量增加,還想再增加線程是不行的,因為 A 服務(wù)分配的線程已經(jīng)用完了,不會拿其他的服務(wù)的線程,這樣就不會影響其他服務(wù)了。Hystrix 默認(rèn)使用線程池隔離模式。

雙11的狂歡,干了這碗「流量防控」湯
線程池隔離技術(shù)

線程池隔離技術(shù)優(yōu)點(diǎn)

  • 依賴的服務(wù)都有隔離的線程池,即使自己的線程池滿了,也不會影響任何其他其他的服務(wù)調(diào)用。
  • 線程池的健康狀態(tài)會上報,可以近實時修改依賴服務(wù)的調(diào)用配置。
  • 線程池具有異步特性,可以構(gòu)建一層異步調(diào)用層。
  • 具有超時檢測的機(jī)制,尤其在服務(wù)間調(diào)用特別有用。

線程池隔離技術(shù)缺點(diǎn)

  • 線程池本身就會帶來一些問題,比如 線程切換,線程管理,無疑增加了 CPU 的開銷。
  • 如果線程池中的線程利用率很低,則無疑是一種浪費(fèi)。

Hystrix 信號量隔離技術(shù)

如下圖所示:簡單來說就是一個池子里面放著一定數(shù)量的信號量,服務(wù) A 每次調(diào)用服務(wù) B 之前,需要從池子里面申請信號量,申請到了,才能去調(diào)用 B 服務(wù)。

雙11的狂歡,干了這碗「流量防控」湯
獲取信號量

線程池隔離和信號量的場景對比

  • 線程池隔離技術(shù) ,適合大部分場景,但需要設(shè)置服務(wù)的超時時間。
  • 信號量隔離技術(shù) ,適合內(nèi)部比較復(fù)雜的業(yè)務(wù),不涉及網(wǎng)絡(luò)請求問題。

三、Sentinel

3.1、Sentinel 是什么

Sentinel:面向分布式服務(wù)架構(gòu)的流量控制組件,主要以流量為切入點(diǎn),從限流、流量整形、熔斷降級、系統(tǒng)負(fù)載保護(hù)、熱點(diǎn)防護(hù)等多個維度來幫助開發(fā)者保障微服務(wù)的穩(wěn)定性。

3.2、Sentinel 的歷史

  • 2012 年,Sentinel 誕生,主要功能為入口流量控制。
  • 2013-2017 年,Sentinel 在阿里巴巴集團(tuán)內(nèi)部迅速發(fā)展,成為基礎(chǔ)技術(shù)模塊,覆蓋了所有的核心場景。Sentinel 也因此積累了大量的流量歸整場景以及生產(chǎn)實踐。
  • 2018 年,Sentinel 開源,并持續(xù)演進(jìn)。
  • 2019 年,Sentinel 朝著多語言擴(kuò)展的方向不斷探索,推出 C++ 原生版本,同時針對 Service Mesh 場景也推出了 Envoy 集群流量控制支持,以解決 Service Mesh 架構(gòu)下多語言限流的問題。
  • 2020 年,推出 Sentinel Go 版本,繼續(xù)朝著云原生方向演進(jìn)。

3.3、Sentinel 的特征

  • 豐富的應(yīng)用場景。 支撐阿里的雙十一核心場景,如秒殺、消息削峰填谷、集群流量控制、實時熔斷下游不可用。
  • 完備的實時監(jiān)控。 可以看到接入應(yīng)用的單臺機(jī)器秒級數(shù)據(jù),以及集群的匯總情況。
  • 廣泛的開源生態(tài)。 Spring Cloud、Dubbo、gRPC 都可以接入 Sentinel。
  • 完善的 SPI 擴(kuò)展點(diǎn)。 實現(xiàn)擴(kuò)展接口來快速定制邏輯。

用一張圖來總結(jié):

雙11的狂歡,干了這碗「流量防控」湯
Sentilel 的主要特性

3.4、Sentinel 的組成

  • 核心庫(Java 客戶端)不依賴任何框架/庫,能在所有的 Java 運(yùn)行時環(huán)境運(yùn)行,且對 Spring Cloud、Dubbo 等框架有較好的支持。
  • 控制臺(Dashboard)基于 Spring Boot 開發(fā),打包后可以直接運(yùn)行,不需要額外的 Tomcat 等應(yīng)用容器。

3.5、Sentinel 的資源

Sentinel 中的資源是核心概念,可以是 Java 應(yīng)用程序中的任何內(nèi)容,可以是提供的服務(wù),甚至是一段代碼。

可以通過 Sentinel API 定義的代碼,就是資源,能夠被 Sentinel保護(hù)起來。可以如下幾種方式來標(biāo)識資源:

  • 方法簽名。
  • URL。
  • 服務(wù)名稱等。

3.6、Sentinel 的設(shè)計理念

Sentinel 作為一個流量控制器,可以根據(jù)需要把隨機(jī)的請求調(diào)整成合適的形狀,如下圖所示:

雙11的狂歡,干了這碗「流量防控」湯
流量整形

四、對比

4.1、隔離設(shè)計上對比

  • Hystrix

Hystrix 提供兩種隔離策略,線程池隔離和信號量隔離。

Hystrix 中最推薦的也是最常用的是線程池隔離。線程池隔離的好處是隔離度很高,不會影響其他資源,但是線程本身也有自己的問題,線程上下文切換時比較耗 CPU 資源的,如果對低延時要求比較高,影響還是挺大的,而且創(chuàng)建線程是需要分配內(nèi)存的,創(chuàng)建的線程越多,需要分配的內(nèi)存也會更多。而且如果對每個資源都創(chuàng)建一個線程池,那線程切換會帶來更大的損耗。

而 Hystrix 的信號量隔離,可以對某個資源調(diào)用的并發(fā)數(shù)進(jìn)行限制,輕量級的,不用顯式創(chuàng)建線程池,但缺點(diǎn)是不能對慢調(diào)用進(jìn)行自動降級,只能等客戶端那邊超時,還是有可能出現(xiàn)級聯(lián)阻塞的情形。

  • Sentinel

Sentinel 可以通過并發(fā)線程數(shù)模式的流量控制來提供信號量隔離的功能,而且它還具備響應(yīng)時間的熔斷降級模式,防止過多的慢調(diào)用占滿并發(fā)數(shù)而影響整個系統(tǒng)。

4.2、熔斷降級的對比

Sentinel 和 Hystrix 都是基于熔斷器模式。都支持基于異常比率來進(jìn)行熔斷,但 Sentinel 更強(qiáng)大,可以基于響應(yīng)時間、異常比率和異常數(shù)來進(jìn)行熔斷降級。

4.3、實時統(tǒng)計的對比

Sentinel 和 Hystrix 都是基于滑動窗口進(jìn)行實時統(tǒng)計,但 Hystrix 是基于 RxJava 的事件驅(qū)動模型,在服務(wù)調(diào)用成功/失敗/超時的時候發(fā)布響應(yīng)的事件,通過一系列的變換和聚合最終得到實時的指標(biāo)統(tǒng)計數(shù)據(jù)流,可以被熔斷器或 Dashboard 消費(fèi)。而 Sentinel 是基于 LeapArray 的滑動窗口。

五、Sentinel 的突出特性

除了上面提到的 三大對比外,Sentinel 還有一些 Hystrix 不具備的功能。

5.1、流量控制

流量控制: 其原理是監(jiān)控應(yīng)用流量的 QPS 或并發(fā)線程數(shù)等指標(biāo),當(dāng)達(dá)到指定的閾值時對流量進(jìn)行控制,以避免被瞬時的流量高峰沖垮,從而保障應(yīng)用的高可用性。

Sentinel 可以基于QPS/并發(fā)數(shù)進(jìn)行流量控制,也可以基于調(diào)用關(guān)系進(jìn)行流量控制。

基于 QPS 進(jìn)行流量控制有以下幾種方式:

  • 直接拒絕: 當(dāng)QPS 超過一定閾值時,直接拒絕。適用于對系統(tǒng)處理能力確切已知的情況。
  • 慢啟動預(yù)熱: 當(dāng)系統(tǒng)長期處于低水位的情況下,當(dāng)流量突然增加時,直接把系統(tǒng)拉升到高水位可能瞬間把系統(tǒng)壓垮。通過"冷啟動",讓通過的流量緩慢增加,在一定時間內(nèi)逐漸增加到閾值上限,給冷系統(tǒng)一個預(yù)熱的時間,避免冷系統(tǒng)被壓垮。
雙11的狂歡,干了這碗「流量防控」湯
慢啟動預(yù)熱模式原理圖
  • 勻速排隊: 請求以均勻的速度通過,對應(yīng)的是漏桶算法。
雙11的狂歡,干了這碗「流量防控」湯
勻速排隊模式原理圖

基于調(diào)用關(guān)系的流量控制:

  • 根據(jù)調(diào)用方限流。
  • 根據(jù)調(diào)用鏈路入口限流:鏈路限流。
  • 根據(jù)具有關(guān)系的資源流量限流:關(guān)聯(lián)流量限流。

5.2、系統(tǒng)自適應(yīng)限流

Sentinel 系統(tǒng)自適應(yīng)限流從整體維度對應(yīng)用入口流量進(jìn)行控制,借助 TCP BBR 思想,結(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)定性。

雙11的狂歡,干了這碗「流量防控」湯
自適應(yīng)限流原理圖

我們把系統(tǒng)處理請求的過程想象為一個水管,到來的請求是往這個水管灌水,當(dāng)系統(tǒng)處理順暢的時候,請求不需要排隊,直接從水管中穿過,這個請求的RT是最短的;反之,當(dāng)請求堆積的時候,那么處理請求的時間則會變?yōu)椋号抨爼r間 + 最短處理時間。

  • 推論一: 如果我們能夠保證水管里的水量,能夠讓水順暢的流動,則不會增加排隊的請求;也就是說,這個時候的系統(tǒng)負(fù)載不會進(jìn)一步惡化。

  • 推論二:?當(dāng)保持入口的流量是水管出來的流量的最大的值的時候,可以最大利用水管的處理能力。

5.3、 實時監(jiān)控和控制面板

Sentinel 提供一個輕量級的開源控制臺,它提供機(jī)器發(fā)現(xiàn)以及健康情況管理、監(jiān)控(單機(jī)和集群),規(guī)則管理和推送的功能。

雙11的狂歡,干了這碗「流量防控」湯
Sentinel 控制臺

5.4、 發(fā)展及生態(tài)

Sentinel 針對 Spring Cloud、Dubbo、gRPC 都進(jìn)行了適配,引入依賴和簡單的配置即可快速接入 Sentinel,相信 Sentinel 將是未來流量防控的一大利器。我比較看好 Sentinel。

5.5、 Sentinel 和 Hystrix 對比總結(jié)

雙11的狂歡,干了這碗「流量防控」湯
Hystix 和 Sentinel 對比總結(jié)

寫在最后

有讀者問我秒殺系統(tǒng)該怎么設(shè)計,在之前的文章中,我已經(jīng)揭秘了秒殺系統(tǒng)的架構(gòu)設(shè)計,下面我還是總結(jié)下秒殺系統(tǒng)關(guān)注的八大點(diǎn):

雙11的狂歡,干了這碗「流量防控」湯

  • 服務(wù)單一職責(zé)、獨(dú)立部署
  • 庫存預(yù)熱、快速扣減
  • 秒殺鏈接加密
  • 動靜分離
  • 惡意請求攔截
  • 流量錯峰
  • 限流&熔斷&降級
  • 隊列削峰

特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:

雙11的狂歡,干了這碗「流量防控」湯

雙11的狂歡,干了這碗「流量防控」湯

雙11的狂歡,干了這碗「流量防控」湯

長按訂閱更多精彩▼

雙11的狂歡,干了這碗「流量防控」湯

如有收獲,點(diǎn)個在看,誠摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉