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

上一期咱們談到了阿里巴巴早期是經過經過在 Nginx 上實現的擴展組件TMD(taobao missile defense淘寶導彈防護系統)實現了接入層限流的主要工做,TMD系統可經過域名類限流、cookie限流、黑名單以及一些安全策略等很好的實現了在接入層的限流措施。spring

但對於服務層,TMD就無能爲力了。對於實現服務的限流控制,傳統的實現方式一般用spring的AOP機制,對須要限流的接口定義一個advice攔截器,但這套方案在實際應用場景中仍是會發現很多問題。詳細問題可經過如下的傳送門,進行了解。數據庫

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

1、Sentinel 簡介

第二期咱們將分享到阿里巴巴是如何解決服務層限流時遇到的問題的。在今年7月底的Aliware Open Sourec深圳站的活動上,阿里巴巴宣佈開源面向分佈式服務架構的輕量級限流降級框架 Sentinel。Sentinel正如它英文的意思「哨兵」同樣,爲整個服務化體系的穩定運行行使着警惕任務,是對資源調用的控制平臺,主要涵蓋了受權、限流、降級、調用統計監控四大功能。安全

• 受權:經過配置白名單和黑名單的方式分佈式系統的接口和方法進行調用權限的控制;服務器

• 限流:對特定資源進行調用的保護,防止資源的過分使用;cookie

• 降級:判斷依賴的資源的響應狀況,但依賴的資源響應時間過長時進行自動降級,而且在指定的時間後自動恢復調用;架構

• 監控:提供了全面的運行狀態監控,實時監控資源的調用狀況,如QPS、響應時間、限流降級等信息;框架

Sentinel 平臺有兩個基礎概念,資源和策略,對特定的資源採起不一樣的控制策略,起到保障應用穩定性的做用。Sentinel 提供了多個默認切入點,好比服務調用時,數據庫、緩存等資源訪問時,覆蓋了大部分應用場景,保證對應用的低侵入性,同時也支持硬編碼或者自定義AOP的方式來支持特定的使用需求。運維

2、Sentinel 限流的實現原理

Sentinel 平臺架構圖以下,須要經過Sentinel 實現限流功能的應用中都嵌入Sentinel 客戶端,經過Sentinel 客戶端中提供對服務調用和各資源訪問缺省實現的切入點,使得應用徹底不須要對實現限流的服務或資源進行單獨的AOP配置和實現,同時不只能夠限制本身的應用調用別的應用,也能夠限制別的應用調用個人應用。經過這些資源埋點實時計算當前服務的QPS,也可經過現有的監控系統獲取到應用所在服務器的相關係統監控指標,用於限流規則配置中的閥值比對。分佈式

clipboard.png
▵Sentinel 平臺架構示意圖

Sentinel控制檯會從客戶端拉取資源實時的運行監控數據如QPS、響應時間等,並展現在控制檯的監控面板上。控制檯給運維人員提供了針對服務、緩存、數據庫等資源訪問設置各類限流規則,並將設置好的規則發送到規則配置中心後,再有服務器將規則推送到相關的Sentinel客戶端,讓設置的規則最終在應用運行狀態是時快速生效。

3、Sentinel 降級的實現原理

Sentinel平臺除了限流的核心功能外,還提供了降級的功能。咱們知道,在服務調用鏈上,存在服務間的強弱依賴,即有些業務請求處理過程當中,有些服務是否正常被調研或成功處理了服務請求,對於整個業務請求不會產生決定性的影響,好比交易鏈路中快遞優惠這個服務,這類服務調用鏈中就會標記爲弱依賴的服務。

設想一下,若是在雙11活動啓動後,大量的用戶訂單請求涌入平臺,此時發現平臺的總體水位已經像平臺最大處理能力的水位逼近時,除了限流能夠起到第一層的保護做用外,咱們還能夠將那些以前標記爲弱依賴的服務平滑下線,也就是讓訂單建立的處理流程中去掉那些弱依賴的服務調用,達到將節省出的系統資源更好地服務於核心服務的運行;又或者在大促時,某核心服務依賴某一個非核心的服務,但發現由於這個非核心服務的處理性能和服務響應時間較長,致使了當前核心服務的處理出現了瓶頸,這時爲了保證核心服務的正常處理,就須要在覈心服務業務邏輯中對於那個非核心服務的調用暫時中止。這樣相似的場景就稱爲服務降級,即從服務調用者的角度,對所依賴的下游服務採起中止調用的措施,以保證當前服務的處理效率。

要實現服務降級,須要在應用或服務實現中,首先留下可供服務降級進行服務是否調用切換的邏輯。通常在代碼中採用static值的方式,做爲業務邏輯分支的判斷條件,經過對這些static值的修改,實現服務調用邏輯的變化。一樣能夠經過Sentinel控制檯提供的降級規則的配置功能,當對某個服務的方法響應時間一旦超過閥值後,就意味着調用的這個服務已經出現了處理性能的問題,則會自動切換到降級模式,降級持續的時間可自定義設置。

4、Sentinel 限流的實現原理

總結來講,Sentinel平臺所提供的限流和降級功能,是今天阿里巴巴集團如此龐大、複雜的服務化平臺穩定運行的關鍵,不論是在雙11這樣的大促活動中,仍是幾乎天天都有基於服務化體系構建起來的新興業務上線,整個服務化平臺可以穩定運行直觀重要。從技術角度來講,企業若是要構建自身的服務化平臺,如何保障平臺穩定性運行的重要能力是服務化平臺建設中必定要考慮的問題。

限流和降級是從服務自身作好保護的角度來避免平臺級的故障。在分佈式服務環境下, 咱們不可忽略的一個問題是最大程度的增長機器的利用率,一般會採用超配的方式,但這個過程當中每每會出現超配服務器上的應用對資源進行爭搶,使得個別或局部應用出現服務響應慢甚至掛起,從而給整個業務鏈路帶來更大的風險的狀況。此時,流量調度的角色是相當重要的。下一期咱們將從流量調度的角度看看如何提高平臺的穩定性。

本文做者:中間件小哥

閱讀原文

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索