微服務(wù)分解設(shè)計(jì)四種法則
如果您在設(shè)計(jì)大型并發(fā)應(yīng)用程序或者準(zhǔn)備拆解之前的老系統(tǒng)時(shí),我想你第一考慮的是微服務(wù)架構(gòu)方式。
前面我們了解到微服務(wù)架構(gòu)將應(yīng)用程序構(gòu)建為一系列松散耦合的服務(wù),是為了通過(guò)實(shí)現(xiàn)持續(xù)交付和靈活部署來(lái)加速軟件開(kāi)發(fā)。
出于很原因,分解很重要
- 有利于分工和知識(shí)共享。使用它,具有特殊知識(shí)的多個(gè)人(或團(tuán)隊(duì))可以在一個(gè)應(yīng)用程序上高效地合作。
- 它描述了多個(gè)元素如何交互。
在微服務(wù)下,有兩種類(lèi)型的項(xiàng)目
- 待重新開(kāi)發(fā)項(xiàng)目—國(guó)外譯名:Brownfield projects,是指在現(xiàn)有或遺留系統(tǒng)的背景下開(kāi)發(fā)和部署新的軟件系統(tǒng)。因此,將單體應(yīng)用程序轉(zhuǎn)換為微服務(wù)是屬于這種類(lèi)型項(xiàng)目。
- 新建項(xiàng)目——是指從頭開(kāi)始為一個(gè)全新的系統(tǒng),而無(wú)需使用任何遺留代碼。當(dāng)您從頭開(kāi)始時(shí),沒(méi)有任何限制或依賴(lài)性。
一、按業(yè)務(wù)能力模式分解
為了創(chuàng)建微服務(wù)架構(gòu),一種策略是基于業(yè)務(wù)能力進(jìn)行分解。作為一家企業(yè),項(xiàng)目是為了創(chuàng)造價(jià)值。例如,在電子商務(wù)業(yè)務(wù)中,訂單管理、庫(kù)存管理、支付、運(yùn)輸?shù)榷忌婕啊?/p>
這種模式有以下好處
- 業(yè)務(wù)能力比較穩(wěn)定,架構(gòu)依賴(lài)的業(yè)務(wù)邏輯比較穩(wěn)定。
- 開(kāi)發(fā)團(tuán)隊(duì)是跨職能的、自主的,并且圍繞交付業(yè)務(wù)價(jià)值而非技術(shù)特性進(jìn)行組織。
- 服務(wù)是松散耦合和內(nèi)聚的。
二、按子域模式分解
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) (DDD) 方法是一種構(gòu)建復(fù)雜軟件應(yīng)用程序的方法,它基于面向?qū)ο箢I(lǐng)域模型的開(kāi)發(fā)。DDD 為每個(gè)子域定義了單獨(dú)地域模型。每個(gè)子域都屬于一個(gè)域。識(shí)別子領(lǐng)域與識(shí)別業(yè)務(wù)能力的過(guò)程比較相似,即分析業(yè)務(wù)和識(shí)別專(zhuān)業(yè)領(lǐng)域。最有可能的是,大多數(shù)是業(yè)務(wù)熟悉的子域。領(lǐng)域模型的范圍在 DDD 中稱(chēng)為有界上下文。有界上下文包括實(shí)現(xiàn)模型的代碼組件。
子域可以分類(lèi)如下
- 核心—業(yè)務(wù)的最大差異化因素和應(yīng)用程序最有價(jià)值的部分,在一些公司經(jīng)常有核心系統(tǒng)項(xiàng)目,有核心報(bào)價(jià)子系統(tǒng),核心定價(jià)子系統(tǒng)等
- 支持—不是差異化因素,而是與業(yè)務(wù)提供的內(nèi)容相關(guān)。通常在內(nèi)部或外包實(shí)施。
- 通用—不特定于業(yè)務(wù),最好使用現(xiàn)成的軟件實(shí)施。
這種模式有以下好處
- 子域職能比較穩(wěn)定,架構(gòu)相對(duì)也比較穩(wěn)定。
- 開(kāi)發(fā)團(tuán)隊(duì)(通常會(huì)設(shè)計(jì)到組建虛擬團(tuán)隊(duì))是跨職能的、自主的,并且專(zhuān)注于交付業(yè)務(wù)價(jià)值而不是技術(shù)特性。
- 服務(wù)是松散耦合和內(nèi)聚的。
三、將單體應(yīng)用程序分解為微服務(wù)時(shí)的挑戰(zhàn)
在分解單體應(yīng)用程序時(shí),可能會(huì)出現(xiàn)挑戰(zhàn)。
- 網(wǎng)絡(luò)延遲—在分布式系統(tǒng)中,網(wǎng)絡(luò)延遲是一個(gè)持續(xù)關(guān)注的問(wèn)題。您可能會(huì)發(fā)現(xiàn)對(duì)服務(wù)的特定分解會(huì)導(dǎo)致兩個(gè)服務(wù)之間的大量往返。
- 數(shù)據(jù)一致性—每個(gè)服務(wù)都有自己的數(shù)據(jù)庫(kù),因此維護(hù)跨服務(wù)的數(shù)據(jù)一致性會(huì)非常困難。
- 神類(lèi)(捂臉哭一下)—神類(lèi)是控制系統(tǒng)中太多其他對(duì)象的對(duì)象,它超越了邏輯,成為了無(wú)所不能的類(lèi)。由于其規(guī)模和復(fù)雜性,它是一個(gè)集中系統(tǒng)智能的類(lèi),并使用來(lái)自其他類(lèi)的信息。
四、扼殺者模式
將遺留的單體應(yīng)用程序遷移到微服務(wù)架構(gòu)時(shí),會(huì)使用 Strangler 模式。通過(guò)用新服務(wù)替換特定功能,可以使用這種模式逐步轉(zhuǎn)換單體應(yīng)用程序。新服務(wù)一旦準(zhǔn)備好,舊組件就被扼殺,新服務(wù)投入使用,而舊組件退役。
單體應(yīng)用最終會(huì)縮小功能,而微服務(wù)將接管整體功能。






