摘要: 本文講述基於Sermant Agent接入的SpringCloud應用實現優雅上下線功能。
試想一個A場景,系統中執行著一個消費者(使用者端)和兩個服務提供者(伺服器端),消費者可負載均衡呼叫服務提供者。假設某個服務提供者因業務更新或其他場景需要捲動升級,若此時存在大量並行流量,便會出現以下問題:
以上便是一個典型的「不優雅」場景。
於是,為了規避諸如此類的問題,服務優雅上下線應運而生,主要針對服務的重啟、上線、下線等操作提供保護。
伺服器端預熱是基於使用者端實現的,當流量進入時,Sermant Agent會動態調整流量,根據服務的預熱設定,對流量進行動態分配。對於開啟服務預熱的範例,在剛啟動時,相對於其他已啟動的範例,分配的流量會更少,流量將以曲線方式隨時間推移增加直至與其他範例*乎持*。目的是採用少流量對服務範例進行初始化,防止服務崩潰。
優雅下線結合伺服器端與使用者端實現,主要實現點如下:
當伺服器端被要求下線時,Sermant Agent會動態根據當前註冊中心進行反註冊操作,及時重新整理登入檔,然而即使登入檔已重新整理,但是上游消費端因快取問題卻無法及時感知,從而引入下線通知。
進行反註冊後,Sermant Agent會採用介面通知與響應通知的方式告知所有上游,並主動同步重新整理provider範例快取。
為保證流量不再呼叫已下線範例,引入黑名單機制。在使用者端接收到下線通知後,自動將下線範例拉入黑名單,在執行流量分配時,自動過濾黑名單(已下線)範例,不再呼叫已下線範例。說明:黑名單採用定時重新整理機制,預設為2分鐘,即針對同一個IP範例,標記下線後,等待2分鐘即可重新發現。
為確保當前請求已全部處理完成,在服務下線時,Sermant Agent會嘗試等待30s(可設定),定時統計和判斷當前範例請求是否均處理完成,處理完成後最終下線。
以Nacos demo應用為例,通過Sermant Agent接入CSE,並在CCE叢集上驗證優雅上下線功能,參考自定義優雅上下線。