場景
使用微服務架構開發一個大型複雜的應用程式,我們需要将應用程式細緻,合理地分解為一組松散耦合的微服務。微服務架構的目标是通過實作持續傳遞/部署來加速軟體開發。

目标
- 架構必須穩定;
- 服務必須高内聚 - 服務應該實作一小組強相關的功能;
- 服務必須符合開閉原則 - 将一同變更的内容打包在一起,以確定每個更改僅影響一個服務;
- 服務必須松耦合 - 每個服務都可以在不影響用戶端的情況下更改實作;
- 服務應該是可測試的;
- 每項服務都小到足以由“兩個披薩”團隊開發,即一個6-10人的團隊;
- 負責一個或多個服務的每個團隊必須是自治的 - 團隊能夠在與其他團隊盡量少的協作下,來開發和部署他們的服務。
方法
通過領域驅動設計(DDD),設計與 子域 相對應的服務。DDD通過分析問題空間和業務邏輯,将應用程式定義為域。域由多個子域組成。每個子域對應于業務的不同部分。
子域可分為以下幾類:
- 核心類 - 業務的關鍵差異化因素和應用程式中最有價值的部分;
- 支援類 - 與業務有關,但與差異化無關;這些可以在内部實施或外包;
- 通用類 - 與業務無關,理想情況下可以使用現成的軟體實作。
例子
一個線上商店的子域包括:
- 産品目錄
- 庫存管理
- 訂單管理
- 交貨管理
相應的微服務架構中,每一個子域将對應一個微服務。
優點
- 由于子域相對穩定,是以具有穩定的體系結構;
- 開發團隊能有效隔離業務邏輯和技術架構;
- 服務具有高内聚和松耦合。
問題
如何識别子域?
識别子域需要了解業務。通過分析業務及其組織結構來識别不同的專業領域,進而識别子域。這個過程通常需要不斷疊代。
識别子域的好思路是:
- 組織結構 - 組織内的不同分組或部門可能對應于不同子域;
- 高階域模型 - 子域通常具有關鍵域對象。
相關模式
微服務架構風格你現在的氣質裡,藏着你走過的路,讀過的書,愛過的人。