應對業務服務的發佈和服務升級時,線上出現問題的可能性很高,就 Serverless 架構下討論如何保障上線過程當中服務的優雅下線java
Solomon_肖哥彈架構 跟你們「彈彈」 如何更加優雅的進行服務下線,貫穿南北與東西流量的調度方案。後端
平時發佈過程否遇到如下問題:服務器
一般發版安排在凌晨兩三點,在業務流量比較小的時候。那如何解決上面的問題,如何保證應用發佈過程穩定、高效,保證業務無損。markdown
上圖描述了咱們使用微服務架構開發應用的一個常見場景,咱們先看下這個場景的服務調用關係:架構
上圖有兩類流量app
當服務 A 發佈的時候,服務 A1 實例停機後,SLB 根據健康檢查探測到服務 A1 下線,而後把實例從 SLB 摘掉。實例 A1 依賴 SLB 的健康檢查從 SLB 上摘掉,通常須要幾秒到十幾秒的時間,在這個過程當中,若是 SLB 有持續的流量打入,就會形成一些請求繼續路由到實例 A1,致使請求失敗;負載均衡
服務 A 在發佈的過程當中,如何保證通過 SLB 的流量不報錯?咱們接着看下 SAE 是如何作的。框架
請求失敗的緣由在於後端服務實例先中止掉,而後才從 SLB 摘掉,那咱們是否是能夠先從 SLB 摘掉服務實例,而後再對實例進行升級呢?less
按照這個思路,SAE 基於 K8S service 的能力給出了一種方案微服務
這就是 SAE 對於應用升級過程當中關於南北向流量的保障方案。
在傳統的發佈流程中,服務提供者中止再啓動,服務消費者感知到服務提供者節點中止的流程以下:
從第 2 步到第 6 步的過程當中,Eureka 在最差的狀況下須要耗時 2 分鐘,Nacos 在最差的狀況下須要耗時 50 秒。在這段時間內,請求都有可能出現問題,因此發佈時會出現各類報錯,同時還影響用戶的體驗,發佈後又須要修復執行到一半的髒數據。最後不得不每次發版都安排在凌晨兩三點發布,心驚膽顫,睡眠不足,苦不堪言。
在傳統發佈流程中,客戶端有一個服務調用報錯期,緣由就是客戶端沒有及時感知到服務端下線的實例。在傳統發佈流程中,主要是藉助註冊中心通知消費者來更新服務提供者列表,那能不能繞過註冊中心,服務提供者直接通知服務消費者呢?答案是確定的,咱們主要作了兩件事情:
經過上面這個方案,就使得下線感知的時間大大減短,從原來的分鐘級別作到準實時,確保應用在下線時能作到業務無損。
上文介紹的是 SAE 在處理優雅下線方面的一些能力,在應用升級的過程當中,只有實例的優雅下線是不夠的,還須要有一套配套的發佈策略,保證咱們新業務是可用的,SAE 提供分批發布和灰度發佈的能力,可使得應用的發佈過程更加省心省力;
咱們先介紹下灰度發佈,某應用包含 10 個應用實例,每一個應用實例的部署版本爲 Ver.1 版本,現需將每一個應用實例升級爲 Ver.2 版本。
從圖中能夠看出,在發佈的過程當中先灰度 2 臺實例,在確認業務正常後,再分批發布剩餘的實例,發佈的過程當中始終有實例處於運行狀態,實例升級過程當中依照上面的方案,每一個實例都有優雅下線的過程,這就保證了業務無損。
再來看下分批發布,分批發布支持手動、自動分批;仍是上面的 10 個應用實例,假設將全部應用實例分 3 批進行部署,根據分批發布策略,該發佈流程如圖所示,就再也不具體介紹了。
你的點贊與關注 是 Solomon_肖哥彈架構持續的動力。