<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和微服務(wù)的關(guān)系

          共 1804字,需瀏覽 4分鐘

           ·

          2022-04-24 07:36

          眾所周知,微服務(wù)架構(gòu)能讓系統(tǒng)的開發(fā)與運(yùn)維管理變得簡(jiǎn)單高效,還能提高系統(tǒng)的可用性。隨著微服務(wù)的不斷流行,我們開始在自己的業(yè)務(wù)中落地微服務(wù)。但是當(dāng)實(shí)際執(zhí)行時(shí),我們才發(fā)現(xiàn)就算采用了微服務(wù)架構(gòu)也不能解決問題,反而帶來很多開發(fā)與運(yùn)維上的負(fù)擔(dān)。于是我們?cè)囍フ医鉀Q方案,最后發(fā)現(xiàn)其實(shí)是自己劃分微服務(wù)的方法錯(cuò)了,我們應(yīng)該用 DDD(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì))?的思想去指導(dǎo)微服務(wù)的實(shí)踐。


          軟件架構(gòu)模式的演進(jìn)



          微服務(wù)設(shè)計(jì)和拆分的困境


          1、微服務(wù)的粒度應(yīng)該多大呀?2、微服務(wù)到底應(yīng)該如何拆分和設(shè)計(jì)呢?3、微服務(wù)的邊界應(yīng)該在哪里?


          DDD核心思想是通過領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)方法定義領(lǐng)域模型,從而確定業(yè)務(wù)和應(yīng)用邊界,保證業(yè)務(wù)模型與代碼模型的一致性。


          為什么DDD適合微服務(wù)?


          DDD是一種處理高度復(fù)雜領(lǐng)域的設(shè)計(jì)思想,它試圖分離技術(shù)實(shí)現(xiàn)的復(fù)雜性,并圍繞業(yè)務(wù)概念構(gòu)建領(lǐng)域模型來控制業(yè)務(wù)的復(fù)雜性,以解決軟件難以理解,難以演進(jìn)的問題。DDD不是架構(gòu),而是一種架構(gòu)設(shè)計(jì)方法論,它通過邊界劃分將復(fù)雜業(yè)務(wù)領(lǐng)域簡(jiǎn)單化,幫我們?cè)O(shè)計(jì)出清晰的領(lǐng)域和應(yīng)用邊界,可以很容易地實(shí)現(xiàn)架構(gòu)演進(jìn)。


          DDD包括戰(zhàn)略設(shè)計(jì)和戰(zhàn)術(shù)設(shè)計(jì)兩部分。


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

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



          用三步來劃定領(lǐng)域模型和微服務(wù)的邊界


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


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


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


          DDD與微服務(wù)的關(guān)系


          DDD是一種架構(gòu)設(shè)計(jì)方法,微服務(wù)是一種架構(gòu)風(fēng)格,兩者從本質(zhì)上都是為了追求高響應(yīng)力,而從業(yè)務(wù)視角去分離應(yīng)用系統(tǒng)建設(shè)復(fù)雜度的手段。兩者都強(qiáng)調(diào)從業(yè)務(wù)出發(fā),其核心要義是強(qiáng)調(diào)根據(jù)業(yè)務(wù)發(fā)展,合理劃分領(lǐng)域邊界,持續(xù)調(diào)整現(xiàn)有架構(gòu),優(yōu)化現(xiàn)有代碼,以保持架構(gòu)和代碼的生命力,也就是我們常說的演進(jìn)式架構(gòu)。



          DDD主要關(guān)注:從業(yè)務(wù)領(lǐng)域視角劃分領(lǐng)域邊界,構(gòu)建通用語言進(jìn)行高效溝通,通過業(yè)務(wù)抽象,建立領(lǐng)域模型,維持業(yè)務(wù)和代碼的邏輯一致性。


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


          DDD不僅可以用于微服務(wù)設(shè)計(jì),還可以很好地應(yīng)用于企業(yè)中臺(tái)的設(shè)計(jì)。


          DDD可以給你帶來以下收獲:


          1. DDD是一套完整而系統(tǒng)的設(shè)計(jì)方法,它能帶給你從戰(zhàn)略設(shè)計(jì)到戰(zhàn)術(shù)設(shè)計(jì)的標(biāo)準(zhǔn)設(shè)計(jì)過程,使得你的設(shè)計(jì)思路能夠更加清晰,設(shè)計(jì)過程更加規(guī)范。

          2. DDD善于處理與領(lǐng)域相關(guān)的擁有高復(fù)雜度業(yè)務(wù)的產(chǎn)品開發(fā),通過它可以建立一個(gè)核心而穩(wěn)定的領(lǐng)域模型,有利于領(lǐng)域知識(shí)的傳遞與傳承。

          3. DDD強(qiáng)調(diào)團(tuán)隊(duì)與領(lǐng)域?qū)<业暮献?,能夠幫助你的團(tuán)隊(duì)建立一個(gè)溝通良好的氛圍,構(gòu)建一致的架構(gòu)體系。

          4. DDD的設(shè)計(jì)思想、原則與模式有助于提高你的架構(gòu)設(shè)計(jì)能力。無論是在新項(xiàng)目中設(shè)計(jì)微服務(wù),還是將系統(tǒng)從單體架構(gòu)演進(jìn)到微服務(wù),都可以遵循DDD的架構(gòu)原則。

          5. DDD不僅適用于微服務(wù),也適用于傳統(tǒng)的單體應(yīng)用。


          微服務(wù)拆分和設(shè)計(jì)


          原則上一個(gè)領(lǐng)域模型就可以設(shè)計(jì)為一個(gè)微服務(wù),但由于領(lǐng)域建模時(shí)只考慮了業(yè)務(wù)因素,沒有考慮微服務(wù)落地的技術(shù)、團(tuán)隊(duì)以及運(yùn)行環(huán)境等非業(yè)務(wù)因素,因此在微服務(wù)拆分與設(shè)計(jì)時(shí),我們不能簡(jiǎn)單地將領(lǐng)域模型作為拆分微服務(wù)的唯一標(biāo)準(zhǔn),它只是作為微服務(wù)拆分的一個(gè)重要依據(jù)。


          微服務(wù)的設(shè)計(jì)還需要考慮服務(wù)的粒度、分層、邊界劃分、依賴關(guān)系和繼承關(guān)系。除了考慮業(yè)務(wù)職責(zé)單一外,我們還需要考慮將敏態(tài)與穩(wěn)態(tài)業(yè)務(wù)的分離、非功能性需求(如彈性伸縮要求、安全性等要求)、團(tuán)隊(duì)組織和溝通效率、軟件包大小以及技術(shù)異構(gòu)等非業(yè)務(wù)因素。



          瀏覽 31
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  操逼视频免费无码 | 欧美精品一一色哟哟 | 伊人视频网站 | 五月丁香中文字幕成人网在线 | 高清无码免费视频在线 |