Choerodon豬齒魚做爲一個微服務框架須要解決微服務數據初始化自己具備的問題和複雜性,同時也須要知足框架自己特有的數據初始化需求,下面爲你們介紹一下這方面的設計思想和實現。java
先來看一下在微服務的數據初始化中常見的幾個問題。git
▍1.1 表結構的初始化和可平滑升級github
表結構的定義在數據庫初始化中是重中之重,它涉及到整個服務運行和利用數據庫實現功能的方式,通常來講表結構定義和升級涉及到如下操做:建立表,建立字段,建立索引,修改索引,修改字段,重命名錶,刪除索引,刪除字段,刪除表。這些操做若是都須要對多種數據庫進行兼容和可平滑升級,那麼複雜度就會忽然增長,基本不可能像傳統應那樣通SQL腳本進行管理,而豬齒魚面臨的就是這種狀況。數據庫
▍1.2 跨服務數據的自動初始化api
在微服務架構中,不可避免的會出現須要將數據初始化到其餘服務的場景,好比豬齒魚的大部分服務都須要初始化菜單數據到IAM服務,處理菜單列表的請求是由IAM服務處理的,然而對於微服務的部署而言,不少時候又不能運行初始化數據的時候鏈接多個數據源從而產生問題。並且微服務的部署可能不是全量的,存在這個部署不須要這個服務的狀況,這種狀況的初始化又須要修改初始化的腳本或者程序帶來複雜性。微信
▍1.3 繁瑣的編碼化數據的自動發現架構
數據的初始化中有一類數據是能夠從代碼或者文檔,或者其它地方收集提取出來的,而且這部分數據每每比較繁瑣和龐大,好比在豬齒魚中的權限鑑定須要URL與Controller,Method的映射關係,這部分數據若是手工進行初始化會產生很大的工做量,而且在實際代碼修改後可能初始化數據沒有更新產生問題。框架
認識到這些問題後接下來再來介紹一下豬齒魚在屢次迭代後對這些問題提出的解決方案。先來看對於本服務數據初始化的解決方案,這部分的具體實現能夠參考開源代碼:github.com/choerodon/c…maven
▍2.1 數據表結構的初始化分佈式
對於數據庫表結構的初始化豬齒魚採用Liquibase開源項目,具體爲使用Liquibase的Groovy DSL,加強了Liquibase的靈活性,而且Liquibase自己支持平滑升級和多數據庫支持解決了表結構初始化的問題。
▍2.2 本服務預置數據的初始化
對於一些預置數據,包括預置的用戶角色,以及自動化測試執行時候須要的預置數據,豬齒魚使用Excel來輔助初始化的數據,方便操做,填充,關聯。
下面再看一下豬齒魚關於跨服務數據初始化和自動發現數據的處理方式。
▍3.1 自動發現數據的初始化
服務啓動後經過管理服務訪問各個服務的通用接口從ClassPath中獲取數據經過分佈式事務進行初始化。
具體代碼參考:github.com/choerodon/m…
▍3.2 跨服務預置數據的初始化
使用與本服務預置數據同樣格式的Excel進行填寫數據,編譯時將Excel轉化爲Json數據,最終和自動發現數據一同經過分佈式事務初始化。 其中編譯時將Excel生成Json,而且經過Maven的依賴關係進行合併使用了豬齒魚Maven插件,具體代碼參考:github.com/choerodon/c…
豬齒魚數據初始化的方式從早期的SQL腳本,到Liquibase,再加上爲了知足菜單初始化須要而設計的獨立Python初始化工具,在0.17.0版本中統一升級爲Liquibase Groovy + Excel 的形式,解決了目前遇到的全部問題。以上就是豬齒魚數據初始化的整個迭代過程和實現思路,謝謝你們。
更多Choerodon豬齒魚微服務相關文章▼
Choerodon豬齒魚開源多雲技術平臺,是基於開源技術Kubernetes,Istio,knative,Gitlab,Spring Cloud來實現本地和雲端環境的集成,實現企業多雲/混合雲應用環境的一致性。平臺經過提供精益敏捷、持續交付、容器環境、微服務、DevOps等能力來幫助組織團隊來完成軟件的生命週期管理,從而更快、更頻繁地交付更穩定的軟件。
你們也能夠經過如下社區途徑瞭解豬齒魚的最新動態、產品特性,以及參與社區貢獻: