限流和降級(下) | 如何打造平臺穩(wěn)定性能力(二)

摘要:上一期我們談到了阿里巴巴早期是通過通過在 Nginx 上實(shí)現(xiàn)的擴(kuò)展組件TMD(taobao missile defense淘寶導(dǎo)彈防御系統(tǒng))實(shí)現(xiàn)了接入層限流的主要工作,TMD系統(tǒng)可通過域名類限流、cookie限流、黑名單以及一些安全策略等很好的實(shí)現(xiàn)了在接入層的限流措施。

上一期我們談到了阿里巴巴早期是通過通過在 Nginx 上實(shí)現(xiàn)的擴(kuò)展組件TMD(taobao missile

defense淘寶導(dǎo)彈防御系統(tǒng))實(shí)現(xiàn)了接入層限流的主要工作,TMD系統(tǒng)可通過域名類限流、cookie限流、黑名單以及一些安全策略等很好的實(shí)現(xiàn)了在接入層的限流措施。

但對于服務(wù)層,TMD就無能為力了。對于實(shí)現(xiàn)服務(wù)的限流控制,傳統(tǒng)的實(shí)現(xiàn)方式通常用spring的AOP機(jī)制,對需要限流的接口定義一個advice攔截器,但這套方案在實(shí)際應(yīng)用場景中還是會發(fā)現(xiàn)不少問題。詳細(xì)問題可通過以下的傳送門,進(jìn)行了解。

第一期回顧:限流和降級 - 傳送門

一、Sentinel 簡介

第二期我們將分享到阿里巴巴是如何解決服務(wù)層限流時遇到的問題的。在今年7月底的Aliware Open

Sourec深圳站的活動上,阿里巴巴宣布開源面向分布式服務(wù)架構(gòu)的輕量級限流降級框架

Sentinel。Sentinel正如它英文的意思“哨兵”一樣,為整個服務(wù)化體系的穩(wěn)定運(yùn)行行使著警戒任務(wù),是對資源調(diào)用的控制平臺,主要涵蓋了授權(quán)、限流、降級、調(diào)用統(tǒng)計(jì)監(jiān)控四大功能。

授權(quán):通過配置白名單和黑名單的方式分布式系統(tǒng)的接口和方法進(jìn)行調(diào)用權(quán)限的控制;

限流:對特定資源進(jìn)行調(diào)用的保護(hù),防止資源的過度使用;

降級:判斷依賴的資源的響應(yīng)情況,但依賴的資源響應(yīng)時間過長時進(jìn)行自動降級,并且在指定的時間后自動恢復(fù)調(diào)用;

監(jiān)控:提供了全面的運(yùn)行狀態(tài)監(jiān)控,實(shí)時監(jiān)控資源的調(diào)用情況,如QPS、響應(yīng)時間、限流降級等信息;

Sentinel 平臺有兩個基礎(chǔ)概念,資源和策略,對特定的資源采取不同的控制策略,起到保障應(yīng)用穩(wěn)定性的作用。Sentinel

提供了多個默認(rèn)切入點(diǎn),比如服務(wù)調(diào)用時,數(shù)據(jù)庫、緩存等資源訪問時,覆蓋了大部分應(yīng)用場景,保證對應(yīng)用的低侵入性,同時也支持硬編碼或者自定義AOP的方式來支持特定的使用需求。

二、Sentinel 限流的實(shí)現(xiàn)原理

Sentinel 平臺架構(gòu)圖如下,需要通過Sentinel 實(shí)現(xiàn)限流功能的應(yīng)用中都嵌入Sentinel 客戶端,通過Sentinel

客戶端中提供對服務(wù)調(diào)用和各資源訪問缺省實(shí)現(xiàn)的切入點(diǎn),使得應(yīng)用完全不需要對實(shí)現(xiàn)限流的服務(wù)或資源進(jìn)行單獨(dú)的AOP配置和實(shí)現(xiàn),同時不僅可以限制自己的應(yīng)用調(diào)用別的應(yīng)用,也可以限制別的應(yīng)用調(diào)用我的應(yīng)用。通過這些資源埋點(diǎn)實(shí)時計(jì)算當(dāng)前服務(wù)的QPS,也可通過現(xiàn)有的監(jiān)控系統(tǒng)獲取到應(yīng)用所在服務(wù)器的相關(guān)系統(tǒng)監(jiān)控指標(biāo),用于限流規(guī)則配置中的閥值比對。


?Sentinel 平臺架構(gòu)示意圖

Sentinel控制臺會從客戶端拉取資源實(shí)時的運(yùn)行監(jiān)控?cái)?shù)據(jù)如QPS、響應(yīng)時間等,并展示在控制臺的監(jiān)控面板上。控制臺給運(yùn)維人員提供了針對服務(wù)、緩存、數(shù)據(jù)庫等資源訪問設(shè)置各種限流規(guī)則,并將設(shè)置好的規(guī)則發(fā)送到規(guī)則配置中心后,再有服務(wù)器將規(guī)則推送到相關(guān)的Sentinel客戶端,讓設(shè)置的規(guī)則最終在應(yīng)用運(yùn)行狀態(tài)是時快速生效。

三、Sentinel 降級的實(shí)現(xiàn)原理

Sentinel平臺除了限流的核心功能外,還提供了降級的功能。我們知道,在服務(wù)調(diào)用鏈上,存在服務(wù)間的強(qiáng)弱依賴,即有些業(yè)務(wù)請求處理過程中,有些服務(wù)是否正常被調(diào)研或成功處理了服務(wù)請求,對于整個業(yè)務(wù)請求不會產(chǎn)生決定性的影響,比如交易鏈路中快遞優(yōu)惠這個服務(wù),這類服務(wù)調(diào)用鏈中就會標(biāo)記為弱依賴的服務(wù)。

設(shè)想一下,如果在雙11活動啟動后,大量的用戶訂單請求涌入平臺,此時發(fā)現(xiàn)平臺的整體水位已經(jīng)像平臺最大處理能力的水位逼近時,除了限流可以起到第一層的保護(hù)作用外,我們還可以將那些之前標(biāo)記為弱依賴的服務(wù)平滑下線,也就是讓訂單創(chuàng)建的處理流程中去掉那些弱依賴的服務(wù)調(diào)用,達(dá)到將節(jié)省出的系統(tǒng)資源更好地服務(wù)于核心服務(wù)的運(yùn)行;又或者在大促時,某核心服務(wù)依賴某一個非核心的服務(wù),但發(fā)現(xiàn)因?yàn)檫@個非核心服務(wù)的處理性能和服務(wù)響應(yīng)時間較長,導(dǎo)致了當(dāng)前核心服務(wù)的處理出現(xiàn)了瓶頸,這時為了保證核心服務(wù)的正常處理,就需要在核心服務(wù)業(yè)務(wù)邏輯中對于那個非核心服務(wù)的調(diào)用暫時停止。這樣類似的場景就稱為服務(wù)降級,即從服務(wù)調(diào)用者的角度,對所依賴的下游服務(wù)采取停止調(diào)用的措施,以保證當(dāng)前服務(wù)的處理效率。

要實(shí)現(xiàn)服務(wù)降級,需要在應(yīng)用或服務(wù)實(shí)現(xiàn)中,首先留下可供服務(wù)降級進(jìn)行服務(wù)是否調(diào)用切換的邏輯。一般在代碼中采用static值的方式,作為業(yè)務(wù)邏輯分支的判斷條件,通過對這些static值的修改,實(shí)現(xiàn)服務(wù)調(diào)用邏輯的變化。同樣可以通過Sentinel控制臺提供的降級規(guī)則的配置功能,當(dāng)對某個服務(wù)的方法響應(yīng)時間一旦超過閥值后,就意味著調(diào)用的這個服務(wù)已經(jīng)出現(xiàn)了處理性能的問題,則會自動切換到降級模式,降級持續(xù)的時間可自定義設(shè)置。

四、Sentinel 限流的實(shí)現(xiàn)原理

總結(jié)來說,Sentinel平臺所提供的限流和降級功能,是今天阿里巴巴集團(tuán)如此龐大、復(fù)雜的服務(wù)化平臺穩(wěn)定運(yùn)行的關(guān)鍵,不管是在雙11這樣的大促活動中,還是幾乎每天都有基于服務(wù)化體系構(gòu)建起來的新興業(yè)務(wù)上線,整個服務(wù)化平臺能夠穩(wěn)定運(yùn)行直觀重要。從技術(shù)角度來說,企業(yè)如果要構(gòu)建自身的服務(wù)化平臺,如何保障平臺穩(wěn)定性運(yùn)行的重要能力是服務(wù)化平臺建設(shè)中一定要考慮的問題。

限流和降級是從服務(wù)自身做好保護(hù)的角度來避免平臺級的故障。在分布式服務(wù)環(huán)境下,

我們不可忽略的一個問題是最大程度的增加機(jī)器的利用率,通常會采用超配的方式,但這個過程中往往會出現(xiàn)超配服務(wù)器上的應(yīng)用對資源進(jìn)行爭搶,使得個別或局部應(yīng)用出現(xiàn)服務(wù)響應(yīng)慢甚至掛起,從而給整個業(yè)務(wù)鏈路帶來更大的風(fēng)險(xiǎn)的情況。此時,流量調(diào)度的角色是至關(guān)重要的。下一期我們將從流量調(diào)度的角度看看如何提升平臺的穩(wěn)定性。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,590評論 19 139
  • 一、交易型系統(tǒng)設(shè)計(jì)的一些原則 1.在設(shè)計(jì)系統(tǒng)時,應(yīng)該多思考墨菲定律: * 任何事情都沒有表面看起來那么簡單 * 所...
    ZyBlog閱讀 13,377評論 2 48
  • 題記 | 好的設(shè)計(jì),值得玩味,記一個有故事的晚餐~ 一根油條的“食”言,比他的“誓”言更動心~ 好好吃… 他笨嘴的...
    普蘭的顏色閱讀 251評論 0 1
  • 就在剛剛,公交車上,空空蕩蕩,搖搖晃晃。 末班車,夜歸人。 鐵桿上的吊環(huán)來回碰撞。橘色的燈光拉長道旁樹的影子,倒退...
    經(jīng)嶼閱讀 301評論 1 1
  • 我已聽懂了你的話, 你卻早已在天涯, 誰來聽懂我的話, 我也開始在天涯, 冷笑話終成笑話。
    青春被忘路閱讀 216評論 2 1

友情鏈接更多精彩內(nèi)容