成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么在做微服務(wù)設(shè)計的時候需要DDD?

開發(fā) 架構(gòu)
記得之前在規(guī)劃和設(shè)計微服務(wù)架構(gòu)的時候,張隊長給了我一個至今依然記憶深刻的提示:『你的設(shè)計藍(lán)圖里為什么沒有看到DDD的影子呢?』

 記得之前在規(guī)劃和設(shè)計微服務(wù)架構(gòu)的時候,張隊長給了我一個至今依然記憶深刻的提示:『你的設(shè)計藍(lán)圖里為什么沒有看到DDD的影子呢?』

[[333226]]

隨著對充血模型的領(lǐng)域認(rèn)知的加深,我越加感覺到DDD的重要性。但是DDD內(nèi)容繁多,是不是要深入去了解呢,我覺得不必入坑太深,個人淺見,它最核心的一點(diǎn)就是針對貧血模型的不足而設(shè)計,把原先傳統(tǒng)的貧血模型里的業(yè)務(wù)邏輯層拎出來,融入到Domain層,這樣面對復(fù)雜業(yè)務(wù)的規(guī)模化變更,我們只需要專注于Domain即可。

回到主題,我們要了解的是微服務(wù)和DDD到底有什么關(guān)系呢?

因?yàn)樵诨ヂ?lián)網(wǎng)時代,軟件所面臨的問題域比以往要復(fù)雜得多,這種復(fù)雜性來源于不斷擴(kuò)展的問題域自身,也來源于創(chuàng)新變化,以及這種規(guī)模性增長所帶來的挑戰(zhàn)。

然而一個人一個團(tuán)隊,他對復(fù)雜的事物的認(rèn)知是有極限的,面對這種復(fù)雜問題唯一的方法就是分而治之。分主要考慮的是如何去分;治意味著分出來的每一個部分要能夠獨(dú)立的運(yùn)行,能夠互相的協(xié)作,完成整體的目標(biāo),能夠一來應(yīng)對外部變化所帶來的沖擊。

微服務(wù)的缺陷

微服務(wù)架構(gòu)在分和治兩個方面都給出了很好的理論指導(dǎo)和最佳實(shí)踐,那微服務(wù)是不是解決復(fù)雜問題的銀彈呢?其實(shí)不然,很多團(tuán)隊在應(yīng)用了微服務(wù)架構(gòu)來構(gòu)建他們的系統(tǒng)以后,發(fā)現(xiàn)并沒有完全解決這種復(fù)雜性問題,甚至還帶來了一些其他的問題。比如服務(wù)并 沒有解決復(fù)雜系統(tǒng)如何應(yīng)對需求變化這個問題 ,甚至還加劇了這個問題。當(dāng)一個需求變化了,需要花大量的精力去識別這個變化影響到了哪些微服務(wù),這些服務(wù)的多個團(tuán)隊之間,需要通過無休止的扯皮去決定 哪個服務(wù)多一些,哪些服務(wù)少改一些 ,然后測試團(tuán)隊還需要做昂貴的這種聯(lián)調(diào)測試,即便如此呢,開發(fā)團(tuán)隊依然不放心,還要通過一系列的開關(guān)控制,小心翼翼的去做切流,去做灰度發(fā)布。

從業(yè)務(wù)層面來看,微服務(wù)架構(gòu)沒有避免這種散彈式的修改。甚至反而加重了他,這是為什么呢?一個重要的原因是得微服務(wù)架構(gòu)在分的緯度考慮的并不全面。

DDD功用

當(dāng)我們?nèi)プ龇值倪@種工作的時候,具體拆分詳見我的另外一篇文章《微服務(wù)的拆分姿勢》,需要考慮哪些維度呢?我覺得我們至少要考慮三個維度:

  • 功能緯度
  • 質(zhì)量緯度,比如性能,可用性
  • 工程緯度

微服務(wù)對第2個給出了很好的指導(dǎo),對第3個也給出了一些建議。但是, 對第1個功能緯度只給出來非常有限的指導(dǎo) ,就是為什么隨著微服務(wù)的流行,領(lǐng)域驅(qū)動設(shè)計(DDD)又被重新重視起來的原因。

DDD彌補(bǔ)了微服務(wù)在 功能劃分 方面沒有給出很好指導(dǎo)的缺陷。所以他們在面對復(fù)雜問題和構(gòu)建系統(tǒng)時候是一種 互補(bǔ) 的關(guān)系,在系統(tǒng)拆分的時候可以很好的協(xié)作。

只是他們看待系統(tǒng)拆分這個角度是不同的。微服務(wù)當(dāng)中的服務(wù)所關(guān)注的范圍正是DDD所推崇的六邊形架構(gòu)中的領(lǐng)域?qū)印?/p>

 

為什么在做微服務(wù)設(shè)計的時候需要DDD?

 

拆分案例

接下來結(jié)合DDD和微服務(wù)來拆分一個復(fù)雜系統(tǒng)。

關(guān)于領(lǐng)域

我們稱企業(yè)的 業(yè)務(wù)范圍 和在這個范圍里進(jìn)行的 活動 為領(lǐng)域,和軟件系統(tǒng)無關(guān)。領(lǐng)域會分成多個子域,比如我們一個電商系統(tǒng),會有:

  • 商品子域
  • 訂單子域
  • 庫存子域等等。

在不同的子域里,不同的概念有不同的含義。所以我們在進(jìn)行領(lǐng)域建模的時候,必須要有一個明確的 領(lǐng)域邊界 ,也就是DDD里稱做的 限界上下文 ,它是 系統(tǒng)內(nèi)部的一個 架構(gòu)邊界 ,決定了這個系統(tǒng)架構(gòu)。

劃分系統(tǒng)內(nèi)部架構(gòu)邊界

架構(gòu)簡潔之道這本書里邊就說過:『系統(tǒng)架構(gòu)是由系統(tǒng)的內(nèi)部架構(gòu)邊界以及邊界之間的依賴關(guān)系所決定的,與系統(tǒng)中各個組件之間的通信和調(diào)用的方式是無關(guān)的』。我們常說的微服務(wù)的服務(wù)調(diào)用本身只是一種比函數(shù)調(diào)用方式成本稍高的,分割應(yīng)用程序行為的一種形式,系統(tǒng)架構(gòu)無關(guān)。

所以,復(fù)雜系統(tǒng)劃分的 第一重要 的是要 劃分內(nèi)部的架構(gòu)邊界 ,即劃分清楚這個上下文,以及明確他們之間的關(guān)系,這對應(yīng)于我們之前說的功能的維度。這正是DDD用武之處。其次我們才考慮基于非功能的維度如何劃分,這是微服務(wù)能夠發(fā)揮其優(yōu)勢的地方。

舉個例子,我們把系統(tǒng)分成ABC三個個上下文,三個上下文的代碼可以在一個部署單元里運(yùn)行,通過進(jìn)程內(nèi)調(diào)用來完成操作,這就是典型的單體架構(gòu);

 

為什么在做微服務(wù)設(shè)計的時候需要DDD?

 

也可以各自在一個獨(dú)立的部署單元里運(yùn)行,通過遠(yuǎn)程調(diào)用來完成操作,這就是現(xiàn)在流行的微服務(wù)架構(gòu)。

邊界清晰的好處

我們更多的是兩種架構(gòu)模式的一個混合,比如A和B一起是一個部署單元,C是另外一個獨(dú)立的部署單元,這種情況往往是因?yàn)镃非常重要,他并發(fā)的訪問量非常大,或者它的需求變更比較頻繁。將C拆分出來的有以下幾個好處:

  • 資源傾斜
  • 使用彈力設(shè)計模式:比如重試,熔斷,降級
  • 使用特殊技術(shù):比如Go語言
  • 具備獨(dú)立代碼庫:有獨(dú)立團(tuán)隊和運(yùn)維人員,和A和B的運(yùn)行期做到隔離不互相影響

這四點(diǎn)正是服務(wù)架構(gòu)所關(guān)注的,它是基于非功能緯度的視角來看待拆分這件事情的,他關(guān)注的不是系統(tǒng)架構(gòu)的邏輯邊界,更多的關(guān)注的是應(yīng)用程序行為的分隔。

那為什么不把A和B都拆成一個獨(dú)立的部署單元?

這會帶來更多的好處,也會帶來額外的成本,架構(gòu)應(yīng)該是可以演進(jìn)的,在業(yè)務(wù)發(fā)展的早期,應(yīng)該關(guān)注系統(tǒng)架構(gòu)的邏輯邊界,保持邏輯邊界的清晰和關(guān)系的正確,隨著業(yè)務(wù)量的增加,逐步在做拆分,這是組合應(yīng)用DDD和微服務(wù)架構(gòu)帶來的最大的好處。

在單體架構(gòu)中,保持架構(gòu)邏輯邊界不被突破是有一定難度。如果邏輯邊界不清晰,在需要服務(wù)器拆分的時候,就未必能拆得出來了。另外沒有人一下子就可以把邏輯邊界定義正確,即使這個上下文定義的不太正確,在DDD 聚合根 這個概念可以保障我們能夠演進(jìn)出更適合的上下文。

DDD界限上下文內(nèi)部通過實(shí)體和值對象來對領(lǐng)域概念進(jìn)行建模, 一組實(shí)體和值子對象歸屬于一個聚合根 。那按DDD要求

聚合根用來保證內(nèi)部實(shí)體規(guī)則的正確性和數(shù)據(jù)的一致性

外部對象只能通過ID來引用聚合根,不能引用聚合根內(nèi)部的實(shí)體

聚合根之間不能共享一個數(shù)據(jù)庫事務(wù),它們之間的數(shù)據(jù)一致性需要通過最終的一致性來保障

有了聚合根,基于這些約束,未來可以根據(jù)需要把聚合根升級為上下文,甚至拆分成微服務(wù)都是比較容易的。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2020-02-04 14:41:37

微服務(wù)設(shè)計DDD

2022-11-30 08:27:26

微服務(wù)設(shè)計服務(wù)

2024-12-31 11:05:07

2016-01-20 09:54:51

微服務(wù)架構(gòu)設(shè)計SOA

2023-01-11 16:22:07

2022-05-25 08:00:00

開發(fā)微服務(wù)企業(yè)

2021-08-03 07:21:14

架構(gòu)微服務(wù)開發(fā)

2021-11-15 11:05:27

DDD微服務(wù)Java

2017-08-18 14:47:31

DDD微服務(wù)架構(gòu)

2023-11-24 07:16:10

DDD微服務(wù)

2023-12-19 07:56:08

微服務(wù)軟件測試左移測試

2023-11-13 14:44:14

DDD開發(fā)Java

2024-09-04 17:49:27

2020-04-21 11:03:34

微服務(wù)數(shù)據(jù)工具

2022-03-25 10:09:17

用戶分層APP設(shè)計

2023-03-29 15:01:43

微服務(wù)開發(fā)

2022-09-27 15:06:07

微服務(wù)架構(gòu)開發(fā)

2022-08-29 10:35:42

微服務(wù)架構(gòu)單體應(yīng)用

2023-09-15 12:30:06

微服務(wù)架構(gòu)管理

2015-08-03 10:40:45

動效設(shè)計優(yōu)勢
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 操操操操操| 日韩高清黄色 | 天天操天天射天天舔 | 久久亚洲国产精品 | 福利二区| 久久综合入口 | 欧美在线观看一区 | 欧美 视频| 一级大片网站 | 成人午夜视频在线观看 | 成人在线观看免费爱爱 | 亚洲精品久久久久久一区二区 | 国产视频一区在线 | 精品在线免费观看视频 | 久久久一二三 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 日韩欧美福利视频 | 91天堂| 成人国产在线视频 | 国产精品久久久久久久岛一牛影视 | 春色av| 人人澡视频| 国产一区二区美女 | 欧美一区二区在线 | av一区二区三区在线观看 | 久久久www成人免费精品 | 欧美精 | 国产精品久久久99 | 久久免费精品 | 亚洲国产欧美一区二区三区久久 | 国产高清自拍视频在线观看 | 自拍第1页| 盗摄精品av一区二区三区 | 成人精品鲁一区一区二区 | 99在线免费观看视频 | 久久精品在线 | 男女在线免费观看 | 精品久久久久久久人人人人传媒 | 欧美一级在线观看 | 91久久久久久 | 一区二区三区精品在线视频 |