今年microXchg微服務(wù)大會(huì)上,Uwe Friedrichsen做了開(kāi)幕報(bào)告。報(bào)告中探討了“彈性功能服務(wù)設(shè)計(jì)”的核心理念,要點(diǎn)包括:微服務(wù)開(kāi)發(fā)人員應(yīng)該了解容錯(cuò)設(shè)計(jì)模式與緩存,但不能用于改善完全不好(過(guò)度耦合)的系統(tǒng)設(shè)計(jì);理解領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD,Domain-Driven Design)和模塊化的重要性;組件重在可替換性而非可重用性。
Friedrichsen是Codecentric公司的CTO,他在演講一開(kāi)始就指出了軟件開(kāi)發(fā)的目的在于交付業(yè)務(wù)價(jià)值。為實(shí)現(xiàn)該目標(biāo),軟件必須在生產(chǎn)環(huán)境中運(yùn)行并(高度)可用。微服務(wù)這樣的現(xiàn)代架構(gòu)風(fēng)格意味著凡事皆分布(很多情況下是在不少于一個(gè)LAN上的分布),因此故障在系統(tǒng)中是常見(jiàn)的并且是不可預(yù)測(cè)的。
容錯(cuò)設(shè)計(jì)模式應(yīng)該被開(kāi)發(fā)人員所熟知,諸如電路熔斷器(Circuit Breaker)、艙壁(Bulkhead)、超時(shí)與重試(Timeout and Retry)等。容錯(cuò)設(shè)計(jì)模式借助Michael Nygard所著的《[Release It!(https://pragprog.com/book/mnee/release-it)》一書而廣為人知。緩存雖然十分有用,但是在部署中應(yīng)慎重使用,并非簡(jiǎn)單地應(yīng)用就可以達(dá)到克服不好系統(tǒng)設(shè)計(jì)的效果,例如涉及多個(gè)獨(dú)立服務(wù)的長(zhǎng)激活路徑。
Friedrichsen展示了一系列用于微服務(wù)的“設(shè)計(jì)基礎(chǔ)”(如下圖所示),其中包括了一些側(cè)重于高內(nèi)聚、低耦合和分離關(guān)注的設(shè)計(jì)原則。這些原則在系統(tǒng)邊界處尤為關(guān)鍵,雖然他們的理論早在上世紀(jì)70年代就由David Parnas (PDF鏈接)詳細(xì)闡明了,但是他們依然常被錯(cuò)誤地理解。
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD,Domain-Driven Design)是一個(gè)十分有用的工具,但是不少開(kāi)發(fā)人員過(guò)度聚焦于被Friedrichsen稱做“實(shí)體DDD”的領(lǐng)域靜態(tài)上下文模型。通常系統(tǒng)的動(dòng)態(tài)行為對(duì)業(yè)務(wù)行為、領(lǐng)域時(shí)間和數(shù)據(jù)流更具描述力。
不要從靜態(tài)領(lǐng)域模型著手,魔法存在于系統(tǒng)的動(dòng)態(tài)行為之中。
微服務(wù)開(kāi)發(fā)人員不應(yīng)糾結(jié)于可重用性,而是應(yīng)該瞄準(zhǔn)于可替換性。Friedrichsen引用了Fred Brooks的說(shuō)法,討論多年來(lái)一直被開(kāi)發(fā)人員所追求的軟件重用承諾問(wèn)題。Brook建議對(duì)于需要?jiǎng)?chuàng)建可重用組件(超越那些適用單一用例目標(biāo)的組件)的工作,通常需要付出三倍以上的工作投入。這意味只有當(dāng)組件被無(wú)修改地被使用了四次以上,才會(huì)看到些許在可重用性上投入的反饋。
微服務(wù)系統(tǒng)中使用的交流模式也很大程度上影響了功能性服務(wù)設(shè)計(jì),F(xiàn)riedrichsen建議應(yīng)將關(guān)注置于會(huì)限制未來(lái)更改和擴(kuò)充能力的前期架構(gòu)選取之上。
報(bào)告的結(jié)論和核心關(guān)鍵要點(diǎn)在于,當(dāng)實(shí)現(xiàn)微服務(wù)這樣的分布式系統(tǒng)時(shí),系統(tǒng)的特性會(huì)使得多年來(lái)一直為我們所熟知的設(shè)計(jì)問(wèn)題影響得以呈現(xiàn)出來(lái)并會(huì)倍增,因此開(kāi)發(fā)人員和架構(gòu)師需要重新領(lǐng)會(huì)功能服務(wù)設(shè)計(jì)。
Uwe Friedrichsen演講“彈性功能服務(wù)設(shè)計(jì)”的視頻可以在microXchg大會(huì)的YouTube頻道上看到。
查看英文原文:Relearning Functional Service Design for Microservices: Uwe Friedrichsen at microXchg