數智化效能平臺豬齒魚Choerodon 作為一個微服務框架,需要解決微服務資料初始化本身具有的問題和復雜性,同時也需要滿足框架本身特有的資料初始化需求,下面為大家介紹一下這方面的設計思想和實作,
微服務的資料初始化難題
先來看一下在微服務的資料初始化中常見的幾個問題,
▍1.1 表結構的初始化和可平滑升級
表結構的定義在資料庫初始化中是重中之重,它涉及到整個服務運行和利用資料庫實作功能的方式,一般來說表結構定義和升級涉及到以下操作:創建表,創建欄位,創建索引,修改索引,修改欄位,重命名表,洗掉索引,洗掉欄位,洗掉表,這些操作如果都需要對多種資料庫進行兼容和可平滑升級,那么復雜度就會突然增加,基本不可能像傳統應那樣通 SQL 腳本進行管理,而豬齒魚面臨的就是這種情況,
▍1.2 跨服務資料的自動初始化
在微服務架構中,不可避免的會出現需要將資料初始化到其他服務的場景,比如豬齒魚的大部分服務都需要初始化選單資料到 IAM 服務,處理選單串列的請求是由 IAM 服務處理的,然而對于微服務的部署而言,很多時候又不能運行初始化資料的時候連接多個資料源從而產生問題,而且微服務的部署可能不是全量的,存在這個部署不需要這個服務的情況,這種情況的初始化又需要修改初始化的腳本或者程式帶來復雜性,
▍1.3 繁瑣的編碼化資料的自動發現
資料的初始化中有一類資料是可以從代碼或者檔案,或者其它地方收集提取出來的,并且這部分資料往往比較繁瑣和龐大,比如在豬齒魚中的權限鑒定需要 URL 與 Controller,Method 的映射關系,這部分資料如果手工進行初始化會產生很大的作業量,并且在實際代碼修改后可能初始化資料沒有更新產生問題,
豬齒魚的本服務資料的初始化
認識到這些問題后接下來再來介紹一下豬齒魚在多次迭代后對這些問題提出的解決方案,先來看對于本服務資料初始化的解決方案,這部分的具體實作可以參考開源代碼:https://github.com/choerodon/choerodon-starters/tree/master/choerodon-liquibase
▍2.1 資料表結構的初始化
對于資料庫表結構的初始化豬齒魚采用 Liquibase 開源專案,具體為使用 Liquibase 的 Groovy DSL,增強了 Liquibase 的靈活性,并且 Liquibase 本身支持平滑升級和多資料庫支持解決了表結構初始化的問題,
▍2.2 本服務預置資料的初始化
對于一些預置資料,包括預置的用戶角色,以及自動化測驗執行時候需要的預置資料,豬齒魚使用 Excel 來輔助初始化的資料,方便操作,填充,關聯,
豬齒魚的跨服務資料的初始化
下面再看一下豬齒魚關于跨服務資料初始化和自動發現資料的處理方式,
▍3.1 自動發現資料的初始化
服務啟動后通過管理服務訪問各個服務的通用介面從 ClassPath 中獲取資料通過分布式事務進行初始化,

具體代碼參考:https://github.com/choerodon/manager-service/blob/master/src/main/java/io/choerodon/manager/api/eventhandler/EurekaEventObserver.java
▍3.2 跨服務預置資料的初始化
使用與本服務預置資料一樣格式的 Excel 進行填寫資料,編譯時將 Excel 轉化為 Json 資料,最終和自動發現資料一同通過分布式事務初始化, 其中編譯時將 Excel 生成 Json,并且通過 Maven 的依賴關系進行合并使用了豬齒魚 Maven 插件,具體代碼參考:https://github.com/choerodon/choerodon-starters/tree/master/choerodon-maven-plugin
結語
豬齒魚資料初始化的方式從早期的 SQL 腳本,到 Liquibase,再加上為了滿足選單初始化需要而設計的獨立 Python 初始化工具,在 0.17.0 版本中統一升級為 Liquibase Groovy + Excel 的形式,解決了目前遇到的所有問題,以上就是豬齒魚資料初始化的整個迭代程序和實作思路,謝謝大家,
本文由豬齒魚技術團隊原創,轉載請注明出處
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/417121.html
標籤:其他
上一篇:[離線計算-Spark|Hive] HDFS小檔案處理
下一篇:ESLint錯誤:更喜歡使用箭頭函式而不是普通函式prefer-arrow/prefer-arrow-functions
