日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

去哪兒網(wǎng)架構(gòu)演進之路:微服務的盡頭原來是DDD……

來源: 責編: 時間:2023-10-13 14:38:05 277觀看
導讀一、架構(gòu)設計理念與技術(shù)1.架構(gòu)演變路徑圖片單體(又稱巨石系統(tǒng)):所有業(yè)務融合于一體。在項目早期,公司一般會選擇單體以降低運營等各方面成本。服務化:隨著業(yè)務飛速發(fā)展和流量增長,進入了服務化階段。在此階段,經(jīng)歷服務拆分、

一、架構(gòu)設計理念與技術(shù)

1.架構(gòu)演變路徑

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

  • 單體(又稱巨石系統(tǒng)):所有業(yè)務融合于一體。在項目早期,公司一般會選擇單體以降低運營等各方面成本。
  • 服務化:隨著業(yè)務飛速發(fā)展和流量增長,進入了服務化階段。在此階段,經(jīng)歷服務拆分、治理和模型抽象。
  • 平臺化:業(yè)務膨脹期過后,服務化維護成本高,服務粒度拆分過細、重復造輪子、系統(tǒng)交互混亂等問題暴露,因此邁向平臺化(服務能力沉淀、服務合并、領域自治等)。
  • 中臺化:打造企業(yè)級能力復用平臺,是平臺化的下一站,其具備數(shù)據(jù)互通能力和業(yè)務變化高響應力。

業(yè)務架構(gòu)的演變路徑,側(cè)面展現(xiàn)所在互聯(lián)網(wǎng)企業(yè)的演變路徑。每一種架構(gòu)無關好壞,選擇與否,只取決于是否適合當下及可預見的未來。uwO28資訊網(wǎng)——每日最新資訊28at.com

本次分享主要介紹從服務化到平臺化的過程,即從服務細粒度到領域能力沉淀的演進過程。uwO28資訊網(wǎng)——每日最新資訊28at.com

2.架構(gòu)設計理念

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

從業(yè)務出發(fā)、面向業(yè)務變化是架構(gòu)設計成功的關鍵,指導業(yè)務架構(gòu)設計的維度包括:uwO28資訊網(wǎng)——每日最新資訊28at.com

1)商業(yè)模式及成熟度

傳統(tǒng)行業(yè)的業(yè)務相對穩(wěn)定和成熟,非必要情況下建議做成單一服務。如需拆分,建議將變化頻繁與不頻繁的業(yè)務拆分。uwO28資訊網(wǎng)——每日最新資訊28at.com

互聯(lián)網(wǎng)行業(yè)則分為初創(chuàng)公司與成熟穩(wěn)定的公司:uwO28資訊網(wǎng)——每日最新資訊28at.com

  • 初創(chuàng)、商業(yè)不穩(wěn)定的公司:需要多種業(yè)務進行快速試錯,可使用微服務。以微小的單體制服務器,快速構(gòu)造探索場景,以技術(shù)的確定性來應對未來發(fā)展的不確定性。去哪兒網(wǎng)的某些團隊產(chǎn)生簡單方案后,可使用微服務獲取市場反響,快速驗證效果。
  • 商業(yè)穩(wěn)定或固化的公司:不再需要技術(shù)端的靈活性,也不愿承擔靈活性帶來的架構(gòu)維護成本,此時可以考慮合并微服務,以減少運營成本。

目前旅游行業(yè)已相對穩(wěn)定,去哪兒網(wǎng)比較符合以上第二種情況,可以考慮將先前拆分粒度太細的微服務進行合并。這也是去哪兒網(wǎng)的架構(gòu)演進原因之一,原有業(yè)務拆分太細,達到人均10個應用,維護成本極高。uwO28資訊網(wǎng)——每日最新資訊28at.com

2)面向業(yè)務的變化

  • 組件設計圍繞業(yè)務變化
  • 組件調(diào)用非強依賴
  • 組件業(yè)務復用
  • 組件顆粒度與成熟度

為快速適應業(yè)務變化,需識別業(yè)務核心問題,劃清業(yè)務邊界,達到業(yè)務組件的復用最大化;區(qū)別出變與不變的業(yè)務,將變化隔離在一定范圍內(nèi),進而減少變化。uwO28資訊網(wǎng)——每日最新資訊28at.com

面向業(yè)務變化與不變的情況下,組件顆粒度要拆分到什么程度?uwO28資訊網(wǎng)——每日最新資訊28at.com

組件拆分粒度過細時,可復用性強,但組裝麻煩;拆分粒度過大時,好用,但使用場景比較少。uwO28資訊網(wǎng)——每日最新資訊28at.com

3)技術(shù)延遲決策

《架構(gòu)整潔之道》一書講到:“良好的架構(gòu)設計應該只關注用例,并能將他們與其他的周邊因素隔離?!鼻捌趹撝魂P注用例,在后期決策使用的具體技術(shù)。uwO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

4)康威和逆康威定律

  • 康威定律:產(chǎn)品必然是其組織溝通結(jié)構(gòu)的縮影。系統(tǒng)設計本質(zhì)上反映了企業(yè)的組織架構(gòu),系統(tǒng)各模塊之間的接口,反映了企業(yè)各部門之間信息流動和合作的方式。
  • 逆康威定律:當前組織效率不夠高時,可優(yōu)先進行系統(tǒng)設計,通過系統(tǒng)設計來演進后續(xù)的組織架構(gòu)。去哪兒網(wǎng)在2021年實行對內(nèi)DDD對外API的戰(zhàn)略,對團隊和職責進行合理劃分,這是逆康威定律的實例之一。

5)面向測試、運維

測試是保證系統(tǒng)質(zhì)量的重要途徑,使用TDD驗證架構(gòu)是否合理、是否可以隔離、測試性好不好。uwO28資訊網(wǎng)——每日最新資訊28at.com

6)軟件質(zhì)量屬性

在運行期和開發(fā)期,軟件質(zhì)量屬性體現(xiàn)為可用性、可修改性、性能、安全性、易用性等。以功能性為主進行架構(gòu)設計,以質(zhì)量屬性為依據(jù)進行增量式迭代重構(gòu)和優(yōu)化。uwO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

上圖是架構(gòu)的一些關鍵技術(shù),這張圖的粒度較粗。從下往上看,公司底層基本都由容器與自動化支撐,上層是監(jiān)控和治理、前后端分離的系統(tǒng)?;诖藞D,DDD是整個架構(gòu)的指導思想。uwO28資訊網(wǎng)——每日最新資訊28at.com

二、業(yè)務系統(tǒng)重構(gòu)背景

1.業(yè)務介紹:酒店基礎信息

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

上列四張圖簡單展示了去哪兒網(wǎng)本次重構(gòu)的主題,也是酒店基礎信息部所負責的業(yè)務。uwO28資訊網(wǎng)——每日最新資訊28at.com

  • 列表頁:用戶打開APP,填寫地址與入住時間,點擊搜索,就會跳轉(zhuǎn)到列表頁,可以看到搜索地點的所有酒店列表信息。
  • 詳情頁:點擊希望入住的酒店,即可進入詳情頁。
  • 酒店Info:點擊酒店名字,則可進入酒店Info頁。
  • 進訂頁:用戶決定預定酒店房間后,就跳轉(zhuǎn)到進訂頁。

2.基礎信息業(yè)務架構(gòu)

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

上圖是酒店基礎信息業(yè)務對應的架構(gòu)。去哪兒網(wǎng)售賣的酒店,來源于各個代理商和集團分銷的信息,按照圖示自下到上,經(jīng)過基礎層,然后到達基礎信息部門的主要業(yè)務層。uwO28資訊網(wǎng)——每日最新資訊28at.com

業(yè)務層最重要的內(nèi)容是酒店聚合,包括代理商酒店Tree和Q物理酒店。我們將各個代理商提供的酒店信息,按照一定業(yè)務邏輯規(guī)則,聚合到去哪兒網(wǎng)的Q側(cè)物理酒店,將此部分信息對外售賣,從而提升用戶體驗。uwO28資訊網(wǎng)——每日最新資訊28at.com

為什么能夠提升用戶體驗?

舉個例子,比如現(xiàn)在投放的是季楓酒店,A代理商將其稱為季楓酒店北京店,B代理商將其稱為季楓酒店北京中關村店,C代理商稱之為季楓酒店北京中關村蘇州街店,用戶容易混淆。所以去哪兒網(wǎng)將各個代理商提供的酒店信息,按照一定的業(yè)務邏輯、規(guī)則聚合為外網(wǎng)能夠看到的、唯一的物理酒店。uwO28資訊網(wǎng)——每日最新資訊28at.com

酒店Tree的含義是,每個代理商投放的酒店,映射到去哪兒網(wǎng)的酒店,以去哪兒網(wǎng)的酒店為樹根,下方掛靠不同代理商投放的酒店信息,形成對應關系。uwO28資訊網(wǎng)——每日最新資訊28at.com

當前我們團隊的核心業(yè)務是,將基于業(yè)務層的酒店信息,提供給應用層,比如提供APP搜索或篩選下展示的信息。uwO28資訊網(wǎng)——每日最新資訊28at.com

3.落地技術(shù)中心戰(zhàn)略,償還技術(shù)債務

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

旅游行業(yè)應該是受疫情影響最大的行業(yè)之一,在此背景下,技術(shù)中心在2022年提出“鞏固效率之本,分擔產(chǎn)品之憂”的戰(zhàn)略,自此開啟DDD重構(gòu)之路。uwO28資訊網(wǎng)——每日最新資訊28at.com

如上圖,重構(gòu)前,業(yè)務和業(yè)務架構(gòu)存在以下問題:uwO28資訊網(wǎng)——每日最新資訊28at.com

  • 核心業(yè)務分散:上圖的灰色條塊是我們的核心業(yè)務,被耦合于整條鏈路,分散在各個系統(tǒng)中,導致核心業(yè)務入侵。
  • 核心業(yè)務入侵:產(chǎn)品需求交付效率低下,一個產(chǎn)品需求可能需要調(diào)整5個微服務。
  • 數(shù)據(jù)寫入鏈路長:沒有對核心業(yè)務的收口能力,數(shù)據(jù)更新不及時。由于沒有實時查詢能力,別的團隊調(diào)用數(shù)據(jù)時,需拉取并自行緩存。

4.系統(tǒng)重構(gòu)模式選擇

沒有最好的架構(gòu),只有最合適的架構(gòu)。以下是備選的系統(tǒng)重構(gòu)模式:uwO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

  • 修繕者:在現(xiàn)有系統(tǒng)的基礎上,新增一個抽象層,保證對外提供能力不變,然后對系統(tǒng)內(nèi)部進行改造。
  • 絞殺者:修繕沒有辦法適應現(xiàn)狀的情況下,需要另起爐灶,在系統(tǒng)以外重新構(gòu)建新功能,逐步剝離原有邏輯。對外提供新功能,逐步絞殺各個需要下線或重構(gòu)的服務。重構(gòu)時需要權(quán)衡絞殺者的優(yōu)缺點。
  • 優(yōu)點:不影響原有業(yè)務,一旦條件成熟,新系統(tǒng)可以完全替換舊系統(tǒng)。
  • 缺點:一段時間內(nèi)需要維護兩套系統(tǒng),付出額外的開發(fā)維護成本。
  • 演進式:老項目的邏輯已經(jīng)模糊,需要進行演進式迭代。識別老系統(tǒng)中的核心業(yè)務邏輯,從MVP版本開始小步快跑,先迭代核心業(yè)務,快速上線查看效果,然后將剩下的邊緣業(yè)務逐漸切換過來,及時調(diào)整。
  • 優(yōu)點:有效控制迭代風險,避免全部替換系統(tǒng),造成難以估量的影響。

三、系統(tǒng)重構(gòu)改造模式與架構(gòu)選擇

前文講解了架構(gòu)的演變路徑、理念及改造模式的選擇,最終衍生出來的系統(tǒng)重構(gòu)框架是什么樣子?uwO28資訊網(wǎng)——每日最新資訊28at.com

1.系統(tǒng)重構(gòu)模式選擇

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

從業(yè)務出發(fā)、面向業(yè)務變化是我們現(xiàn)代架構(gòu)設計成功的關鍵,DDD的設計思想完全符合成功架構(gòu)設計的理念。uwO28資訊網(wǎng)——每日最新資訊28at.com

1)服務業(yè)務戰(zhàn)略

站在EA(企業(yè)架構(gòu))角度(包括業(yè)務架構(gòu)BA、應用架構(gòu)AA、數(shù)據(jù)架構(gòu)DA、技術(shù)架構(gòu)TA),DDD可以綁定業(yè)務架構(gòu)和應用架構(gòu),將問題域與應用架構(gòu)相剝離;通過DDD將業(yè)務架構(gòu)的“價值流+業(yè)務能力”進行解構(gòu)化分解,能力下沉。同時依據(jù)DDD劃分的限界上下文、聚合,進行應用架構(gòu)的搭建,實現(xiàn)自下而上的“高內(nèi)聚、低耦合”的應用。uwO28資訊網(wǎng)——每日最新資訊28at.com

2)演進式架構(gòu)

DDD的核心思想有哪些:uwO28資訊網(wǎng)——每日最新資訊28at.com

  • 戰(zhàn)略層面:業(yè)務問題分析→分解子問題域,識別核心域→分而治之,降低業(yè)務復雜度;
  • 戰(zhàn)術(shù)層面:識別問題域的不同業(yè)務上下文→領域建模,定義聚合,組件化業(yè)務需求→指導微服務的拆分;
  • 實現(xiàn)層面:利用成熟的分層模式、依賴倒置屏蔽掉技術(shù)細節(jié)復雜度,通過DDD方法設計的微服務,不僅可以通過限界上下文和聚合實現(xiàn)微服務內(nèi)外的解耦,同時也可以很容易地實現(xiàn)業(yè)務功能積木式模塊的重組和更新,從而實現(xiàn)架構(gòu)演進。

總之,自上而下地拆解業(yè)務,并以此為指導,自下而上地構(gòu)建模型,最終達到高內(nèi)聚低耦合的狀態(tài)。uwO28資訊網(wǎng)——每日最新資訊28at.com

我們選擇絞殺模式和演進模式,進行系統(tǒng)重構(gòu)。由于系統(tǒng)復雜程度高、了解業(yè)務細節(jié)的同學少,為了減少重構(gòu)對現(xiàn)有業(yè)務的影響,我們將核心資源投入到核心業(yè)務中,快速上線以便查看效果,下文將具體介紹演進實踐。uwO28資訊網(wǎng)——每日最新資訊28at.com

四、以業(yè)務驅(qū)動的微服務架構(gòu)演進實踐

1. 領域驅(qū)動設計過程

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

上圖是以業(yè)務驅(qū)動的微服務架構(gòu)演進的實戰(zhàn)過程,介紹DDD的完整流程和關鍵路徑。進行領域驅(qū)動設計時,需要對組內(nèi)成員進行定位。最重要的是識別領域?qū)<?,即哪些人對該領域認知深刻,能夠幫助成員深入理解業(yè)務,有利于后續(xù)腦暴和建模過程順利進行;其次是識別技術(shù)專家和開發(fā)團隊。uwO28資訊網(wǎng)——每日最新資訊28at.com

領域驅(qū)動設計的關鍵路徑如下:uwO28資訊網(wǎng)——每日最新資訊28at.com

第一步,領域?qū)<液烷_發(fā)團隊就具體問題,明確業(yè)務愿景,討論需求,從而建立統(tǒng)一語言,形成領域知識。統(tǒng)一語言,即對問題域內(nèi)的概念統(tǒng)一認知,比如大家明確某個詞語的定義且沒有歧義,大大降低交流成本。uwO28資訊網(wǎng)——每日最新資訊28at.com

第二步,分析問題域并劃分子域(比如核心子域、支撐子域、通用子域),進而劃分限界上下文,構(gòu)建上下文地圖。uwO28資訊網(wǎng)——每日最新資訊28at.com

第三步,領域建模并實現(xiàn)模型。將以上兩步分析,投射到代碼層面進行模型實現(xiàn),這一步驟可總結(jié)為“兩關聯(lián)一循環(huán)”?!皟申P聯(lián)”是指,統(tǒng)一語言和模型相關聯(lián)、模型與軟件實踐相關聯(lián)?!耙谎h(huán)”是指,實踐過程可能經(jīng)歷種種困難與不確定性,需要在不斷循環(huán)的過程中提煉知識,最終得到趨向完美的模型。uwO28資訊網(wǎng)——每日最新資訊28at.com

2.基于DDD落地實踐

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

上圖展示了基于DDD落地實踐的過程。首先是定位愿景,其重要性在于決定了后續(xù)的發(fā)展道路;其次,分析問題域中現(xiàn)有業(yè)務場景;然后基于劃分的子域,識別限界上下文;最后在限界內(nèi)進行領域建模、實現(xiàn)模型。uwO28資訊網(wǎng)——每日最新資訊28at.com

1)問題域分析

① 定位愿景

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

麥肯錫提出“電梯演講”概念是指,在乘坐電梯的30秒之內(nèi),向顧客清晰準確地解釋解決方案,即使用簡短的語言精準說明業(yè)務價值。比如,去哪兒網(wǎng)的核心價值是“總有你要的低價”。因此,所有的核心工作都要圍繞低價展開,落實到基礎信息團隊,我們的愿景就是提供多樣的信息聚合。uwO28資訊網(wǎng)——每日最新資訊28at.com

② 明確領域?qū)<?/h5>

由于產(chǎn)品迭代頻繁,系統(tǒng)演進缺少領域?qū)<遥园凑债a(chǎn)品、QA、技術(shù)人員的順位確定領域?qū)<摇?span style="display:none">uwO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

為剖析原有項目中,哪些用戶用例與愿景強相關,我們整理用例圖并安排同學逐一分析。由此發(fā)現(xiàn),經(jīng)過多年迭代,很多業(yè)務已經(jīng)不再使用,舊業(yè)務無法適應現(xiàn)有商業(yè)模式。所以我們將此類業(yè)務下線,或轉(zhuǎn)投資源,最終將188個用例減少為79個用例,極大簡化工作內(nèi)容。uwO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

③ 事件風暴

事件風暴主要關注三件事:識別領域事件、識別決策命令、識別領域名詞。uwO28資訊網(wǎng)——每日最新資訊28at.com

事件風暴的輸出,將作為后續(xù)領域建模的輸入,需要遵循以下原則:uwO28資訊網(wǎng)——每日最新資訊28at.com

  • 業(yè)務視角事件:從業(yè)務視角分析領域事件,比如,某個業(yè)務動作對內(nèi)產(chǎn)生某種數(shù)據(jù),觸發(fā)業(yè)務流程狀態(tài)變化,對外發(fā)送消息。技術(shù)人員進行頭腦風暴時,很容易陷入代碼細節(jié),忘記最初目的。
  • 先發(fā)散,再收斂:先將所有想法羅列出來,在此基礎上再進行收斂。
  • 決策命令:哪些人做了哪些動作導致了事件產(chǎn)生。
④ 統(tǒng)一語言

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

沒有DDD經(jīng)驗的同學可能會問,什么可以作為統(tǒng)一語言?uwO28資訊網(wǎng)——每日最新資訊28at.com

答案是,什么都可以作為團隊的統(tǒng)一語言。比如,一個老系統(tǒng)的內(nèi)部邏輯特別復雜難懂,這部分代碼的重構(gòu)代價大,難以改動,就可以作為團隊內(nèi)部的統(tǒng)一語言。由此,產(chǎn)品和技術(shù)同學都知道老系統(tǒng)的目標、能力及應對態(tài)度。uwO28資訊網(wǎng)——每日最新資訊28at.com

技術(shù)同學表達事情的思維,偏向代碼邏輯,導致和產(chǎn)品同學溝通存在偏差。此時,統(tǒng)一語言可以拉齊雙方認知,技術(shù)同學只要拋出幾個領域名詞,產(chǎn)品同學即可理解。uwO28資訊網(wǎng)——每日最新資訊28at.com

需要注意的是,統(tǒng)一語言的術(shù)語表應具備中英文對照,便于后期編解碼時,在代碼層面達成認知統(tǒng)一。uwO28資訊網(wǎng)——每日最新資訊28at.com

2)識別限界及子域劃分

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

識別限界上下文的總體原則是先業(yè)務后技術(shù),上圖展示了領域?qū)用娴膭澐至鞒獭?span style="display:none">uwO28資訊網(wǎng)——每日最新資訊28at.com

  • 降低業(yè)務復雜度:業(yè)務層面,需要杜絕語言的二義性。比如,在去哪兒網(wǎng)內(nèi)部,商務同學、技術(shù)同學可能對“酒店”一詞的認知不同,限界上下文時就要避免這種情況。
  • 降低管理復雜度:基于領域?qū)觿澐值臉I(yè)務邊界,影響工作邊界的劃分。上文提到的康威定律以及著名的兩個披薩原則(一個高效的技術(shù)研發(fā)團隊,最佳的團隊規(guī)模應該控制在2個披薩就可以吃飽的人數(shù)),都對工作邊界具有指導意義。
  • 降低技術(shù)復雜度:限界上下文承接的流量不同,我們通過制作彈性邊界、部署及可用性測試,使用不同方式對待不同的限界上下文。

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

限界上下文的特征:uwO28資訊網(wǎng)——每日最新資訊28at.com

  • 最小完備原則:自治單位履行的職責是完整的,無需求助其他自治單位獲取自己的信息。
  • 自我履約原則:自治單元自身決定職責。比如,進行代理商酒店的抓取落地時,無需進行后續(xù)解析。
  • 穩(wěn)定空間原則:外部變化不會影響自治單元。
  • 獨立進化原則:對外提供穩(wěn)定接口,內(nèi)部變化不影響外部。

繪制上下文依賴地圖時,謹記三不原則:不要雙向依賴、不要循環(huán)依賴、不要過長依賴。uwO28資訊網(wǎng)——每日最新資訊28at.com

如上右圖所示,我們在制作上下文依賴地圖時發(fā)現(xiàn),酒店解析依賴酒店抓取,酒店抓取依賴酒店聚合信息,酒店聚合信息依賴靜態(tài)信息,靜態(tài)信息依賴酒店解析出來的數(shù)據(jù),形成循環(huán),所以劃分方式不合適?;谶@種情況,創(chuàng)造出“酒店上下文”環(huán)節(jié),打破循環(huán)依賴。uwO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

在限界上下文后,需要識別核心域、支撐域和通用域,劃分參考是與業(yè)務愿景的相關性。識別子域的好處是,對外可以明確告知自身核心競爭力;對內(nèi)明晰人員的資源分配、機器資源分配,評估產(chǎn)品需求的優(yōu)先級、是否位于核心領域內(nèi)。uwO28資訊網(wǎng)——每日最新資訊28at.com

3)領域建模

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

依據(jù)事件風暴和限界上下文的輸出,可以構(gòu)建領域模型。uwO28資訊網(wǎng)——每日最新資訊28at.com

① 建模意義
  • 聚合來表達業(yè)務“高內(nèi)聚,低耦合”
  • 降低業(yè)務復雜度,更好地適應業(yè)務變化
② 建模過程
  • 識別實體、值對象、豐富領域邏輯
  • 定義聚合、識別聚合根

建模過程中最難把握的是尺度,哪些方法應該加入模型,屬性應該放在哪個模型。個人建議是共識即正確,無論是否正確,組內(nèi)達成共識,這個決策在當下就是正確的。因為建模是循環(huán)提煉的過程,隨著后續(xù)深化業(yè)務理解,推翻之前結(jié)論、一次性創(chuàng)建完美模型的難度較大。uwO28資訊網(wǎng)——每日最新資訊28at.com

分層架構(gòu)中具有領域?qū)雍蜆I(yè)務層,如果將功能和用例盲目加入領域?qū)樱I域?qū)优蛎洉绊憦陀眯院蜆I(yè)務表達力。所以,要承認模型和領域能力的不確定性,循序漸進地使用迭代方式,將能力下沉到領域模型中。uwO28資訊網(wǎng)——每日最新資訊28at.com

③ 建模原則
  • 重點關注核心域建模:投入核心資源
  • 聚合盡量小,適應業(yè)務變化
  • 聚合邊界內(nèi)強一致性
  • 抽象模型,防止過多屬性拍平(DP):屬性被拍平的弊端是,模型內(nèi)字段太多,無法識別識別模型。

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

上圖展示了兩個原則:共性的業(yè)務能力優(yōu)先下沉到領域,共性的技術(shù)問題抽象成業(yè)務。uwO28資訊網(wǎng)——每日最新資訊28at.com

沒有完美的模型,也沒有正確的模型,領域模型共識即正確,所以團隊的綜合能力決定了模型完美程度的上限。提供一個可參考的檢驗技巧,建完模型后,可以用業(yè)務場景檢驗模型的完整度。隨之循環(huán)往復,模型也會越發(fā)完善。uwO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

④ 落地實踐時劃分微服務uwO28資訊網(wǎng)——每日最新資訊28at.com

如上所示,業(yè)務邊界、康威定律、業(yè)務變更頻率、彈性邊界、技術(shù)選型等,都可作為劃分依據(jù)。uwO28資訊網(wǎng)——每日最新資訊28at.com

需要注意的是,一個微服務可包含多個限界上下文,但只能包含一種子域類型(核心、通用、支撐),不能將一個核心域和一個支撐域放在同一微服務中。如果支撐域可用性不好,影響核心邏輯,就可能為這個不太重要的問題付出沉重代價。uwO28資訊網(wǎng)——每日最新資訊28at.com

4)模型實現(xiàn)

① 業(yè)務流程和領域模型映射

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

如上所示,業(yè)務流程或業(yè)務用例被分為不同階段,每個階段又被分為不同活動,我們將這些業(yè)務活動與整個分層架構(gòu)聯(lián)系起來,構(gòu)建映射關系。uwO28資訊網(wǎng)——每日最新資訊28at.com

構(gòu)建映射關系的好處是,在分層架構(gòu)和領域模型高度內(nèi)聚、完善的情況下,方便后續(xù)需求接入和擴展。自上而下分解業(yè)務流程,分層映射,隔離技術(shù)負責度。uwO28資訊網(wǎng)——每日最新資訊28at.com

② 模型映射代碼清單

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

如上圖,應用層、領域?qū)?、基礎設施層是聚合領域?qū)ο?,模型映射代碼清單劃分了每一層具備能力、領域?qū)拥念I域?qū)ο?、是否具有前置依賴對象,包名、類名及方法名,這些內(nèi)容與上文提到的中英文對照表一一對應。uwO28資訊網(wǎng)——每日最新資訊28at.com

構(gòu)建這份代碼清單,便于達成組內(nèi)多人合作,提高開發(fā)效率;為新人熟悉項目時提供參考,快速說明項目的核心邏輯與能力。uwO28資訊網(wǎng)——每日最新資訊28at.com

③ COLA應用架構(gòu)

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

在代碼開發(fā)階段,我們選擇了開源框架COLA,其分層架構(gòu)分為適配層、領域?qū)?、應用層、基礎設施層。uwO28資訊網(wǎng)——每日最新資訊28at.com

無論是COLA還是DDD的分層架構(gòu),都以業(yè)務為核心,基于穩(wěn)定的領域模型,對外提供領域能力。uwO28資訊網(wǎng)——每日最新資訊28at.com

選擇COLA的原因如下:uwO28資訊網(wǎng)——每日最新資訊28at.com

  • 定義良好的分層結(jié)構(gòu)、規(guī)范;
  • 層內(nèi)部結(jié)構(gòu)“聚合分包,功能分類”;
  • 提供最佳應用架構(gòu)的最佳實踐:《領域驅(qū)動設計》一書只提供思想指導,而COLA給出了可參考的模板。

下圖是我們內(nèi)部基于COLA架構(gòu)落地微服務的實踐。uwO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

  • Adaptor:多端適配
  • Client:業(yè)務提供的接口,比如Dubbo
  • APP:業(yè)務用例Case的編排,含executor、publish、qschedule等
  • Domain(聚合、實體、值對象的定義):
  • 業(yè)務規(guī)則顯示化,包括邏輯判斷,和對象設值代表的含義,純內(nèi)存操作
  • Entity解決單個對象的邏輯變更,領域服務解決多對象的業(yè)務邏輯變更
  • 不允許跨聚合調(diào)用
  • 充血模型
  • Insfrastructure:Repisitory實現(xiàn);ACL的定義和實現(xiàn)
  • Common:公共屬性、工具類,由domain調(diào)用  

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

上圖是對前一張圖的具體描述,我們使用的是CQRS模式,即命令查詢職責分離。uwO28資訊網(wǎng)——每日最新資訊28at.com

前文的一張圖描述了架構(gòu)重構(gòu)前的狀況:核心業(yè)務滲透到各個服務中,沒有做收攏聚合,業(yè)務耦合。而通過限界劃分、領域建模,即可實行分離。uwO28資訊網(wǎng)——每日最新資訊28at.com

基礎設施層實現(xiàn)了依賴倒置,即基礎設施層依賴領域?qū)?,由此無需關心領域?qū)邮褂肊S還是Redis進行存儲,可專注于領域能力。uwO28資訊網(wǎng)——每日最新資訊28at.com

重構(gòu)前,沒有提供實時查詢的能力,各個團隊將數(shù)據(jù)拉走,進行本地緩存。重構(gòu)后,基于異步調(diào)用機制,實現(xiàn)數(shù)據(jù)持久化,對外提供查詢。uwO28資訊網(wǎng)——每日最新資訊28at.com

④ 領域模型與代碼模型映射

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

上圖是領域模型與代碼模型的映射。分層對應上一張圖展現(xiàn)的架構(gòu),在Domain層,按照領域劃分進行聚合分包。上圖標藍的Hoteltree就是前文提到的酒店聚合,在這一領域內(nèi)進行功能劃分。uwO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

Domain Primitive 是 Value Object 的進階版,在原始 VO 的基礎上要求每個DP擁有概念的整體,而不僅僅是值對象。在 VO 的 Immutable 基礎上增加了 Validity 和行為。uwO28資訊網(wǎng)——每日最新資訊28at.com

DP特征:uwO28資訊網(wǎng)——每日最新資訊28at.com

  • 擁有完整的概念整體,精準定義
  • 使用業(yè)務域中的原生語言
  • 業(yè)務域的最小組成部分,可構(gòu)建復雜合
  • 隱式轉(zhuǎn)顯式

例如,聯(lián)系信息對外顯示為電話號碼,背后隱藏了區(qū)號、國內(nèi)外來源等隱式屬性。通過DP可以找出隱式屬性,并將其轉(zhuǎn)為顯式,這是我們推薦DP的重要原因之一。uwO28資訊網(wǎng)——每日最新資訊28at.com

五、總結(jié)和思考

1.項目落地效果

1)組織效率

  • 組織資源是否集中在了核心業(yè)務領域;
  • 是否能用統(tǒng)一語言溝通描述業(yè)務,表現(xiàn)在需求評審、站會等有關會議的效率上;
  • 領域知識是否得到沉淀,是否有人能承擔“領域?qū)<摇保?/li>
  • 團隊間職責模糊地帶少,相互扯皮的機會少。

2)開發(fā)效率

  • 模塊粒度是否合適、模塊間依賴是否健康;
  • 接口數(shù)量是否穩(wěn)定,不膨脹;
  • 因為功能理解不足引起的bug數(shù)量是否低;
  • 模塊和接口的自測性程度高不高;
  • 代碼可讀性,人員交接和新人上手是否足夠快。

3)鞏固效率之本,分擔產(chǎn)品之憂

  • 清晰領域,核心子域重點投入;
  • 統(tǒng)一語言,減少產(chǎn)運研測溝通成本,增加2名研發(fā)業(yè)務專家;
  • 承接產(chǎn)品需求75%,助力0.5PM;
  • 21個應用微服務,通過DDD領域劃分后下降到13個,微服務減少33%;
  • 開發(fā)工時3pd以下產(chǎn)品響應效率提升52.3%,3pd以上32.5%,QA工時下降62.3%;
  • 架構(gòu)、聚合分層,功能分類,新人上手快。

2.思維模型改變

圖片圖片uwO28資訊網(wǎng)——每日最新資訊28at.com

技術(shù)人員從被動了解業(yè)務,到主動了解業(yè)務,解讀業(yè)務策略變化,為其定義測量,提議數(shù)字化方案。產(chǎn)品經(jīng)歷的核心價值是成為技術(shù)與業(yè)務連接的橋梁,但通過DDD,技術(shù)同學也更關注業(yè)務,真正做到產(chǎn)研融合。uwO28資訊網(wǎng)——每日最新資訊28at.com

1)問題域分析領域建模

  • 分治思維
  • 模型思維
  • 抽象思維
  • 結(jié)構(gòu)化思維

2)模型實現(xiàn)

  • 簡單思維
  • 契約思維
  • 解耦思維

3.DDD帶來的優(yōu)劣勢及建議

1)優(yōu)勢

  • 隱性知識顯性化,統(tǒng)一團隊語言
  • 圍繞業(yè)務變化,隔離“變化”
  • 積木式組合業(yè)務演進
  • 關注點分離,隔離技術(shù)細節(jié)
  • 面向測試、運維
  • 業(yè)務思維(主動向前看業(yè)務,主動提想法,0.5PM)

2)劣勢

  • 團隊上手有門檻(概念-理解-困惑-深入理解)

3)使用建議

  • 業(yè)務場景復雜
  • 業(yè)務變化頻繁
  • 重點核心業(yè)務領域
  • 可部分取用(分層思想、聚合、限界、架構(gòu)設計、解耦思維等)
  • 團隊共識即正確    

業(yè)務架構(gòu)是領域,技術(shù)架構(gòu)是容器,脫離靈魂的容器是沒有技術(shù)意義的。uwO28資訊網(wǎng)——每日最新資訊28at.com

Q&A

Q1:DDD重構(gòu)時,如何協(xié)調(diào)產(chǎn)品上線需求的矛盾?

A1:首先,我們進行DDD重構(gòu)的時候,背靠公司技術(shù)中心的戰(zhàn)略,公司是鼓勵和倡導的;其次,重構(gòu)模式包括修繕者、絞殺者、演進式。面臨與產(chǎn)品上線需求的矛盾時,我們可以選擇絞殺者,另起爐灶來優(yōu)化重構(gòu),在原有業(yè)務中也不影響產(chǎn)品新需求接入。uwO28資訊網(wǎng)——每日最新資訊28at.com

Q2:選擇COLA架構(gòu)作為DDD重構(gòu)業(yè)務模型的原因是什么?

A2:首先,COLA是阿里開源的,大廠背書,信任度較高;其次,COLA具備很好的分層架構(gòu)和規(guī)范,項目Github中提供了最佳實踐。如果初期不清楚如何進行重構(gòu),可以直接參考官方demo,將其映射到自己的業(yè)務中,后期再加入自身見解,進行系統(tǒng)優(yōu)化。uwO28資訊網(wǎng)——每日最新資訊28at.com

作者介紹

李全黨,2021 年加入去哪兒網(wǎng),擔任酒店供應鏈代理商和基礎信息業(yè)務負責人、業(yè)務架構(gòu)SIG成員,擁有 10 年以上系統(tǒng)研發(fā)和軟件架構(gòu)設計經(jīng)驗主導搭建多個 DDD 項目,有高并發(fā)、分布式服務、高可用的建設優(yōu)化經(jīng)驗。uwO28資訊網(wǎng)——每日最新資訊28at.com

朱浩曼,2021年9月加入去哪兒網(wǎng),擔任標準代理商業(yè)務負責人、業(yè)務架構(gòu)SIG成員。uwO28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-13361-0.html去哪兒網(wǎng)架構(gòu)演進之路:微服務的盡頭原來是DDD……

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 讓CSS官方后悔的一些決定

下一篇: Go 語言切片擴容規(guī)則是擴容2倍?1.25倍?到底幾倍

標簽:
  • 熱門焦點
  • iPhone賣不動了!蘋果股價創(chuàng)年內(nèi)最大日跌幅:市值一夜蒸發(fā)萬億元

    8月5日消息,今天凌晨美股三大指數(shù)高開低走集體收跌,道指跌0.41%;納指跌0.36%;標普500指數(shù)跌0.52%。熱門科技股也都變化極大,其中蘋果報181.99美元,跌4.8%,創(chuàng)
  • K6:面向開發(fā)人員的現(xiàn)代負載測試工具

    K6 是一個開源負載測試工具,可以輕松編寫、運行和分析性能測試。它建立在 Go 和 JavaScript 之上,它被設計為功能強大、可擴展且易于使用。k6 可用于測試各種應用程序,包括 Web
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個線程之間通過某種機制進行協(xié)調(diào)和交互,例如,線程等待和通知機制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實現(xiàn)手段有以下幾種方式:Object 類下
  • 不容錯過的MSBuild技巧,必備用法詳解和實踐指南

    一、MSBuild簡介MSBuild是一種基于XML的構(gòu)建引擎,用于在.NET Framework和.NET Core應用程序中自動化構(gòu)建過程。它是Visual Studio的構(gòu)建引擎,可在命令行或其他構(gòu)建工具中使用
  • 十個簡單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強大而靈活的功能,用于修改或增強函數(shù)或類的行為。裝飾器本質(zhì)上是一個函數(shù),它接受另一個函數(shù)或類作為參數(shù),并返回一個新的函數(shù)或類。它們通常用
  • 谷歌KDD'23工作:如何提升推薦系統(tǒng)Ranking模型訓練穩(wěn)定性

    谷歌在KDD 2023發(fā)表了一篇工作,探索了推薦系統(tǒng)ranking模型的訓練穩(wěn)定性問題,分析了造成訓練穩(wěn)定性存在問題的潛在原因,以及現(xiàn)有的一些提升模型穩(wěn)定性方法的不足,并提出了一種新
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對帶有指定屬性的 HTML 元素設置樣式??梢詾閾碛兄付▽傩缘?HTML 元素設置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡單而
  • “又被陳思誠騙了”

    作者|張思齊 出品|眾面(ID:ZhongMian_ZM)如今的國產(chǎn)懸疑電影,成了陳思誠的天下。最近大爆電影《消失的她》票房突破30億斷層奪魁暑期檔,陳思誠再度風頭無兩。你可以說陳思誠的
  • 北京:科技教育體驗基地開始登記

      北京“科技館之城”科技教育體驗基地登記和認證工作日前啟動。首批北京科技教育體驗基地擬于2023年全國科普日期間掛牌,后續(xù)還將開展常態(tài)化登記?! ”本┛萍冀逃w驗基
Top 主站蜘蛛池模板: 东乡| 武川县| 邳州市| 新河县| 汪清县| 手机| 大方县| 榆树市| 保靖县| 波密县| 仁布县| 海淀区| 怀仁县| 高陵县| 怀远县| 文安县| 华蓥市| 吉首市| 东乌珠穆沁旗| 乌鲁木齐县| 昌江| 武功县| 土默特右旗| 五常市| 平和县| 海口市| 丹凤县| 石家庄市| 江都市| 黔江区| 神农架林区| 牙克石市| 泸溪县| 金坛市| 无极县| 阿拉善右旗| 阿拉善左旗| 洛扎县| 泸溪县| 泗阳县| 阿荣旗|