在微服務架構中,當服務提供者的應用實例出現異常,而服務消費者無法感知時會影響服務的正常調用,并影響消費者的服務性能甚至可用性。離群實例摘除功能會檢測應用實例的可用性并進行動態調整,以保證服務成功調用,從而提升業務的穩定性和服務質量。本文介紹如何創建離群實例摘除策略。
背景信息
在下圖的示例場景中,某個系統包含4個應用,A、B、C和D,其中應用A會分別調用應用B、C和D。當應用B、C或D的某些實例異常時(如圖中紅色圓圈所示,應用B有一個異常實例,C和D有2個異常實例),如果應用A無法感知,會導致部分調用失敗。如果B、C、D的異常實例較多,有可能影響應用A的性能甚至服務可用性。
為了保護應用A的服務性能和可用性,可以為應用A配置離群實例摘除。配置后,即可監控B、C、D應用的實例狀態并進行動態調整(摘除或添加),以保證服務成功調用。
離群實例摘除流程如下:
當應用B、C或D的某個實例異常時,系統能夠檢測到,并根據配置的摘除實例比例上限判斷是否將對應的實例從應用中摘除。
摘除實例后,A的調用請求不再被分發到B、C、D的異常實例上。
按配置的恢復檢測單位時間開始檢測異常實例是否恢復。
檢測間隔隨檢測次數按恢復檢測單位時間(默認為0.5分鐘)線性增加,當達到設置的未恢復累計次數上限后,會按最長時間間隔持續檢測異常實例是否恢復。
當檢測到實例恢復后,將實例重新添加到應用的實例列表中,處理調用請求。同時,將檢測間隔重置為恢復檢測單位時間,例如0.5分鐘。
當提供者應用的異常實例數量過多(超過摘除實例比例上限)時,僅按照設置的比例摘除。
當提供者應用中僅剩最后一個可用實例時,即使錯誤率超過配置的閾值,也不會摘除該實例。
視頻
創建離群實例摘除策略
登錄EDAS控制臺。
在左側導航欄,選擇 。
在左側導航欄,單擊離群實例摘除。在離群實例摘除頁面,單擊創建離群實例摘除策略。
在創建離群實例摘除策略面板,完成相關配置,然后單擊確定。
配置項
描述
微服務空間
在右側列表中選擇地域和微服務空間。
策略名稱
離群實例策略名稱。支持大小寫字母、數字、下劃線(_)和短劃線(-),不超過64個字符。
被調用服務所用框架
根據實際情況選擇Spring Cloud、Dubbo或服務網格。
選擇生效應用
選擇生效應用后,單擊>圖標,將應用添加至已選應用列表。
選擇生效應用后,該應用調用的所有應用的異常實例會被摘除。摘除期間,生效應用的調用請求將不再被分發到異常實例。
錯誤率下限
當被調用的應用中某個應用實例的錯誤率高于設置的下限后,將摘除該實例。默認值為50%。例如,該實例在統計時間窗口內被調用10次,有6次調用失敗,錯誤率為60%,超過了配置的錯誤率下限(50%),則從應用中移除該實例。
高級配置
單擊圖標,展開高級配置選項。
異常類型
包含網絡異常和網絡異常 + 業務異常(Dubbo Exception),根據實際業務需求選擇。
說明網絡異常一般指Dubbo的RpcException,例如網絡超時、服務端Full GC響應慢導致服務端線程池滿等場景。
業務異常一般指Dubbo的BizException,例如服務端拋出的RunTimeException等。
QPS下限
QPS按照統計時間窗口計算,Dubbo 2.7版本的應用的統計時間窗口為15秒,其它Dubbo版本和Spring Cloud應用的統計時間窗口為10秒。當在統計時間窗口(例如15秒)內,應用的QPS達到設置的下限后開始進行錯誤率統計分析。
摘除實例比例上限
摘除的異常實例比例上限,即達到閾值后,不再摘除異常實例。摘除異常實例數向下取整,例如應用實例總數為6,摘除實例比例設置為60%,摘除實例數為6 x 60% = 3.6,則按策略最多摘除的實例數為3。若計算結果小于1,則不會摘除實例。
恢復檢測單位時間
在異常實例被摘除后,按單位時間線性不斷累加的時間作為檢測間隔,檢測異常實例是否恢復正常,單位為ms。默認為30000ms,即0.5分鐘。
未恢復累計次數上限
持續檢測異常實例,檢測間隔隨檢測次數按恢復檢測單位時間線性增加。當達到設置的檢測次數上限后,會按最長時間間隔持續檢測異常實例是否恢復。例如恢復檢測單位時間設置30000ms,未恢復累計次數上限設置為20,在第20次檢測異常實例仍未恢復后,則按10分鐘(20 x 30000 ms)為間隔執行后續的檢測。如果檢測到實例已經恢復,會將檢測間隔重置為初始的時間間隔,即一次恢復檢測單位時間。
說明未恢復累計次數上限不建議配置太大。配置太大會導致最長檢測間隔時間較長,如果實例在檢測間隔早期恢復,仍需等到檢測間隔到時再進行檢測,導致期間實例資源被浪費,未能及時處理業務調用請求。
結果驗證
離群實例摘除策略配置并創建后,即開啟了離群實例摘除。您可以進入已配置離群實例摘除的高級監控頁面,查看該應用的監控信息,例如通過拓撲圖觀察調用請求是否還會轉發到異常實例,應用調用的錯誤率/每分鐘是否高于配置的錯誤率下限等,以便判斷離群實例摘除策略是否生效。具體操作,請參見應用總覽。