拆分原則
1.明確服務邊界。狗就好好的啃骨頭,貓就老實拿耗子。
2.服務之間單向無環依賴。分析服務之間的依賴關系,可以是代碼包級別的,也可以是業務邏輯級別的,保證無環才可拆解。
3.交互方式遵循上下游關系,下游葉子節點服務可以調用上游接口(HTTP協議),上游節點服務通過事件(事件總線,消息總線)影響下游系統。
4.最小數據共享,遵循DDD的限界上下文的分析原則。
5.接口不同時操作上下文數據,寫操作只能在當前上下文中,讀同理。不同上下文的讀取操作需要放在BFF中
注釋:BFF,
所謂BFF其實是Backend for Frontend的簡稱,中文翻譯是為前端而開發的后端,它主要由前端團隊開發(后端微服務一般由后端團隊開發)。BFF可以認為是一種適配服務,將后端的微服務進行適配(主要包括聚合裁剪和格式適配等邏輯),向無線端設備暴露友好和統一的API,方便無線設備接入訪問后端服務。
實施步驟(ITTO)
1.調整代碼結構,分析模塊間依賴
INPUT:
需要拆分的項目代碼
TOOL&TECH:
MCV,MVVM等通用設計架構范式
SQL語句層面使用DDD分析,每個服務只提供對應領域的表的操作入口
OUTPUT:
項目內部應用包之間的關系結構圖
2.架構重構,測試保護
INPUT:
單元測試,組件測試,端到端測試
TOOL&TECH:
自動化契約測試Selenium(
https://www.selenium.dev/)
接口級別組件測試,保證組件重構過程中沒有改動接口輸入輸出結構
OUTPUT:
紅綠燈測試結果
3.消除業務代碼依賴
INPUT:
需要拆分的項目代碼
TOOL&TECH:
枚舉,工具類,通用類-抽象通用jar
調用跨越當前上下文的接口,數據,命令-通過接口調用,遷移到對應上下文服務中
調用多個上下文的數據-確定原子能力后遷移到BFF層
OUTPUT:
業務代碼依賴拆分
4.數據庫拆分
INPUT:
主庫以及備庫
TOOL&TECH:
實時同步備庫數據,切割時服務各自保留自己的數據表,一個用主庫,一個用備庫。
OUTPUT:
完成數據庫的物理拆分
參考文獻:
【2】微服務拆分1-必要性和時機選擇
https://insights.thoughtworks.cn/microservices-splitting/
【3】微服務拆分2-原則和實踐過程
https://insights.thoughtworks.cn/microservices-splitting/