溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

將系統(tǒng)分解為微服務(wù)的策略是什么

發(fā)布時(shí)間:2022-01-14 09:21:18 來源:億速云 閱讀:130 作者:柒染 欄目:大數(shù)據(jù)

今天就跟大家聊聊有關(guān)將系統(tǒng)分解為微服務(wù)的策略是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

幾年前,Vladik Khononov和他的團(tuán)隊(duì)決定開始使用微服務(wù),但是幾個(gè)月后他們發(fā)現(xiàn)自己陷入了巨大的混亂之中。他在最近于倫敦Skills Matter舉行的DDD eXchange 2018會議上指出,造成這一現(xiàn)象的原因在于,他們只專注于采用酷炫的新技術(shù),而沒有關(guān)注更加基礎(chǔ)的東西,比如模塊化以及如何實(shí)現(xiàn)模塊化。他們在serverless框架、平臺和消息機(jī)制上投入了精力,但是在 思考如何將系統(tǒng)分解為微服務(wù)方面卻思考很少,換句話說,也就是如何尋找邊界并將不同的功能按照邊界進(jìn)行劃分。

Khononov是Internovus的CTO,對他和他的團(tuán)隊(duì)來說,起始的信條就是服務(wù)越小,它就會越好。這直接導(dǎo)致他們構(gòu)建了一個(gè)分布式單體結(jié)構(gòu)(distributed monolith),在接下來的幾年中,他們一直試圖擺脫這些微小的服務(wù)并且評估了不同的分解策略。

限界上下文(Bounded context)

Khononov指出通用語言(ubiquitous language)在領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(Domain-Driven Design,DDD)中是基礎(chǔ)實(shí)踐,該實(shí)踐的一種實(shí)現(xiàn)方式就是以領(lǐng)域?qū)<业恼Z言與他們進(jìn)行對話。有時(shí)候,你會發(fā)現(xiàn)對于相同的業(yè)務(wù)概念,他們會有不同的心智模型,或者使用相同的術(shù)語描述不同的理念,如果這樣的話,就預(yù)示著這些理念屬于不同的限界上下文。從一開始,Khononov和他的團(tuán)隊(duì)就使用這些方法來發(fā)現(xiàn)定義服務(wù)的邊界,每個(gè)邊界內(nèi)都會成為一個(gè)服務(wù)。他指出,這些服務(wù)代表了很廣泛的業(yè)務(wù)領(lǐng)域,有時(shí)候會導(dǎo)致一個(gè)限界上下文涵蓋多個(gè)業(yè)務(wù)子域。

業(yè)務(wù)子域

下一步,他們使用這些業(yè)務(wù)子域作為邊界,然后為每個(gè)業(yè)務(wù)子域創(chuàng)建一個(gè)服務(wù)。在Khononov的經(jīng)驗(yàn)中,子域和服務(wù)之間建立一對一的關(guān)系是DDD社區(qū)非常常見的方式,但是他們并沒有滿足于此,而是繼續(xù)努力實(shí)現(xiàn)更小的服務(wù)。

業(yè)務(wù)實(shí)體

深入研究子域,他們發(fā)現(xiàn)了業(yè)務(wù)實(shí)體和流程,然后他們將其抽取到單獨(dú)的服務(wù)中。開始的時(shí)候,這種終極方式失敗得很慘,但是Khononov指出在隨后的項(xiàng)目中,它取得了更大的成功。

 

就這三種策略來說,Khononov指出,使用限界上下文能夠幫助他們找到最大的有效單體邊界,然而,盡管它是一個(gè)可行的工作模型,但是他認(rèn)為這種方式并沒有很好地匹配微服務(wù)的理念。在業(yè)務(wù)子域和實(shí)體間選擇的時(shí)候,他認(rèn)為最好的分解等級依賴于正在構(gòu)建的系統(tǒng)及其用例。他強(qiáng)調(diào),微服務(wù)的理念實(shí)際上并不是關(guān)于單個(gè)服務(wù)內(nèi)部如何實(shí)現(xiàn)的,而是關(guān)于服務(wù)之間如何交合和耦合的。

系統(tǒng)分解為微服務(wù)的閾值是由微服務(wù)所屬的用例來定義的。

Khononov還沒有找到一種簡單的方式來評估一個(gè)系統(tǒng)的設(shè)計(jì),但是他相信現(xiàn)在已經(jīng)有了足夠多的啟發(fā)式設(shè)計(jì)準(zhǔn)則,幫助我們將系統(tǒng)分解為微服務(wù)。他認(rèn)為最有用的幾項(xiàng)包括:

  • 始終分解至限界上下文等級。除非你有充分的理由,否則不要進(jìn)一步分解。分布式系統(tǒng)有它們自己所面臨的挑戰(zhàn)。

  • 核心子域是公司掙錢的區(qū)域。在進(jìn)行分解時(shí),確保獲取領(lǐng)域的知識并具有恰當(dāng)?shù)淖佑颉?/p>

  • 購買或采用通用子域。它們已經(jīng)解決了一些問題了,如果自己實(shí)現(xiàn)的話,是沒有競爭優(yōu)勢的。

  • 為了支持核心域,我們需要支持子域,但是這不會增加任何的競爭性優(yōu)勢。它們通常非常穩(wěn)定和簡單,在早期階段就可以進(jìn)行進(jìn)一步的分解,直至使其成為實(shí)體服務(wù)。

  • 采用一致性的需求,幫助我們尋找必須放到同一個(gè)服務(wù)中的函數(shù)或方法。

  • 確保事件是顯式和自描述的??紤]在一個(gè)服務(wù)中,使用私有事件作為實(shí)現(xiàn)細(xì)節(jié),而將更為嚴(yán)格的公共事件作為服務(wù)的公開接口。

  • 尋找按照相同頻率進(jìn)行變化的服務(wù),它們可能能夠進(jìn)行合并以減低復(fù)雜性。

  • 評估每個(gè)服務(wù)的接口。如果覺得服務(wù)范圍太廣的話,那么它可能能夠拆分為更小的服務(wù),主要站在集成方面,重新考慮評估邊界以簡化整個(gè)系統(tǒng)的設(shè)計(jì)。

Khononov在總結(jié)中指出,隨著系統(tǒng)中服務(wù)的平均規(guī)模變得越來越小,你將會從一個(gè)大泥球般的單體系統(tǒng),通過限界上下文實(shí)現(xiàn)相對較大的服務(wù),進(jìn)而轉(zhuǎn)化為微服務(wù)。但是,他強(qiáng)調(diào),如果你繼續(xù)讓服務(wù)變得更小的話,那么最終將會形成一個(gè)分布式的大泥球。

看完上述內(nèi)容,你們對將系統(tǒng)分解為微服務(wù)的策略是什么有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI