本文是早些年,Paas化剛剛提出不久時,基於部門內第一次Paas化熱部署落地經驗所寫,主要內容是如何構建一些熱部署程式碼以及一些避雷經驗。
【實際工作中,我們已經把下面這個圖作為領域服務設計檔案進行了留存,用Paas化的方式實現需求,程式碼分佈在中臺、各個前臺,所以整體管理程式碼就需要以檔案形式進行統一記錄,不然隨著時間流逝,開發人員就無法全盤管理程式碼了】
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中增加對應的包路徑的排除設定,這樣就遮蔽了所有前臺包的重名類,就能正常執行了。
作者:京東零售 姜波
來源:京東雲開發者社群 轉載請註明來源