概述
無損上線主要通過服務預熱和延遲注冊實現,無損下線主要通過應用優雅停機實現。假設有應用app-a和app-b兩個應用,app-a一直都有請求調用app-b,本文演示在app-b上線與下線時,如何實現無損上線與下線。
前提條件
用戶已開通微服務治理中心企業版。
背景信息
在微服務架構中,在應用變更時,會涉及到應用的上線與下線,若處理不當,此時會造成一些請求異常。因此,在請求量大的應用系統中,為了避免應用變更帶來的錯誤請求,一般會選擇在半夜這種流量較小的時候發布。在半夜發布雖然避免了對業務造成較大的影響,但卻不能從根本上解決問題,同時也會造成較大的運維成本。基于以上背景,微服務治理中心在應用發布的過程中,提供了服務延遲注冊、服務預熱、主動通知下線、主動等待等手段,實現了應用變更的無損上線與下線,有效避免了流量損失,降低研發運維成本。
準備工作
部署Demo應用
本文準備兩個應用,分別是app-a和app-b,其中調用關系為app-a->app-b。
部署一個app-a:


部署一個app-b:


啟動腳本訪問app-a->app-b:


此時查看微服務治理中心控制臺,app-a和app-b都有流量。
驗證無損上線
打開app-a和app-b的無損上下線開關。

在當前啟動的應用基礎上,再啟動一個app-b,此時app-b總共有兩個節點,新啟動的app-b會發生延遲注冊和服務預熱兩個事件。
延遲注冊:


由上圖所示,服務在啟動后120秒后,才完成服務注冊,達到延遲注冊的效果。
服務預熱:


由上圖所示,服務在啟動后,先是小流量預熱,隨后逐漸達到最大流量。
驗證無損下線
微服務治理中心的無損下線主要是通過主動通知注冊中心下線和主動通知消費者來實現。在應用下線時,需要使用kill -15 pid命令,通過下線鉤子函數通知應用即將下線,達到無損下線的效果。如果采用kill -9 pid,將會是有損下線。
當前部署一個app-a,兩個app-b。在有流量訪問的情況下,下線app-b其中一個節點。
使用kill -9 pid下線。


執行kill命令后,查看微服務治理中心控制臺,此時出現了異常調用。
使用kill -15 pid下線。


執行kill命令后,查看微服務治理中心控制臺,此時沒有出現異常調用。


通過以上實踐,證明了微服務治理中心可以實現無損下線。
