【實踐篇】一次Paas化熱部署實踐分享

2023-11-03 12:01:27

前言

本文是早些年,Paas化剛剛提出不久時,基於部門內第一次Paas化熱部署落地經驗所寫,主要內容是如何構建一些熱部署程式碼以及一些避雷經驗。

一、設計-領域模型設計

1.首先,確定領域服務所屬的領域

2.其次,確定垂直業務身份

3.再次,提煉領域能力及擴充套件點

【實際工作中,我們已經把下面這個圖作為領域服務設計檔案進行了留存,用Paas化的方式實現需求,程式碼分佈在中臺、各個前臺,所以整體管理程式碼就需要以檔案形式進行統一記錄,不然隨著時間流逝,開發人員就無法全盤管理程式碼了】

二、程式碼結構設計

1.中臺-擴充套件點jar

2.中臺 - 領域服務、領域能力、水平實現

3.前臺-由中臺人員管理的前臺包工程範例

4.前臺-包內結構範例

5.前臺-打包和部署的一些注意點

1.熱部署jar包要打fat jar;

2.前臺包jar上線版本只能打release版本,而且要注意版本管理

3.matrix-ext.json檔案最好在前臺中進行保留,實際熱部署只需要在cjg部署時寫明即可

4.biz-module.json檔案是前臺包呼叫外部jsf介面的組態檔,最好在前臺包中也保留一份,便於程式碼管理

5.前臺包呼叫外部jsf介面時,中臺需要在cjg我的應用增加對應介面的允許許可權,不然呼叫會報錯

6.前臺包中完全使用水平實現,無前臺個性化實現是,也需要寫一個佔位的假實現類,不然熱部署會報找不到實現類而失敗

7.matrix2-core不要放到擴充套件點jar中,建議只放在中臺應用中,不然會出現中臺實際依賴到低版本matrix.jar的問題

三、部署流程

一、建應用:能力釋出->我的應用->新增

二、中臺應用釋出:正常釋出中臺工程

三、建立水平業務身份:能力釋出->我的水平業務身份->建立水平業務身份->審批

四、申請/建立垂直業務身份

五、垂直身份申請使用水平身份:能力整合->垂直業務身份->水平業務身份->申請使用-審批

六、需求能力拆解:能力整合->需求能力拆解->需求拆解

七、釋出垂直業務包:能力整合->垂直業務身份->業務包->新增業務包/業務包詳情->按流程走即可

四、踩坑和一些經驗總結

1、水平業務身份抽取,先明確的抽取垂直,再從垂直的實現裡抽取水平

2、前中臺部署執行邏輯,未命中垂直身份,直接執行預設邏輯,命中垂直身份,根據matrix-ext.json執行

3、垂直業務包中未實現任何擴充套件點時,熱部署無法釋出,需要寫一個預設佔位實現

4、垂直業務包只能釋出,沒有下線功能

5、中臺 – deployGroupName可以搭配預發分組、線上分組進行使用,可以用來區分環境,也可以用來區分機房

6、前臺 – 前臺呼叫JSF介面時,僅支援「serialization」:「hessian」模式,使用時最好都顯式加上

7、熱部署中臺分組中的一臺機器,此時其他中臺機器冷啟動,則冷啟動機器執行最新版本的垂直業務包

8、由於matrix框架的實現方式是將前臺包載入到中臺應用的BizClassLoader中,不同的垂直業務身份之間對於類的相同的全限定名是隔離的,但是與中臺本身的AppClassLoader是共同工作的,所以如果垂直業務包中存在與中臺包中類全限定名一致的程式碼,就會出現各種異常,例如:

【ClassCastException: com.jd.ofw.opi.ws.jsf.Result cannot be cast to com.jd.ofw.opi.ws.jsf.Result】

【IllegalArgumentException: object is not an instance of declaring class】

等等,解決方法也比較簡單,只需要在中臺的藏經閣組態檔的exportClassConfig中增加對應的包路徑的排除設定,這樣就遮蔽了所有前臺包的重名類,就能正常執行了。

作者:京東零售 姜波

來源:京東雲開發者社群 轉載請註明來源