對(duì)于一個(gè)大系統(tǒng)嘉蕾,應(yīng)該從什么角度進(jìn)行微服務(wù)拆分贺奠?
首先我們要確定出微服務(wù)的大致數(shù)量,數(shù)量很關(guān)鍵错忱,因?yàn)閿?shù)量越多儡率,維護(hù)成本越大,一定不要超出團(tuán)隊(duì)的承受范圍以清。確定了數(shù)量儿普,我們?cè)倏紤]怎么拆。
服務(wù)粒度
最好是基于團(tuán)隊(duì)的規(guī)模進(jìn)行拆分掷倔,以1個(gè)微服務(wù)由3個(gè)人開(kāi)發(fā)最佳眉孩,例如團(tuán)隊(duì)開(kāi)始有6個(gè)人,就可以劃分為2個(gè)微服務(wù)勒葱,隨著業(yè)務(wù)的發(fā)展浪汪,功能越來(lái)越多,團(tuán)隊(duì)擴(kuò)充到了12個(gè)人凛虽,就可以把原來(lái)的2個(gè)拆為4個(gè)死遭。
3個(gè)人的好處:
- 3個(gè)人負(fù)責(zé)一個(gè)微服務(wù),每人對(duì)系統(tǒng)的理解程度涩维、分工的粒度殃姓、系統(tǒng)的效率都是非常合適的袁波。
- 從管理的角度來(lái)看,3個(gè)人是非常穩(wěn)定的結(jié)構(gòu)蜗侈,即使1個(gè)人休假或者調(diào)走篷牌,剩余2個(gè)人還可以支撐。如果一共是2個(gè)人踏幻,走一個(gè)剩一個(gè)的話(huà)壓力就很大了枷颊。
- 從技術(shù)提升的角度,3個(gè)人能夠有效的討論该面,快速達(dá)成一致夭苗,提升很快。如果是2個(gè)人隔缀,可能互相堅(jiān)持自己的意見(jiàn)题造。如果是4個(gè)人扔仓,可能有的人不會(huì)認(rèn)真參與討論滚澜。
拆分方法
1. 基于業(yè)務(wù)邏輯拆分
- 將系統(tǒng)中的業(yè)務(wù)模塊按照職責(zé)范圍識(shí)別出來(lái),每個(gè)單獨(dú)的業(yè)務(wù)模塊拆分為一個(gè)獨(dú)立的服務(wù)雏吭。
- 例如牵触,做一個(gè)電商系統(tǒng)淮悼,可以劃分為商品、交易揽思、用戶(hù)3個(gè)服務(wù)袜腥,也可以劃分為商品、訂單钉汗、支付羹令、發(fā)貨、買(mǎi)家儡湾、賣(mài)家6個(gè)服務(wù)特恬。
- 這2種劃分都沒(méi)問(wèn)題,差異就是數(shù)量不同徐钠,這時(shí)就要根據(jù)上面拆分粒度的原則了癌刽,根據(jù)團(tuán)隊(duì)規(guī)模來(lái)決定。所以尝丐,我們要先計(jì)算大概的服務(wù)數(shù)量显拜,然后再確定合適的“職責(zé)范圍”。
2. 基于可擴(kuò)展拆分
- 將系統(tǒng)中的業(yè)務(wù)模塊按照穩(wěn)定性排序爹袁,將已經(jīng)成熟和改動(dòng)不大的服務(wù)拆分為穩(wěn)定服務(wù)远荠,將經(jīng)常變化和迭代的服務(wù)拆分為變動(dòng)服務(wù)。
- 穩(wěn)定服務(wù)的粒度可以粗一些失息,即使邏輯上關(guān)聯(lián)不強(qiáng)的也可以放在一個(gè)服務(wù)中譬淳,例如日志服務(wù)档址、升級(jí)服務(wù)放在一個(gè)子系統(tǒng)中。
- 變動(dòng)服務(wù)的粒度可以細(xì)一些邻梆,但要注意服務(wù)的數(shù)量守伸。
- 這種拆分方式是為了提升項(xiàng)目快速迭代的效率,避免變動(dòng)服務(wù)的改動(dòng)升級(jí)影響了成熟的功能浦妄。
3. 基于可靠性拆分
將系統(tǒng)中的 可靠性要求高的核心服務(wù) 和 可靠性要求低的非核心服務(wù) 拆分開(kāi)來(lái)尼摹,然后重點(diǎn)保證核心服務(wù)的高可用。
好處:
- 避免非核心服務(wù)故障影響核心服務(wù)
例如剂娄,日志上報(bào)是非核心服務(wù)蠢涝,某一段時(shí)間內(nèi)上報(bào)量可能會(huì)非常大,如果沒(méi)有拆分出來(lái)阅懦,那么就可能?chē)?yán)重影響核心服務(wù)和二。 - 核心服務(wù)高可用方案更簡(jiǎn)單
核心服務(wù)單獨(dú)拆分出來(lái)后,涉及的數(shù)據(jù)耳胎、組件等都會(huì)更少儿咱,對(duì)其做高可用方案就簡(jiǎn)單很多,需要考慮的點(diǎn)較少场晶。 - 降低高可用成本
拆分后,核心服務(wù)占用的機(jī)器怠缸、帶寬等資源比不拆分要少很多诗轻。
4. 基于性能拆分
- 將對(duì)性能壓力大的模塊拆出來(lái),避免影響其他服務(wù)揭北,而且對(duì)其做性能提升扳炬、高可用等優(yōu)化都更簡(jiǎn)單高效。
- 例如電商的搶購(gòu)搔体,排隊(duì)功能的性能壓力很大恨樟,就可以將其獨(dú)立為一個(gè)服務(wù)。
小結(jié)
注意疚俱,這幾種拆分方式不是多選一劝术,可以根據(jù)實(shí)際情況自由組合,例如一個(gè)系統(tǒng)X呆奕,可以基于可靠性拆分出服務(wù)A养晋,基于性能拆分出B,基于可擴(kuò)展性拆出 C/D/F梁钾,最后共 A/B/C/D/F/X 6個(gè)服務(wù)绳泉。
image