在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

架構與設計 常見微服務分層架構的區別和落地實踐

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

前言

從強調內外隔離的六邊形架構,逐漸發展衍生出的層層遞進、注重領域模型的洋蔥架構,再到和DDD完美契合的整潔架構。架構風格的不斷演進,其實就是為了適應軟件需求越來越復雜的特點。

可以看到,越現代的架構風格越傾向于清晰的職責定位,且讓領域模型成為架構的核心。

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

傳統三層架構

傳統服務通常使用三層架構:

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

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

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

三層架構特點就是簡單,適用于一些無復雜業務場景的小型應用,或者“數據不可變”作為基礎原則的DOP(面向數據編程)服務。

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

wKgaoWcXVYOABfykAACXUPb6uWA473.png

??

?

DDD架構

DDD架構可以看做是整潔架構的一種實現,分層職責如下:

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

?應用層:用例、任務入口、消息隊列監聽均在這一層,可以理解為業務流程的入口,通過聚合根的構造執行相應的命令操作。

?領域服務層:包含核心的領域服務定義,并定義了gateway來做一層依賴倒置,使基礎設施層僅做實現。

?基礎設施層包含一切基礎能力:數據庫、ES、遠程調用封裝等等。

wKgZoWcXVYaAFWHcAAF5DXMtSP4093.png

??

優點

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

?敏捷:適合不同團隊一起開發和維護而不會產生沖突。

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

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

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

如此多的優點自然帶來明確的缺點

?專業性要求較高:需要對業務、架構原則理解深刻的人員進行設計和維護,不恰當的領域模型將使后續迭代極為痛苦。

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

?不再適合簡單的業務場景:實現一個簡單的CRUD顯得過于復雜。

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

簡單的微服務分層架構

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

骨架Maven坐標:

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

分層定義:

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

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

?基礎設施層:存放數據庫、ES、遠程調用服務的封裝。該層的持久化數據定義命名以Po結尾。遠程命令服務入參命名以RpcCommand結尾,遠程查詢服務入參命名以RpcQuery結尾,響應體命名以RpcDto結尾。

wKgaoWcXVYeAcF4cAAKr0lvCPic583.png

??

最佳實踐

1.命令服務必須訪問領域服務層,允許簡單查詢直接調用基礎設施層。

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

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

4.實際開發過程中,門面層、領域服務層和基礎設施層均有各自的實體定義,跨層調用的對象體轉換使用MapStruct組件來減少手寫映射代碼的工作量。

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

優點

1. 開發效率

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

審核編輯 黃宇

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

    關注

    0

    文章

    4

    瀏覽量

    6409
  • 微服務
    +關注

    關注

    0

    文章

    137

    瀏覽量

    7348
收藏 人收藏

    評論

    相關推薦

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

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

    寶藏級微服務架構工具合集

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

    k8s微服務架構就是云原生嗎?兩者是什么關系

    k8s微服務架構就是云原生嗎?K8s微服務架構并不等同于云原生,但兩者之間存在密切的聯系。Kubernetes在云原生架構中扮演著核心組件的
    的頭像 發表于 11-25 09:39 ?145次閱讀

    SSR與微服務架構的結合應用

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

    GPU服務器AI網絡架構設計

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

    邊緣計算架構設計最佳實踐

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

    微服務架構與容器云的關系與區別

    微服務架構與容器云密切相關又有所區別微服務將大型應用拆分為小型、獨立的服務,而容器云基于容器技術,為
    的頭像 發表于 10-21 17:28 ?225次閱讀

    指令集架構與微架構區別

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

    服務器而言,ARM架構與X86架構有什么區別?各自的優勢在哪里?

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

    Proxyless的多活流量和微服務治理

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

    ai服務器是什么架構類型

    AI服務器,即人工智能服務器,是專門為人工智能應用設計的高性能計算服務器。AI服務器的架構類型有很多種,以下是一些
    的頭像 發表于 07-02 09:51 ?1068次閱讀

    fpga封裝技術和arm架構有什么區別

    FPGA封裝技術與ARM架構在多個方面存在顯著的區別
    的頭像 發表于 03-26 15:50 ?717次閱讀

    不能獨立開發,是因為你不懂軟件架構

    不想錯過,記得右上角-查看公眾號-設為星標,摘下星星送給我嵌入式軟件架構設計一般采用分層思想,稱為“分層架構”。part1一、什么是分層
    的頭像 發表于 03-15 08:09 ?1553次閱讀
    不能獨立開發,是因為你不懂軟件<b class='flag-5'>架構</b>

    arm架構和x86架構區別 linux是x86還是arm

    ARM架構和x86架構是兩種不同的計算機處理器架構,它們在體系結構、指令集、應用領域等方面有著明顯的區別。Linux操作系統則具有廣泛的適配性,可以運行在各種
    的頭像 發表于 01-30 13:46 ?1.8w次閱讀

    游戲公司不使用微服務架構的原因

    微服務基本只有 request/response 的模式。做不了 streaming?微服務通常要求應用是無狀態的才能做到水平擴展。streaming 本身就是加入了狀態
    的頭像 發表于 12-29 11:18 ?443次閱讀
    主站蜘蛛池模板: 日韩色网| 久久骚| 国产免费糟蹋美女视频| 美女黄18| 天天爽天天爱| 成人午夜免费剧场| 亚洲综合在线观看一区www| 最近2018中文字幕免费视频 | 欧美成人性动漫在线观看| 极品美女写真菠萝蜜视频| 日日干夜夜操| 国产精品久久久久久久久久妇女 | 亚洲爱爱网| 人与牲动交xxxbbb| 第四色视频| 免费福利在线播放| 性做久久久久| 亚洲29p| 丁香六月 久久久| 欧美黑人粗暴另类多交| 中文天堂在线观看| 国内一国产农村妇女一级毛片| 天天综合在线观看| 日本加勒比一区| 色宅男午夜电影在线观看| 狠狠色丁香婷婷久久综合不卡| 久久久午夜精品| 亚洲成网| 一本高清在线| 啪啪.com| 欧美色老头| 午夜国产视频| 黄视频在线免费看| 女人被狂躁视频网站免费| 久久视频精品36线视频在线观看| 一级国产特黄aa大片| 六月婷婷久久| 人人干天天操| 午夜影院亚洲| 天天色踪合合| 亚洲国产人成在线观看|