日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为什么DDD是设计微服务的最佳实践

發(fā)布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么DDD是设计微服务的最佳实践 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在本人的前一篇文章《不要把微服務做成小單體》中,現(xiàn)在很多的微服務開發(fā)團隊在設計和實現(xiàn)微服務的時候覺得只要把原來的單體拆小,就是微服務了。但是這不一定是正確的微服務,可能只是一個拆小的小單體。這篇文章讓我們從這個話題繼續(xù),先看看為什么拆出來的是小單體。

設計微服務的路徑依賴困境

在微服務架構誕生之前,幾乎所有的軟件系統(tǒng)都是采用單體架構來構建的,因此大部分軟件開發(fā)者喜歡的開發(fā)路徑就是單體架構模式。在這樣的背景下,根據(jù)經(jīng)濟學和心理學的路徑依賴法則,當這些開發(fā)者基于新的技術想要把原來的大單體拆分成多個部分時,就必然會習慣性地采用自己最擅長的單體架構來設計每個部分。

image

?

路徑依賴法則:是指人類社會中的技術演進或制度變遷均有類似于物理學中的慣性,即一旦進入某一路徑(無論是“好”還是“壞”)就可能對這種路徑產(chǎn)生依賴。一旦人們做了某種選擇,就好比走上了一條不歸之路,慣性的力量會使這一選擇不斷自我強化,并讓你輕易走不出去。第一個使“路徑依賴”理論聲名遠播的是道格拉斯·諾斯,由于用“路徑依賴”理論成功地闡釋了經(jīng)濟制度的演進,道格拉斯·諾斯于1993年獲得諾貝爾經(jīng)濟學獎。
“路徑依賴”理論被總結出來之后,人們把它廣泛應用在選擇和習慣的各個方面。在一定程度上,人們的一切選擇都會受到路徑依賴的可怕影響,人們過去做出的選擇決定了他們現(xiàn)在可能的選擇,人們關于習慣的一切理論都可以用“路徑依賴”來解釋。

在現(xiàn)實中我們經(jīng)常看到這個法則隨處都會發(fā)生,微信剛出來的時候很多人說這不就是手機上的QQ嗎,朋友圈剛出來的時候他們又會說這不就是抄襲微博嗎。很多時候當你興致沖沖給朋友介紹一個新的東東時,朋友一句話就能讓你萬念俱灰:這不就是XXX嗎?之所以這樣,是因為人類在接觸到新知識新概念的時候,都會下意識的使用以前知道的概念進行套用,這樣的思維方式是人類從小到大學習新事物的時候使用的模式,它已經(jīng)固化成我們大腦操作系統(tǒng)的一部分了。

理解了這個法則,我們就可以很容易的明白,已經(jīng)在單體架構下開發(fā)了多年的軟件工程師,當被要求要使用微服務架構來進行設計和開發(fā)的時候,本能的反應方式肯定是:這不就是把原來的單體做小了嗎?但是這樣做出來的“微服務”真的能夠給我們帶來微服務架構的那些好處嗎?真的能提高一個企業(yè)的數(shù)字化響應力嗎?

不斷變化的軟件需求和經(jīng)常被視為效率低下的軟件開發(fā)一直都是這個行業(yè)里最難解決的頑疾,從瀑布到敏捷,都是在嘗試找到一個解決這個頑疾的方法,領域驅動設計(Domain Driven Design)也是其中一個藥方,而且隨著十多年的不斷實踐,我們發(fā)現(xiàn)這個藥方有它自己的獨特之處,下面我們先來介紹一下這個藥方。

DDD簡史

image

領域驅動設計這個概念出現(xiàn)在2003年,那個時候的軟件還處在從CS到BS轉換的時期,敏捷宣言也才發(fā)表2年。但是Eric Evans做為在企業(yè)級應用工作多年的技術顧問,敏銳的發(fā)現(xiàn)了在軟件開發(fā)業(yè)界內(nèi)(尤其是企業(yè)級應用)開始涌現(xiàn)的一股思潮,他把這股思潮成為領域驅動設計,同時還出版了一本書,在書中分享了自己在設計軟件項目時采用的建模方法,并為設計決策者提供了一個框架。

但是從那以后DDD并沒有和敏捷一樣變得更加流行,如果要問原因,我覺得一方面是這套方法里面有很多的新名詞新概念,比如說聚合,限界上下文,值對象等等,要理解這些抽象概念本身就比較困難,所以學習和應用DDD的曲線是非常陡峭的。另一方面,做為當時唯一的“官方教材”《領域驅動設計》,閱讀這本書是一個非常痛苦的過程,在內(nèi)容組織上經(jīng)常會出現(xiàn)跳躍,所以很多人都是剛讀了幾頁就放下了。

雖然入門門檻有些高,但是對于喜歡智力挑戰(zhàn)的軟件工程師們來說,這就是一個難度稍為有一點高的玩具,所以在小范圍群體內(nèi),逐漸有一批人開始能夠掌控這個玩具,并且可以用它來指導設計能夠控制業(yè)務復雜性的軟件應用出來了。雖然那時候大部分的軟件應用都是單體的,但是使用DDD依然可以設計出來容易維護而且快速響應需求變化的單體應用出來。

?

image

到了2013年,隨著各種分布式的基礎設施逐漸成熟,而SOA架構應用在實踐中又不是那么順利,Martin Fowler和James Lewis把當時出現(xiàn)的一種新型分布式架構風潮總結成微服務架構。然后微服務這股風就呼呼的吹了起來,這時候軟件工程師們發(fā)現(xiàn)一個問題,就是雖然指導微服務架構的應用具有什么特征,但是如何把原來的大單體拆分成微服務是完全不知道怎么做了。然后熟悉DDD方法的工程師發(fā)現(xiàn),由于DDD可以有效的從業(yè)務視角對軟件系統(tǒng)進行拆解,并且DDD特別契合微服務的一個特征:圍繞業(yè)務能力構建。所以用DDD拆分出來的微服務是比較合理的而且能夠實現(xiàn)高內(nèi)聚低耦合,這樣接著微服務DDD迎來了它的第二春。

下面讓我們站在軟件工程這個大視角看看DDD究竟是在做什么。

DDD思辨

從計算機發(fā)明以來,人類用過表達世界變化的詞有:電子化,信息化,數(shù)字化。這些詞里面都有一個“化”字,代表著轉變,而這些轉變就是人類在逐漸的把原來在物理世界中的一個個概念一個個工作,遷移到虛擬的計算機世界。但是在轉變的過程中,由于兩個世界的底層邏輯以及底層語言不一致,就必須要有一個翻譯和設計的過程。這個翻譯過程從軟件誕生的第一天起就天然存在,而由于有了這個翻譯過程,業(yè)務和開發(fā)之間才總是想兩個對立的階級一樣,覺得對方是難以溝通的。

?

image

于是乎有些軟件工程界的大牛就開始思考,能不能有一種方式來減輕這個翻譯過程呢。然后就發(fā)明了面向對象語言,開始嘗試讓計算機世界有物理世界的對象概念。面向對象還不夠,這就有了DDD,DDD定義了一些基本概念,然后嘗試讓業(yè)務和開發(fā)都能夠理解這些概念名詞,然后讓領域專家使用這些概念名詞來描述業(yè)務,而由于使用了規(guī)定的概念名詞,開發(fā)就可以很好的理解領域業(yè)務,并能夠按照領域業(yè)務設計的方式進行軟件實現(xiàn)。這就是DDD的初衷:讓業(yè)務架構綁定系統(tǒng)架構。

?

image

后來發(fā)現(xiàn)這個方法不僅僅可以做好翻譯,還可以幫助業(yè)務劃分領域邊界,可以明確哪個領域是自己的核心價值所在,以后應該重點發(fā)展哪個領域。甚至可以作為組織進行戰(zhàn)略規(guī)劃的參考。而能夠做到這點,其實背后的原因是物理世界和虛擬世界的融合。

舉個例子,比如說在物理世界中要買一個商品,在沒有商品的時候我需要一個賬本來記錄有進了哪些商品,每一個訂單買了多少商品,買一個商品賺了多少錢。這些工作在計算機世界里面也應該要有商品,賬本,訂單,訂單明細這些概念,而且當我說賣出商品需要能夠從賬本中扣除庫存的時候。在計算機世界里面,就應該是訂單對象在完成以后會調(diào)用賬本對象來扣減庫存。通過這種方式,每一個業(yè)務邏輯都可以很容易地找到軟件中對應的對象來進行實現(xiàn)。

用DDD走出設計微服務拆分困境

上面介紹了使用DDD可以做到綁定業(yè)務架構和系統(tǒng)架構,這種綁定對于微服務來說有什么關系呢。所謂的微服務拆分困難,其實根本原因是不知道邊界在什么地方。而使用DDD對業(yè)務分析的時候,首先會使用聚合這個概念把關聯(lián)性強的業(yè)務概念劃分在一個邊界下,并限定聚合和聚合之間只能通過聚合根來訪問,這是第一層邊界。然后在聚合基礎之上根據(jù)業(yè)務相關性,業(yè)務變化頻率,組織結構等等約束條件來定義限界上下文,這是第二層邊界。有了這兩層邊界作為約束和限制,微服務的邊界也就清晰了,拆分微服務也就不再困難了。

?

image

而且基于DDD設計的模型中具有邊界的最小原子是聚合,聚合和聚合之間由于只通過聚合根進行關聯(lián),所以當需要把一個聚合根從一個限界上下文移動到另外一個限界上下文的時候,非常低的移動成本可以很容易地對微服務進行重構,這樣我們就不需要再糾結應不應該這樣拆分微服務?拆出的微服務太少了以后要再拆分這樣的問題了。

所以,經(jīng)過理論的嚴密推理和大量實踐項目的驗證,ThoughtWorks認為DDD是當前軟件工程業(yè)界設計微服務的最佳實踐。雖然學習和使用DDD的成本有點高,但是如果中國的企業(yè)想再軟件開發(fā)這個能力上從冷兵器時代進入熱兵器時代,就應該嘗試一下DDD了解一下先進的軟件工程方法。



作者:和堅
鏈接:https://www.jianshu.com/p/e1b32a5ee91c
來源:簡書
著作權歸作者所有。商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處。

總結

以上是生活随笔為你收集整理的为什么DDD是设计微服务的最佳实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。