不停機(jī)發(fā)布-基于版本的服務(wù)自動(dòng)上下線

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處理.

流程圖如下:

image.jpeg

2. 具體項(xiàng)目操作

2.1 配置端口號(hào)自動(dòng)分配
image.png
2.2 代碼增加Nacos訂閱邏輯
image.png
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:

image.png
image.png

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

image.png

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ù)承載能力.

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容