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

2021-08-26 23:31:53 字數 2385 閱讀 7207

摘要: 上一期我們談到了阿里巴巴早期是通過通過在 nginx 上實現的擴充套件元件***(taobao missile defense**飛彈防禦系統)實現了接入層限流的主要工作,***系統可通過網域名稱類限流、cookie限流、黑名單以及一些安全策略等很好的實現了在接入層的限流措施。

上一期我們談到了阿里巴巴早期是通過通過在 nginx 上實現的擴充套件元件***(taobao missile defense**飛彈防禦系統)實現了接入層限流的主要工作,***系統可通過網域名稱類限流、cookie限流、黑名單以及一些安全策略等很好的實現了在接入層的限流措施。

但對於服務層,***就無能為力了。對於實現服務的限流控制,傳統的實現方式通常用spring的aop機制,對需要限流的介面定義乙個advice***,但這套方案在實際應用場景中還是會發現不少問題。詳細問題可通過以下的傳送門,進行了解。

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

第二期我們將分享到阿里巴巴是如何解決服務層限流時遇到的問題的。在今年7月底的aliware open sourec深圳站的活動上,阿里巴巴宣布開源面向分布式服務架構的輕量級限流降級框架 sentinel。sentinel正如它英文的意思「哨兵」一樣,為整個服務化體系的穩定執行行使著警戒任務,是對資源呼叫的控制平台,主要涵蓋了授權、限流、降級、呼叫統計監控四大功能。

sentinel 平台有兩個基礎概念,資源和策略,對特定的資源採取不同的控制策略,起到保障應用穩定性的作用。sentinel 提供了多個預設切入點,比如服務呼叫時,資料庫、快取等資源訪問時,覆蓋了大部分應用場景,保證對應用的低侵入性,同時也支援硬編碼或者自定義aop的方式來支援特定的使用需求。

sentinel 平台架構圖如下,需要通過sentinel 實現限流功能的應用中都嵌入sentinel 客戶端,通過sentinel 客戶端中提供對服務呼叫和各資源訪問預設實現的切入點,使得應用完全不需要對實現限流的服務或資源進行單獨的aop配置和實現,同時不僅可以限制自己的應用呼叫別的應用,也可以限制別的應用呼叫我的應用。通過這些資源埋點實時計算當前服務的qps,也可通過現有的監控系統獲取到應用所在伺服器的相關系統監控指標,用於限流規則配置中的閥值比對。

▵sentinel 平台架構示意圖

sentinel控制台會從客戶端拉取資源實時的執行監控資料如qps、響應時間等,並展示在控制台的監控面板上。控制台給運維人員提供了針對服務、快取、資料庫等資源訪問設定各種限流規則,並將設定好的規則傳送到規則配置中心後,再有伺服器將規則推送到相關的sentinel客戶端,讓設定的規則最終在應用執行狀態是時快速生效。

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

設想一下,如果在雙11活動啟動後,大量的使用者訂單請求湧入平台,此時發現平台的整體水位已經像平台最大處理能力的水位逼近時,除了限流可以起到第一層的保護作用外,我們還可以將那些之前標記為弱依賴的服務平滑下線,也就是讓訂單建立的處理流程中去掉那些弱依賴的服務呼叫,達到將節省出的系統資源更好地服務於核心服務的執行;又或者在大促時,某核心服務依賴某乙個非核心的服務,但發現因為這個非核心服務的處理效能和服務響應時間較長,導致了當前核心服務的處理出現了瓶頸,這時為了保證核心服務的正常處理,就需要在核心服務業務邏輯中對於那個非核心服務的呼叫暫時停止。這樣類似的場景就稱為服務降級,即從服務呼叫者的角度,對所依賴的下游服務採取停止呼叫的措施,以保證當前服務的處理效率。

要實現服務降級,需要在應用或服務實現中,首先留下可供服務降級進行服務是否呼叫切換的邏輯。一般在**中採用static值的方式,作為業務邏輯分支的判斷條件,通過對這些static值的修改,實現服務呼叫邏輯的變化。同樣可以通過sentinel控制台提供的降級規則的配置功能,當對某個服務的方法響應時間一旦超過閥值後,就意味著呼叫的這個服務已經出現了處理效能的問題,則會自動切換到降級模式,降級持續的時間可自定義設定。

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

限流和降級是從服務自身做好保護的角度來避免平台級的故障。在分布式服務環境下, 我們不可忽略的乙個問題是最大程度的增加機器的利用率,通常會採用超配的方式,但這個過程中往往會出現超配伺服器上的應用對資源進行爭搶,使得個別或區域性應用出現服務響應慢甚至掛起,從而給整個業務鏈路帶來更大的風險的情況。此時,流量排程的角色是至關重要的。下一期我們將從流量排程的角度看看如何提公升平台的穩定性。

降級和熔斷 如何增強服務穩定性?

為什麼在大促時要開啟降級,平時不去應用呢?在大促場景下,請求量劇增,可我們的系統資源是有限的,伺服器資源是企業的固定成本,這個成本不可能無限擴張,所以說,降級是解決系統資源不足和海量業務請求之間的矛盾。降級的具體實現手段是,在暴增的流量請求下,對一些非核心流程業務 非關鍵業務,進行有策略的放棄,以此...

中介軟體和穩定性平台

軟負載配置中心 diamond diamond用於儲存靜態配置,並能夠提供配置變更動態推送功能,結構簡單,超高可用性。在全網被使用於儲存不經常發生變化的配置資訊。開源介紹 訊息中介軟體 notify notify是一款高效能,高可靠,可無限水平擴充套件,支援分布式事務,支援復雜訊息過濾的與網際網路時...

web前端如何讓網頁布局穩定性和標準性

web前端如何讓網頁布局穩定性和標準性?因此再這裡,傳智播客老師給大家列出網頁布局標準性 合理性和相容性的一些方法,希望對剛開始學習css的同學有所幫助。位於文件的最前面,用於向瀏覽器說明當前文件使用哪種 html 或 xhtml 標準規範,我們必需在開頭處使用標記為 所有的xhtml文件指定xht...