1. 概述
不停機(jī)發(fā)布, 核心邏輯就是: 新版本上線之后, 再把老版本下線.
要實(shí)現(xiàn)這個(gè)邏輯, 基于兩個(gè)前提: 支持多實(shí)例部署, 老版本能自動(dòng)下線. 支持多實(shí)例部署, 就需要端口號(hào)自動(dòng)分配; 老版本自動(dòng)下線, 一個(gè)方法是在新版本啟動(dòng)后sleep一段時(shí)間再kill老版本. 這個(gè)方法優(yōu)點(diǎn)是非常簡(jiǎn)單, 缺點(diǎn)是不實(shí)時(shí), sleep的時(shí)間不好確定, 無(wú)法確定服務(wù)是否啟動(dòng)成功. 另一個(gè)方法是利用nacos的服務(wù)注冊(cè)表, 讓老版本服務(wù)自動(dòng)感知自動(dòng)下線. 這里選擇通過(guò)nacos處理.
流程圖如下:

2. 具體項(xiàng)目操作
2.1 配置端口號(hào)自動(dòng)分配

2.2 代碼增加Nacos訂閱邏輯

2.3 修改啟動(dòng)參數(shù)
最重要的是增加參數(shù):
--spring.cloud.nacos.discovery.metadata.myversion=xxx
這個(gè)參數(shù)會(huì)隨服務(wù)啟動(dòng)一起注冊(cè)到nacos的服務(wù)列表里. 由于我這里是用jenkins部署, 所以xxx做成參數(shù)化$metadataVersion:


服務(wù)啟動(dòng)成功后, Nacos服務(wù)列表如下:

3. 擴(kuò)展
3.1 版本強(qiáng)制降級(jí)
當(dāng)需要降版本時(shí), 可以在啟動(dòng)參數(shù)里增加強(qiáng)制降級(jí)標(biāo)記:
--spring.cloud.nacos.discovery.metadata.hardown=1
同時(shí), 在訂閱邏輯里增加判斷: 如果發(fā)現(xiàn)版本低于自己, 且?guī)в衕ardown標(biāo)記的服務(wù)上線, 也會(huì)注銷自己并銷毀jvm.
3.2 多機(jī)多實(shí)例部署 基于jenkins
目前只實(shí)現(xiàn)單機(jī)多實(shí)例部署, 就是可以指定部署到250服務(wù)器, 指定啟動(dòng)x個(gè)服務(wù).
通過(guò)參數(shù)化多選服務(wù)器, 實(shí)例啟動(dòng)數(shù)量, 可以做到同時(shí)指定部署到250,251等多臺(tái)機(jī)器, 進(jìn)一步提高服務(wù)承載能力.
