一,、上下文
微服務架構(gòu)用兩種方式來達到目的:
- 簡化測試,,使得組件可以獨立部署
- 把工程師團隊分成一個個小的、自主的團隊(6到10人),,每個團隊負責一個或多個服務
這些好處不是自動就能得到的,,相反的,它需要我們對服務有一個仔細的劃分,。
一個服務必須足夠小,,使得可以被一個小的團隊開發(fā)和測試。從面向?qū)ο笤O計那里學到的一個有用的方法是單一職責原則,。
應用也要被一種合適的方法拆分,,從而大多數(shù)新的和修改的需求只影響到單個service,。因為影響到多個service的改動需要多個團隊之間的合作,這會拖慢開發(fā)的速度,。另一個面向?qū)ο笤O計的有效原則是共同封閉原則,,它是說,因為同一個原因修改的類應該在同一個包中,。這種思想在設計服務時也同樣有效:每個變化應該只影響一個service,。
二、問題和強制條件
- 架構(gòu)應該穩(wěn)定
- 一個服務應該實現(xiàn)一個強相關的方法的小集合
- 服務必須遵從共同封閉原則
- 服務應該松耦合:一個服務的實現(xiàn)的變化不影響調(diào)用它的API的客戶端
- 服務應該是可測試的
- 服務應該足夠小,,可以被6到10人的小團隊開發(fā)
- 每個團隊應該是自主的。一個團隊可以開發(fā)和部署他們的服務,,而只需要和別的團隊有一些最小的合作
三、解決方案
1.根據(jù)業(yè)務能力拆分
業(yè)務能力是業(yè)務架構(gòu)模型中的一個概念,。業(yè)務模型經(jīng)常對應于一個業(yè)務對象,,比如說:訂單管理負責訂單,客戶管理負責客戶,。
業(yè)務能力經(jīng)常組織成一個多層等級,。比如說,一個企業(yè)應用也許有頂級的分類,,如產(chǎn)品開發(fā),、產(chǎn)品交付、需求挖掘等,。
示例
一個在線商城的業(yè)務能力包括:
- 產(chǎn)品目錄管理
- 存貨管理
- 訂單管理
- 發(fā)貨管理
- …
對應的微服務架構(gòu)會有一些服務對應于這些業(yè)務能力:
結(jié)果
這種模式有以下好處:
- 架構(gòu)穩(wěn)定,,因為業(yè)務能力相對比較穩(wěn)定
- 開發(fā)團隊是自主的,圍繞著交付業(yè)務價值而不是技術特性來組織
- 服務之間共同合作,,松耦合
問題
-
如何定義業(yè)務能力,?定義業(yè)務能力和服務需要對業(yè)務有一個好的理解, 需要對組織的目標,、結(jié)構(gòu),、業(yè)務流程做一個分析。定義業(yè)務能力的好的開始點是:
- 組織結(jié)構(gòu): 一個組織內(nèi)的不同組對應于業(yè)務能力或者業(yè)務能力組
- 高層領域模型: 業(yè)務能力經(jīng)常對應于領域?qū)ο?/li>
2. 根據(jù)子域拆分
- 核心: 業(yè)務的核心區(qū)分點,,應用的最有價值的部分
- 支持: 與業(yè)務是做什么的相關,,但不是主要區(qū)分點。這個可以自己做或者外包,。
- 通用: 不特定于業(yè)務,,理想情況下使用現(xiàn)成的軟件來實現(xiàn)
示例
一個在線商城的子域包括
- 商品目錄
- 存貨管理
- 訂單管理
- 發(fā)貨管理
- …
對應的微服務架構(gòu)會有一些服務對應于這些子域,。
結(jié)果
這種模式有以下這些好處:(與上面的方法一樣的)
- 架構(gòu)穩(wěn)定,因為業(yè)務能力相對比較穩(wěn)定
- 開發(fā)團隊是自主的,,圍繞著交付業(yè)務價值而不是技術特性來組織
- 服務之間共同合作,,松耦合
問題
-
如何定義子域?定義子域和服務需要對業(yè)務有一個好的理解,, 需要對組織的目標,、結(jié)構(gòu)、業(yè)務流程做一個分析,。定義子域的好的開始點是:
- 組織結(jié)構(gòu): 一個組織內(nèi)的不同組對應于業(yè)務能力或者業(yè)務能力組
- 高層領域模型: 業(yè)務能力經(jīng)常對應于領域?qū)ο?br>