SpringCloud 優(yōu)雅下線+灰度發(fā)布
閱讀本文大概需要 3.5 分鐘。
management:endpoint:shutdown:enabled: trueendpoints:web:exposure:include: shutdown
management:endpoint:# 啟用pause端點(diǎn)pause:enabled: true# 啟用restart端點(diǎn),之所以要啟用restart端點(diǎn),是因?yàn)閜ause端點(diǎn)的啟用依賴restart端點(diǎn)的啟用restart:enabled: trueendpoints:web:exposure:include: pause,restart


management:endpoints:web:exposure:include: service-registry
curl -X "POST" "http://localhost:8000/actuator/service-registry?status=DOWN" \-H "Content-Type: application/vnd.spring-boot.actuator.v2+json;charset=UTF-8"

執(zhí)行eurekaAutoServiceRegistration.start()方法時(shí),當(dāng)前服務(wù)向 Eureka 注冊(cè)中心注冊(cè)服務(wù);
執(zhí)行eurekaAutoServiceRegistration.stop()方法時(shí),當(dāng)前服務(wù)會(huì)向 Eureka 注冊(cè)中心進(jìn)行反注冊(cè),注冊(cè)中心收到請(qǐng)求后,會(huì)將此服務(wù)從注冊(cè)列表中刪除。
public class GracefulOffline {private EurekaAutoServiceRegistration eurekaAutoServiceRegistration;public String online() {this.eurekaAutoServiceRegistration.start();return "execute online method, online success.";}public String offline() {this.eurekaAutoServiceRegistration.stop();return "execute offline method, offline success.";}}
部署集群 1 的應(yīng)用(初始狀態(tài)),將所有外部請(qǐng)求的流量都打到這個(gè)集群上
部署集群 2 的應(yīng)用,集群 2 的代碼與集群 1 不同,如新功能或者 Bug 修復(fù)等
將流量從集群 1 切換到集群 2
如集群 2 測(cè)試正常,就刪除集群 1 正在使用的資源(例如實(shí)例),使用集群 2 對(duì)外提供服務(wù)
沒(méi)有一個(gè)確定 OK 的環(huán)境。使用藍(lán)綠部署,我們能夠清晰地知道老版本是 OK 的,而使用滾動(dòng)發(fā)布,我們無(wú)法確定。
修改了現(xiàn)有的環(huán)境。
如果需要回滾,很困難。舉個(gè)例子,在某一次發(fā)布中,我們需要更新 100 個(gè)實(shí)例,每次更新 10 個(gè)實(shí)例,每次部署需要 5 分鐘。當(dāng)滾動(dòng)發(fā)布到第 80 個(gè)實(shí)例時(shí),發(fā)現(xiàn)了問(wèn)題,需要回滾。這時(shí),我們估計(jì)就要瘋了。
有的時(shí)候,我們還可能對(duì)系統(tǒng)進(jìn)行動(dòng)態(tài)伸縮,如果部署期間,系統(tǒng)自動(dòng)擴(kuò)容/縮容了,我們還需判斷到底哪個(gè)節(jié)點(diǎn)使用的是哪個(gè)代碼。盡管有一些自動(dòng)化的運(yùn)維工具,但是依然令人心驚膽戰(zhàn)。
準(zhǔn)備好部署各個(gè)階段的工件,包括:構(gòu)建工件,測(cè)試腳本,配置文件和部署清單文件
從負(fù)載均衡列表中移除掉“金絲雀”服務(wù)器
升級(jí)“金絲雀”應(yīng)用(切斷原有流量并進(jìn)行部署)
對(duì)應(yīng)用進(jìn)行自動(dòng)化測(cè)試
將“金絲雀”服務(wù)器重新添加到負(fù)載均衡列表中(連通性和健康檢查)
如果“金絲雀”在線使用測(cè)試成功,升級(jí)剩余的其他服務(wù)器(否則就回滾)
推薦閱讀:
Spring Boot 使用 Disruptor 做內(nèi)部高性能消息隊(duì)列
互聯(lián)網(wǎng)初中高級(jí)大廠面試題(9個(gè)G) 內(nèi)容包含Java基礎(chǔ)、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬(wàn)并發(fā)、消息隊(duì)列、高性能緩存、反射、Spring全家桶原理、微服務(wù)、Zookeeper......等技術(shù)棧!
?戳閱讀原文領(lǐng)取! 朕已閱


