版本管理

Project

所有項目在開始時必須添加版本號,版本號格式參考major.minor[.maintenance[.build]],同時將主版本號加入server.path 作為api版本號。在同一主版本號上不會對原有API進行破壞性重構(gòu),所有的破壞性重構(gòu)都要考慮升級一個大的版本號。小版本號可以新增API,API擴展。
版本號需要體現(xiàn)在log,jar,docker image 和docker container上.
如使用gradle可以用下面命令將gradle的變量導入到application.properties

processResources {
    filesMatching('application.properties') {
        expand(project.properties)
    }
}

spring的配置文件里可以

info.build.version=${version}

在同一版本上開發(fā)時,需要加上snapshot。
API版本分為兩種情況:

  • 開放給外部調(diào)用的API
  • 內(nèi)部系統(tǒng)調(diào)用的API
開放給外部調(diào)用的API

指會通過gateway直接暴露微服務(wù)外部的API。這種API需要自己去檢查每次請求的權(quán)限信息。通常對暴露給外部調(diào)用的API很難進行大版本的升級,所以在這種API設(shè)計的時候需要經(jīng)過再三的review。

內(nèi)部系統(tǒng)調(diào)用的API

內(nèi)部系統(tǒng)調(diào)用的API指在微服務(wù)中為其他的微服務(wù)調(diào)用而設(shè)計的API。要求每個API的提供方需要維護調(diào)用API的client,client來控制權(quán)限校驗和數(shù)據(jù)傳輸過程中的加密、壓縮等處理。而其他消費方只與client進行集成,而消費方并不需要知道client的實現(xiàn)細節(jié)。

嚴禁出現(xiàn)同一API同時提供給內(nèi)部和外部使用

GIT

每當版本發(fā)布時,git上需要打上版本號的tag。在后續(xù)針對該版本維護時,checkout出一條對應(yīng)的branch對其進行維護,從而避免影響到develop分枝的開發(fā)。

CI

每一個project的CI都需要集成contract test保證API的穩(wěn)定性。API的提供方只需編寫provider side的contract test,consumer side的contract test由各個調(diào)用方編寫并集成在提供方的contract test里。
在deploy的時候,需要固化當前版本號下所依賴的第三方API的版本號以及對應(yīng)的測試代碼的版本號。

版本切換

非主版本號的升級,在通過了contract test時,可以直接停止所有老版本服務(wù)而發(fā)布新的版本。
主版本號升級時,需要在同時部署新版本服務(wù)的同時保留老版本服務(wù),后續(xù)通過日志監(jiān)控API的流量情況逐步減少老版本服務(wù)的instance數(shù)量直到最后完全停掉老版本。

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

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,699評論 19 139
  • From past to now 這周在公司的通知郵件里看到了關(guān)于SVN下線一年,即將徹底清空公司所有SVN庫的提...
    LightingContour閱讀 2,090評論 0 1
  • 本來是去看《神奇的動物在哪里》的,因為時間的問題,看了《佩小姐的奇幻城堡》。幸好。 對于一個非專業(yè)人士來說,我沒有...
    青三涼閱讀 265評論 0 0

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