摘要:服務過載在云時代是必然存在的,如何解決與應對成為了云服務開發、運營與運維的關鍵要素,通過過載場景現象、基礎過載控制等能力,來應對出現的服務/應用過載,
本文分享自華為云社區《云服務過載控制的前世今生》,作者:SRE確定性運維 ,
1.為什么會有過載?
過載,是服務或應用處理的請求超過了自身所能承載的能力,造成服務或應用自身處理請求時延變慢、錯誤率增加,或者請求失敗,乃至服務中斷,
如上圖,客戶端與服務器通信的分布式系統中,客戶端在等待一段時間后常常會變得不耐煩,并會停止等待服務器回應,這段時間稱為超時時間,如果服務器因過載而導致其延遲超過客戶端的超時值,請求會開始失敗,圖1顯示服務器回應時間如何隨著提交的吞吐量(以每秒事務數為單位)增加而延長,最終到達情況迅速惡化的轉折點,
如上圖,當回應時間超過客戶端超時值,可清楚看到情況很糟糕,但并未顯示到底有多糟糕,可在延遲旁邊畫出客戶端感知到的可用性,不使用常規的回應時間測量值,而是改用中值回應時間,中值回應時間表示50%的請求比中值快,如果服務的中值延遲時間等于客戶端超時值,則表示一半的請求超時,因此可用性為50%,進而將延遲增加問題轉化為可用性問題,
2. 過載的典型表現?
2.1 典型過載環介紹
● 客戶端發起一個會造成系統癱瘓的惡意/規模性請求,
● LB節點將這個請求轉發給一個后端服務管理節點處理,
● 后端服務管理節點嘗試處理這個惡意/規模性請求,
● LB節點自動識別到這個請求后端管理節點無法正常處理,并將處理這個請求的管理節點剔除,
● 客戶端再次嘗試,且LB將這個惡意請求再次下發給另外一個后端管理節點,
● LB再次將處理這個惡意請求的后端管理節點剔除,
● 惡意/規模請求一直持續下去,直到所有的后端管理節點故障,乃至重大隱患/事件發生,
2.2 過載表現說明
● 缺少基于優先級的過載控制(按照租戶/請求型別QoS),導致請求處理通道堵塞或例外,任何請求均失敗,
● 缺少過載感知與溯源能力,海量螞蟻流類請求無序搶占,導致正常請求出現了性能損失,但無法在短時間內感知過載現象,無法獲取過載源,
● 缺少依賴組件過載感知與控制,服務自身請求沒有過載,但依賴組件出現過載,導致服務整個鏈路的請求發生過載,
3. 如何應對服務/應用過載?
應對業務隨機突增,擴展服務或應用處理能力,但無法控制客戶的請求按照優先級處理,當客戶端請求速率超過規格時,相應請求可被拒絕、或可被限制(包括速限制單個客戶端對該服務繼續施加負載),實作服務或應用已承接業務的持續高可用(已經接入用戶,在過載期間SLA滿足業務目標),
過載處理模型:通用可伸縮定律(Universal Scalability Law),阿姆達爾定律Amdahl’s Law的一個衍生理論,定義了系統中的串行化,例如資料庫的性能瓶頸,包括關系資料庫和非關系資料庫,很難做到在線實時擴縮容,重負載時,請求排隊等待處理,這時執行緒爭用,背景關系切換和垃圾回收等會加重系統負載,請求排隊的時間越來越長直到超時,如此形成一個惡性回圈,
服務過載控制是一個循序漸進的程序,在大象流/螞蟻流的沖擊下,服務一般具備三步走的過載控制:
Step1:服務過載自治,包括Scale-out,Scale-up,基于系統自身的基礎能力進行擴容,
Step2:感知過載現象,哪個服務/集群出現了過載例外,影響了哪些業務,
Step3: 啟動過載控制
3.1基礎過載控制:重試保護,小服務主動消費,超時保護,冪等保等基礎能力,
3.2中階過載控制:過載溯源,基于QoS、黑白名單的過載控制,
3.3高階過載控制:基于AIOPS自動學習,主動進行過載反壓,過載拉黑,及精細化QoS、黑白名單控制等,
本文重點介紹服務或應用應對過載的基礎能力:
● 重試保護:重試服務呼叫鏈中,存在逐級放大的風險,可以每個主呼叫最多重試1次;為每個依賴項保留少數重試次數(最多10次),如每1000次請求重試次數最多10次,
● 消費者向生產者發起請求:擁有小規格的服務向大規格服務請求,而不是大規格服務請求小規格服務,減少內部沖擊!
● 超時保護:服務依賴項回應慢要有超時保護(如TP99.9出現例外,主動超時),減少服務請求因嘗試/多次超時對系統造成持續消耗,最終導致服務過載,
● 冪等設計&過時請求釋放:每個請求包含唯一ID,如果與請求ID關聯的請求已經成功,在再次獲得相同請求時,直接忽略,并確認成功即可(公網不穩定/不可靠是一個長期存在的現實),且排隊過期請求(long live),如50%客戶在10秒后放棄請求,系統在5min后處理該請求的意義就不存在了,
● 服務降級:服務在降級/亞健康前,主動拒絕不能處理的請求,減少過度請求對系統造成過載沖擊,
● 統一錯誤碼:過載類的API請求或過載類的頁面請求定義唯一的識別符號,支撐客戶端快速感知過載現象,進而在客戶端主動規避過載例外,
結束語:
服務過載在云時代是必然存在的,上層應用(比如某購物App,或者某翻譯App)客戶端少量重負載的大象流或海量的螞蟻流請求下會造成服務過載,服務端偶發的高負載會造成服務過載,網路的抖動或時延會造成服務過載,互聯網各種攻擊/惡意行為也會造成服務過載,如何解決與應對成為了云服務開發、運營與運維的關鍵能力,
如何高效&及時感知過載、有效的處置過載就成為了關鍵能力,本期我們談到基礎過載控制能力,下期會圍繞過載控制與感知的中高階能力進行介紹,包括過載溯源,精細化與分布式的過載控制等,
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/548610.html
標籤:其他
