微服務(wù)實踐目錄含鳞,可以參見連接宛篇。
0. 背景
0.1 拆分與控制的關(guān)系
微服務(wù)的邊界在服務(wù)劃分的方法中進行說明计福,拆分出服務(wù)之后需要對服務(wù)進行管理和控制跌捆。服務(wù)之間的關(guān)系以及調(diào)用鏈的控制不會在服務(wù)拆分中進行說明。所以這里主要討論的是服務(wù)之間的關(guān)系象颖。
0.2 管理服務(wù)之間關(guān)系的實踐方法
其實業(yè)界也有很多方法論可以用來管理服務(wù)之間的關(guān)系佩厚,例如:可以用DDD中的限界上下文映射可以作為服務(wù)間關(guān)系的理論基礎(chǔ),也可以用AKF中的Y軸的按照功能進行切割说订,也可以用分層架構(gòu)中的層次來管理服務(wù)之間的關(guān)系抄瓦。
下面主要討論兩種管理服務(wù)之間關(guān)系的方式:
-
分層模式
以定義層次意義的方式將服務(wù)劃分到不同的層次中。服務(wù)落到層次中之后就可以以層次關(guān)系來定義服務(wù)之間的關(guān)系陶冷。 -
分群模式
以服務(wù)群的邊界定義钙姊,使用多個服務(wù)組合成一個服務(wù)群。以群的邊界關(guān)系定義服務(wù)之間的關(guān)系埂伦。
1. 分層模式(中臺)
1.1 概念
在架構(gòu)風格中有分層架構(gòu)風格煞额,在DDD中也有分層模型。分層模式是應用各種場景最直接,也是最容易上手的方式膊毁。就像在0.2中說的那樣胀莹,只要定義清楚分層中每一層的作用即可定義服務(wù)之間的關(guān)系。
可以以自上而下的設(shè)計方法:對層的責任進行定義婚温,然后在定義服務(wù)描焰。也可以先進性服務(wù)拆分,然后根據(jù)服務(wù)所提供的內(nèi)能力在進行分層栅螟。例子中可以看出這兩種方式的區(qū)別荆秦。
1.2 例子
DDD分層架構(gòu)
DDD分層架構(gòu)并不是只指DDD定義的分層,也可以是DDD分層引申出的六邊形架構(gòu)嵌巷,洋蔥架構(gòu)萄凤,清晰架構(gòu)等等。他們都有一個特點是以先結(jié)論后細節(jié)的方式對層次進行劃分搪哪。每一層都是下層的一個總結(jié)流程靡努,每一層都是上層的能力的提供。中臺
中臺模式是以中臺能力為核心的晓折。但是在建設(shè)過程中不可能知道哪些能力是需要中臺進行承載的惑朦。所以,中臺是一個對前臺和后臺提供能力的一個部分漓概,但是它的建設(shè)過程是需要不斷的抽象與總結(jié)來形成中臺能力的漾月。
1.3 特點
公用能力
每一層都是向上層提供能力的。所以胃珍,下層的服務(wù)能力對于上層來說就是公用的梁肿。縱向切割的分層模式
分層幾乎都是從上之下,或者從下至上的觅彰。有明確的層與層的依賴關(guān)系
上下層之間關(guān)系明確吩蔑,下層向上層提供服務(wù)。不允許下層調(diào)用上層未對同層中的服務(wù)的能力進行規(guī)范
粗粒度的服務(wù)填抬,細粒度的服務(wù)都在同一個層中烛芬。如果服務(wù)較多時可能分不清服務(wù)之間的劃分原則。故障隔離的方式使用調(diào)用鏈隔離的方式進行隔離
使用上下層調(diào)用鏈的方式進行隔離飒责。
1.4 總結(jié)
有點很明顯赘娄,簡單易上手并且公共能力提供比較好。缺點也很明顯宏蛉,服務(wù)一多之后就很難管理了遣臼。
2. 分群模式(子系統(tǒng))
2.1 概念
以貼合團隊管理的方式進行服務(wù)的劃分工作,這里就可以很好的服務(wù)康威定律和逆康威定律拾并。一個團隊負責整體系統(tǒng)中的一部分業(yè)務(wù)暑诸,而業(yè)務(wù)與業(yè)務(wù)之間有著天然的隔離能力蚌讼。
2.2 例子
-
openstack中的分群
在openstack的架構(gòu)中很容易就可以看到,每一個部分是由一群服務(wù)來完成的个榕。有專門對外提供能力的篡石,有專門處理業(yè)務(wù)的,有負責存儲的西采。這一群服務(wù)來完成一個業(yè)務(wù)模塊凰萨。
2.3 特點
隔離性強
將所有非本群中的服務(wù)都認為是第二方服務(wù)。然后以管理第二方的方式對外進行管理工作械馆。這樣故障基本上就可以隔離在服務(wù)群內(nèi)部胖眷。服務(wù)群之間的業(yè)務(wù)邊界明顯
服務(wù)群之間的業(yè)務(wù)是有著明顯的邊界的,如果邊界模糊或邊界不清晰就可以將兩個團隊合并霹崎。但在分層模式中很難進行層次之間的合并珊搀。服務(wù)群管理可以交給一個團隊完成
服務(wù)群可以更貼近業(yè)務(wù)的方式對服務(wù)進行劃分,所以尾菇,業(yè)務(wù)相近的服務(wù)交給一個團隊比較合適境析。無法很好的定義服務(wù)群之間的協(xié)作關(guān)系
具體是服務(wù)群A給服務(wù)群B提供基礎(chǔ)能力,還是服務(wù)群B向服務(wù)群A提供業(yè)務(wù)能力派诬。很難進行定義劳淆。但在分層中,層次關(guān)系就定義了能力的提供方向默赂。
2.4 總結(jié)
服務(wù)群能很好的進行業(yè)務(wù)團隊之間的隔離沛鸵,但能力的公用就很難在服務(wù)群中被解決。
3. 總結(jié)
其實還有一種模式未進行討論:微服務(wù)大泥球缆八。即服務(wù)之間是平等的曲掰,任何服務(wù)都可以調(diào)用任何其他服務(wù)。這樣存在著比較大的問題:調(diào)用鏈無法進行管理奈辰,故障無法進行隔離栏妖。所以,這里不討論這種方式冯挎。
其實這兩種服務(wù)間關(guān)系的管理方式很多時候也是混用的,并不必要在一個系統(tǒng)中只用一種模式咙鞍。這個就需要架構(gòu)師來判斷哪些地方使用那種房官,在不同的地方使用不同的模式即可。
4. 參考
openstack logical architecture
[ 翻譯 ] 微服務(wù)架構(gòu)及設(shè)計模式