<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          DDD興起的原因以及與微服務的關(guān)系

          共 3485字,需瀏覽 7分鐘

           ·

          2021-06-27 13:37


          DDD為什么能火起來?


          我們先不討論DDD的定義,先梳理一下DDD火起來的背景,根據(jù)我學習的套路,永遠是為什么為先,再是解決什么問題,是什么東西,最后如何使用。我們都知道這些年隨著設備以及技術(shù)的發(fā)展,軟件架構(gòu)發(fā)生了很多變化,從最初的單機(BS/CS)架構(gòu)到后面的集中式架構(gòu),再到如今的微服務架構(gòu),現(xiàn)在基本可以說是微服務架構(gòu)盛行的時代,DDD早在2004年就由埃里克·埃文斯提出,但一直處于一個不慍不火的狀態(tài),直到Martin Fowler的《Microservices》引起大家注意,也就是微服務盛行之后(這兒需要說明的是,微服務最早的提出者不是Martin Fowler,而是Fred George),DDD再次回到人們視野中間,為什么呢?

          我們先看一下三種技術(shù)架構(gòu)的演進以及主要區(qū)別:


          第一階段是單機架構(gòu),特征是整個開發(fā)圍繞著數(shù)據(jù)庫進行設計和開發(fā)。

          第二個階段是三層式的集中式架構(gòu),采用面向?qū)ο蟮脑O計方法,業(yè)務邏輯分業(yè)務層、邏輯層、數(shù)據(jù)訪問層,這種架構(gòu)很容易某一層或者幾層變得臃腫,擴展性較差,另外摩爾定律失效,單臺機器性能有限。

          第三層階段是微服務架構(gòu),在集中式架構(gòu)中,系統(tǒng)分析、設計和開發(fā)往往是獨立進行的,而且各個階段負責人可能不一樣,那么就涉及到交流信息丟失的問題,另外項目從分析到開發(fā)經(jīng)歷的流程很長,很容易最終開發(fā)設計與需求實現(xiàn)的不一樣,微服務主要就是解決第二階段的這些痛點,實現(xiàn)應用之間的解耦,解決單體應用擴展性的問題。


          微服務存在的問題


          進入微服務之后,解決了集中式架構(gòu)的單體應用很多問題,但是新的問題應運而生,微服務的粒度應該多大?微服務如何設計呢?微服務如何拆分?微服務邊界在哪里?

          很長時間人們都沒有解決這一問題,就連Martin Fowler在提出微服務架構(gòu)的時候也沒有告訴我們這該如何拆分微服務。

          甚至在很長的時間里人們對微服務拆分產(chǎn)生了一些誤解,有人認為:“微服務很簡單,就是將之前的單體應用拆分成多個部署包,或者將原來的單體應用架構(gòu)替換為一套支持微服務的技術(shù)架構(gòu),就算是微服務了。”還有人認為微服務應該拆分得越小越好。

          鑒于上述情形,很多項目因為前期拆分過度,導致復雜度過高,導致后期難以運維甚至難以上線。

          可以得出一個結(jié)論:微服務拆分困境產(chǎn)生的根本原因就是不知道業(yè)務或者微服務的邊界到底在什么地方。換句話說,確定了業(yè)務邊界和應用邊界,這個困境也就迎刃而解了。

          而DDD就是解決了這個確定業(yè)務邊界的問題,可見DDD并不是一種技術(shù)架構(gòu),而是一種劃分業(yè)務領域范圍的方法論。DDD的興起是由于很多熟悉領域驅(qū)動建模(DDD)的工程師在進行微服務設計時,發(fā)現(xiàn)用DDD的思路進行業(yè)務梳理可以很好規(guī)劃服務邊界,可以很好實現(xiàn)微服務內(nèi)部和外部的“高內(nèi)聚、低耦合”。于是越來越多的人將DDD作為業(yè)務劃分的指導思想。

          那么,什么是DDD呢?


          DDD概述


          通過上文的學習就可以知道DDD是一種拆解業(yè)務、劃分業(yè)務、確定業(yè)務邊界的方法,是一種高度復雜的領域設計思想,將我們的問題拆分成一個個的域,試圖分離技術(shù)實現(xiàn)的復雜性,主要解決的是軟件難以理解難以演進的問題,DDD不是一種架構(gòu),而是一種架構(gòu)方法論,目的就是將復雜問題領域簡單化,幫助我們設計出清晰的領域和邊界,可以很好的實現(xiàn)技術(shù)架構(gòu)的演進。DDD包括兩部分,戰(zhàn)略設計部分和戰(zhàn)術(shù)設計部分。

          戰(zhàn)略設計主要從業(yè)務視角出發(fā),建立業(yè)務領域模型,劃分領域邊界,建立通用語言的限界上下文,限界上下文可以作為微服務設計的參考邊界。

          戰(zhàn)術(shù)設計則從技術(shù)視角出發(fā),側(cè)重于領域模型的技術(shù)實現(xiàn),完成軟件開發(fā)和落地,包括:聚合根、實體、值對象、領域服務、應用服務和資源庫等代碼邏輯的設計和實現(xiàn)。

          DDD戰(zhàn)略設計會建立領域模型,這四個字放一起會讓人覺得很高深,其實是紙老虎,通俗來說就是模擬某個領域的的一種模型,這個模型比較抽象,但便于人們交流,舉個例子:公園有一棵桃樹,如果我們想好好研究桃樹該怎么研究?

          桃子好吃嗎?貴不貴?品種?怎么種植?種在什么地方?做成桃木劍?桃子樹葉藥用價值?

          你看,這樣研究每一個問題都很有道理,但是又很混亂,再回憶一下初中生物書上是這么研究的?

          先將植物根據(jù)大家的理解分成多個器官組成,像桃子、桃葉、桃花等等,然后將每一個器官再根據(jù)功能細分成組織,再根據(jù)這個組織中各個細胞的形態(tài)等作用分成不同的細胞,你看看這是不是一種很有條理的分析方法。


          DDD也是如此,當我們面對桃樹這種復雜的業(yè)務的時候,先根據(jù)固有的認識分成多個器官(領域),然后再在每一個領域中根據(jù)某些維度(這兒是功能)分為多個組織(聚合),而每一個組織中由很多細胞(實體)組成,這就是一種戰(zhàn)略,有哪些好處呢?可以確保我們討論的邊界,也就是討論的東西是一個領域一個維度的,對于桃樹來說,桃子、桃花、桃葉、樹干都是不同的領域,劃分不同領域的就是邊界,我們這兒叫領域邊界,當我們確定好這些領域之后,就可以確保我們討論的是同一個領域部分的東西,這樣的好處就是我們可以規(guī)定好一些概念,或者說術(shù)語,以后大家討論的時候就盡可能少的信息丟失。

          DDD戰(zhàn)略設計會建立領域模型,領域模型用來指導微服務的設計和拆分,DDD第一步要做的就是來一個頭腦風暴,可以理解成一起討論對業(yè)務的理解,主要目的就是盡可能前面不遺漏的分解我們的業(yè)務領域,就好比剛剛的桃樹,最先要做的就是盡可能多的分析,確保每一個領域都可以被關(guān)注到,在實踐中,往往會采用用例分析、場景分析和用戶旅程分析,這是一個發(fā)散的過程,頭腦風暴階段會產(chǎn)生很多實體、命令、事件等領域?qū)ο螅覀儚牟煌木S度對進行聚類形成聚合、限界上下文等邊界,建立領域模型,這是一個收斂的過程。


          具體來說,我們可以通過三步來確定領域模型和微服務邊界。

          第一步:在事件風暴中梳理業(yè)務過程中的用戶操作、事件以及外部依賴關(guān)系等,根據(jù)這些要素梳理出領域?qū)嶓w等領域?qū)ο蟆?/section>

          第二步:根據(jù)領域?qū)嶓w之間的業(yè)務關(guān)聯(lián)性,將業(yè)務緊密相關(guān)的實體進行組合形成聚合,同時確定聚合中的聚合根、值對象和實體。在這個圖里,聚合之間的邊界是第一層邊界,它們在同一個微服務實例中運行,這個邊界是邏輯邊界,所以用虛線表示。

          第三步:根據(jù)業(yè)務及語義邊界等因素,將一個或者多個聚合劃定在一個限界上下文內(nèi),形成領域模型。在這個圖里,限界上下文之間的邊界是第二層邊界,這一層邊界可能就是未來微服務的邊界,不同限界上下文內(nèi)的領域邏輯被隔離在不同的微服務實例中運行,物理上相互隔離,所以是物理邊界,邊界之間用實線來表示。

          上面除了領域、聚合、實體外還出現(xiàn)了聚合根、值對象等詞語,除此之外還有統(tǒng)一建模語言、子域、核心域、通用域、支撐域等,其實都是紙老虎,前面說過了為了方便對于某個領域的討論往往會形成一些概念,這些概念會有一些名詞概括,上面的名詞就是這么來的,這就叫統(tǒng)一建模語言,哈哈哈,好了,不扯淡,我后面的文章會解釋下這些詞語的意思,這兒主要討論DDD解決什么了問題。

          梳理一下DDD與微服務的關(guān)系,DDD是一種架構(gòu)設計方法,微服務是一種架構(gòu)風格,兩者從本質(zhì)上都是為了追求高響應力,而從業(yè)務視角去分離應用系統(tǒng)建設復雜度的手段。兩者都強調(diào)從業(yè)務出發(fā),其核心要義是強調(diào)根據(jù)業(yè)務發(fā)展,合理劃分領域邊界,持續(xù)調(diào)整現(xiàn)有架構(gòu),優(yōu)化現(xiàn)有代碼,以保持架構(gòu)和代碼的生命力,也就是我們常說的演進式架構(gòu)。DDD主要關(guān)注:從業(yè)務領域視角劃分領域邊界,構(gòu)建通用語言進行高效溝通,通過業(yè)務抽象,建立領域模型,維持業(yè)務和代碼的邏輯一致性。

          注:運行時的進程間通信、容錯和故障隔離,實現(xiàn)去中心化數(shù)據(jù)管理和去中心化服務治理,關(guān)注微服務的獨立開發(fā)、測試、構(gòu)建和部署。


          總結(jié)


          這篇文章主要研討了DDD火起來的原因,解決了什么業(yè)界難題,知道DDD主要思路,以及DDD大概的實現(xiàn)步驟等。

          留個小問題:單體應用適合DDD嗎?

          原文鏈接:https://www.cnblogs.com/Courage129/p/14839544.html

          推薦閱讀:

          世界的真實格局分析,地球人類社會底層運行原理

          企業(yè)IT技術(shù)架構(gòu)規(guī)劃方案

          論數(shù)字化轉(zhuǎn)型——轉(zhuǎn)什么,如何轉(zhuǎn)?

          企業(yè)10大管理流程圖,數(shù)字化轉(zhuǎn)型從業(yè)者必備!

          【中臺實踐】華為大數(shù)據(jù)中臺架構(gòu)分享.pdf

          華為的數(shù)字化轉(zhuǎn)型方法論

          華為如何實施數(shù)字化轉(zhuǎn)型(附PPT)

          超詳細280頁Docker實戰(zhàn)文檔!開放下載

          華為大數(shù)據(jù)解決方案(PPT)

          瀏覽 63
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产黑丝操逼 | 无码人妻精品一区二区在线 | 五月香婷婷 | 国产女人视频 | 日韩免费中文字幕A片 |