0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

架構(gòu)與設(shè)計 常見微服務(wù)分層架構(gòu)的區(qū)別和落地實踐

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-10-22 15:34 ? 次閱讀

前言

從強調(diào)內(nèi)外隔離的六邊形架構(gòu),逐漸發(fā)展衍生出的層層遞進、注重領(lǐng)域模型的洋蔥架構(gòu),再到和DDD完美契合的整潔架構(gòu)。架構(gòu)風格的不斷演進,其實就是為了適應(yīng)軟件需求越來越復雜的特點。

可以看到,越現(xiàn)代的架構(gòu)風格越傾向于清晰的職責定位,且讓領(lǐng)域模型成為架構(gòu)的核心。

基于這些架構(gòu)風格,在軟件架構(gòu)設(shè)計過程中又有非常多的架構(gòu)分層模型。

傳統(tǒng)三層架構(gòu)

傳統(tǒng)服務(wù)通常使用三層架構(gòu):

?門面層:作為服務(wù)暴露的入口,處理所有的外部請求。部分情況下,門面層甚至不需要單獨定義對象而是直接使用服務(wù)層的實體定義。

?服務(wù)層:作為核心業(yè)務(wù)層,包含所有業(yè)務(wù)邏輯。并對基礎(chǔ)層能力進行簡單組合提供一定的能力復用。通常服務(wù)層會進行實體定義來防止下層對象體直接暴露給外部服務(wù),導致底層任何變化都有可能直接傳遞到外部,非常不穩(wěn)定。

?基礎(chǔ)層:用來存放dao和外部rpc服務(wù)的封裝,二者可以拆分為不同的module,也可合二為一,以不同package進行隔離。

三層架構(gòu)特點就是簡單,適用于一些無復雜業(yè)務(wù)場景的小型應(yīng)用,或者“數(shù)據(jù)不可變”作為基礎(chǔ)原則的DOP(面向數(shù)據(jù)編程)服務(wù)。

但是當業(yè)務(wù)場景稍微復雜一些、調(diào)用層級較多時,可復用性、可維護性就都非常差了,很多代碼都耦合在一起,牽一發(fā)動全身。

wKgaoWcXVYOABfykAACXUPb6uWA473.png

??

?

DDD架構(gòu)

DDD架構(gòu)可以看做是整潔架構(gòu)的一種實現(xiàn),分層職責如下:

?適配層:用來做外部不同端請求的適配器,隔離不同端的協(xié)議差異,包裝不同端不同樣式的響應(yīng)體。

?應(yīng)用層:用例、任務(wù)入口、消息隊列監(jiān)聽均在這一層,可以理解為業(yè)務(wù)流程的入口,通過聚合根的構(gòu)造執(zhí)行相應(yīng)的命令操作。

?領(lǐng)域服務(wù)層:包含核心的領(lǐng)域服務(wù)定義,并定義了gateway來做一層依賴倒置,使基礎(chǔ)設(shè)施層僅做實現(xiàn)。

?基礎(chǔ)設(shè)施層包含一切基礎(chǔ)能力:數(shù)據(jù)庫、ES、遠程調(diào)用封裝等等。

wKgZoWcXVYaAFWHcAAF5DXMtSP4093.png

??

優(yōu)點

?核心穩(wěn)定:領(lǐng)域模型在依賴鏈上是頂層角色,不依賴任何其他模塊,所以極其穩(wěn)定。其他任何業(yè)務(wù)域、存儲、邊緣能力的變化都不會對領(lǐng)域模型造成影響。

?敏捷:適合不同團隊一起開發(fā)和維護而不會產(chǎn)生沖突。

?可拆分:當有屆上下文隨著演進逐漸膨脹時,很容易拆分成微服務(wù)。

?可擴展:添加新的功能非常簡單,從而使得開發(fā)人員能夠更快的部署和調(diào)整。

?可演進:良好的可測試性帶來非常低的重構(gòu)成本,不會隨著不斷迭代導致項目成為難以修改的“大泥球”。

如此多的優(yōu)點自然帶來明確的缺點

?專業(yè)性要求較高:需要對業(yè)務(wù)、架構(gòu)原則理解深刻的人員進行設(shè)計和維護,不恰當?shù)念I(lǐng)域模型將使后續(xù)迭代極為痛苦。

?開發(fā)成本高:復雜的架構(gòu)設(shè)計,更多的架構(gòu)分層,自然帶來代碼行數(shù)的指數(shù)級增長。尤其是項目前期的開發(fā)任務(wù)變得異常繁重。

?不再適合簡單的業(yè)務(wù)場景:實現(xiàn)一個簡單的CRUD顯得過于復雜。

?改變決策困難:嘗試使用整潔架構(gòu)需要和團隊的管理層和其他成員達成一致,這往往需要非常強大的說服力。如果在架構(gòu)演進過程中想切換回其他架構(gòu)模式也十分困難,幾乎是整個項目級別的重構(gòu)工作。

簡單的微服務(wù)分層架構(gòu)

基于六邊形架構(gòu)規(guī)范的接口適配原則和防腐理念,同時借鑒了CQRS模式的優(yōu)點,我們定義了一個簡單的微服務(wù)分層架構(gòu)。

骨架Maven坐標:

com.jdt.open
simple-microservices-layered-architecture-archetype
1.4.0

分層定義:

?門面層:作為程序的入口,通過包隔離來存放JSF服務(wù)、Rest服務(wù)、定時任務(wù)和MQ消費,其中對外提供服務(wù)的接口定義存放在單獨的api包中。該層的請求定義命名以Request結(jié)尾,響應(yīng)體命名以Response結(jié)尾。

?領(lǐng)域服務(wù)層:每一個領(lǐng)域服務(wù)存放在單獨的module中,并通過單獨的api包對外暴露能力。該層的命令請求定義命名以Command結(jié)尾,查詢請求定義命名以Query結(jié)尾,響應(yīng)體命名以Dto結(jié)尾。

?基礎(chǔ)設(shè)施層:存放數(shù)據(jù)庫、ES、遠程調(diào)用服務(wù)的封裝。該層的持久化數(shù)據(jù)定義命名以Po結(jié)尾。遠程命令服務(wù)入?yún)⒚訰pcCommand結(jié)尾,遠程查詢服務(wù)入?yún)⒚訰pcQuery結(jié)尾,響應(yīng)體命名以RpcDto結(jié)尾。

wKgaoWcXVYeAcF4cAAKr0lvCPic583.png

??

最佳實踐

1.命令服務(wù)必須訪問領(lǐng)域服務(wù)層,允許簡單查詢直接調(diào)用基礎(chǔ)設(shè)施層。

2.參數(shù)校驗、請求出入?yún)⑷罩?、審計日志記錄、TraceID預埋、異常處理等非核心業(yè)務(wù)能力均由公共組件(參考: Open-Lab組件包 )完成,減少項目內(nèi)部的邊緣能力代碼。

3.由于在門面層進行統(tǒng)一的異常處理,非必要時無需在項目中進行大面積的try-catch,讓代碼更清爽。

4.實際開發(fā)過程中,門面層、領(lǐng)域服務(wù)層和基礎(chǔ)設(shè)施層均有各自的實體定義,跨層調(diào)用的對象體轉(zhuǎn)換使用MapStruct組件來減少手寫映射代碼的工作量。

5.數(shù)據(jù)層使用Fluent-Mybatis,最大好處是減少后期迭代中,數(shù)據(jù)對象增減字段時修改Mapper的成本。

優(yōu)點

1. 開發(fā)效率

簡單的業(yè)務(wù)開發(fā)過程中,相比較書寫核心業(yè)務(wù)邏輯,更多的工作量幾乎都是來自處理跨層調(diào)用時對象轉(zhuǎn)換和Mapper定義,通過MapStruct和Fluent-Mybatis等組件的使用(也許再加上GitHub Copilot

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 分層架構(gòu)
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    6447
  • 微服務(wù)
    +關(guān)注

    關(guān)注

    0

    文章

    144

    瀏覽量

    7578
收藏 0人收藏

    評論

    相關(guān)推薦

    微服務(wù)架構(gòu)幾種典型的基礎(chǔ)框架,你了解嗎?

    SpringCloud、Dubbo、Dropwizard、Akka等是常見微服務(wù)框架。SpringCloud基于SpringBoot,生態(tài)豐富;Dropwizard輕量且繼承SpringBoot優(yōu)點
    的頭像 發(fā)表于 03-04 11:05 ?181次閱讀

    揭秘云計算架構(gòu)分層奧秘

    的重要基石。那么,云計算架構(gòu)究竟是如何構(gòu)建的呢?今天,我們帶您揭秘云計算架構(gòu)分層奧秘——邊緣層、IaaS、PaaS、SaaS。
    的頭像 發(fā)表于 02-26 17:41 ?237次閱讀

    微服務(wù)容器化部署好處多嗎?

    微服務(wù)容器化部署好處有很多,包括環(huán)境一致性、資源高效利用、快速部署與啟動、隔離性與安全性、版本控制與回滾以及持續(xù)集成與持續(xù)部署。這些優(yōu)勢助力應(yīng)用可靠穩(wěn)定運行,提升開發(fā)運維效率,是現(xiàn)代軟件架構(gòu)的優(yōu)質(zhì)選擇。UU云小編認為微服務(wù)容器化
    的頭像 發(fā)表于 01-17 10:22 ?204次閱讀

    容器化能替代微服務(wù)嗎?兩者有何區(qū)別

    容器化不能替代微服務(wù),但它是微服務(wù)的解決方案之一。微服務(wù)架構(gòu)的核心在于將大型應(yīng)用程序拆分為一系列小型、獨立的服務(wù),每個
    的頭像 發(fā)表于 01-13 10:40 ?251次閱讀

    探討篇(三):代碼復用的智慧 - 提升架構(gòu)的效率與可維護性

    作者:京東物流 馮志文 前兩篇從服務(wù)粒度和服務(wù)內(nèi)的分層架構(gòu)角度探討,本文繼續(xù)從服務(wù)間代碼復用角度探討。 背景 在分布式
    的頭像 發(fā)表于 12-27 15:58 ?467次閱讀
    探討篇(三):代碼復用的智慧 - 提升<b class='flag-5'>架構(gòu)</b>的效率與可維護性

    寶藏級微服務(wù)架構(gòu)工具合集

    寶藏級熱門微服務(wù)架構(gòu)工具包含Spring Boot、Eclipse Vert.X、Kubernetes、Tyk、RabbitMQ、Apache Kafka等。其中,Spring Boot簡化了微服務(wù)
    的頭像 發(fā)表于 12-21 16:33 ?459次閱讀

    k8s微服務(wù)架構(gòu)就是云原生嗎?兩者是什么關(guān)系

    k8s微服務(wù)架構(gòu)就是云原生嗎?K8s微服務(wù)架構(gòu)并不等同于云原生,但兩者之間存在密切的聯(lián)系。Kubernetes在云原生架構(gòu)中扮演著核心組件的
    的頭像 發(fā)表于 11-25 09:39 ?343次閱讀

    SSR與微服務(wù)架構(gòu)的結(jié)合應(yīng)用

    隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,前端技術(shù)棧不斷更新迭代,后端架構(gòu)也經(jīng)歷了從單體應(yīng)用到微服務(wù)的變革。在這個過程中,服務(wù)端渲染(SSR)作為一種提升頁面加載速度和SEO性能的技術(shù),與微服務(wù)
    的頭像 發(fā)表于 11-18 11:34 ?590次閱讀

    GPU服務(wù)器AI網(wǎng)絡(luò)架構(gòu)設(shè)計

    眾所周知,在大型模型訓練中,通常采用每臺服務(wù)器配備多個GPU的集群架構(gòu)。在上一篇文章《高性能GPU服務(wù)器AI網(wǎng)絡(luò)架構(gòu)(上篇)》中,我們對GPU網(wǎng)絡(luò)中的核心術(shù)語與概念進行了詳盡介紹。本文
    的頭像 發(fā)表于 11-05 16:20 ?846次閱讀
    GPU<b class='flag-5'>服務(wù)</b>器AI網(wǎng)絡(luò)<b class='flag-5'>架構(gòu)</b>設(shè)計

    邊緣計算架構(gòu)設(shè)計最佳實踐

    邊緣計算架構(gòu)設(shè)計最佳實踐涉及多個方面,以下是一些關(guān)鍵要素和最佳實踐建議: 一、核心組件與架構(gòu)設(shè)計 邊緣設(shè)備與網(wǎng)關(guān) 邊緣設(shè)備 :包括各種嵌入式設(shè)備、傳感器、智能手機、智能攝像頭等,負責采
    的頭像 發(fā)表于 10-24 14:17 ?788次閱讀

    微服務(wù)架構(gòu)與容器云的關(guān)系與區(qū)別

    微服務(wù)架構(gòu)與容器云密切相關(guān)又有所區(qū)別。微服務(wù)將大型應(yīng)用拆分為小型、獨立的服務(wù),而容器云基于容器技術(shù),為
    的頭像 發(fā)表于 10-21 17:28 ?407次閱讀

    指令集架構(gòu)與微架構(gòu)區(qū)別

    指令集架構(gòu)(Instruction Set Architecture,ISA)與微架構(gòu)(Microarchitecture)是計算機體系結(jié)構(gòu)中的兩個重要概念,它們在處理器的設(shè)計和實現(xiàn)中扮演著不同的角色。以下是對兩者區(qū)別的詳細闡述
    的頭像 發(fā)表于 10-05 15:10 ?872次閱讀

    服務(wù)器而言,ARM架構(gòu)與X86架構(gòu)有什么區(qū)別?各自的優(yōu)勢在哪里?

    ,x86 架構(gòu)服務(wù)器在市場占主導,有強大處理能力和廣泛軟件兼容性,廣泛用于企業(yè)數(shù)據(jù)中心。ARM 架構(gòu)服務(wù)器近年崛起,憑借低功耗、高效能優(yōu)勢在云計算和
    的頭像 發(fā)表于 09-09 14:05 ?2374次閱讀

    Proxyless的多活流量和微服務(wù)治理

    1. 引言 1.1 項目的背景及意義 在當今的微服務(wù)架構(gòu)中,應(yīng)用程序通常被拆分成多個獨立的服務(wù),這些服務(wù)通過網(wǎng)絡(luò)進行通信。這種架構(gòu)的優(yōu)勢在于
    的頭像 發(fā)表于 08-28 16:54 ?1786次閱讀
    Proxyless的多活流量和<b class='flag-5'>微服務(wù)</b>治理

    ai服務(wù)器是什么架構(gòu)類型

    AI服務(wù)器,即人工智能服務(wù)器,是專門為人工智能應(yīng)用設(shè)計的高性能計算服務(wù)器。AI服務(wù)器的架構(gòu)類型有很多種,以下是一些
    的頭像 發(fā)表于 07-02 09:51 ?1509次閱讀

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品