百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

四种常见的微服务架构模型,你用过哪一种?

ccwgpt 2025-04-10 21:05 109 浏览 0 评论

在互联网的快速发展的今天,微服务架构能力已经成为了后端人员一个必备技能,这篇文章,我们来分享四种常见的微服务架构模型以及它们之间的区别。

1. 洋葱架构

洋葱架构:Onion Architecture,它是由 Jeffrey Palermo(杰弗里·巴勒莫)在 2008年提出的,下图摘自作者原论文:


洋葱架构因为整个架构外形看似像洋葱,因此而得名,它在很大程度上依赖于依赖倒置原则,所有代码都可以依赖于更中心的层,但代码不能依赖于远离核心的层。换句话说,所有耦合都朝向中心。这种体系结构毫不掩饰地偏向于面向对象的编程,它将对象置于所有其他对象之上。

1.1 各层说明

  • Domain Model:领域模型层,它是最中心的,代表了为组织建模真相的状态和行为组合,封装了企业级的业务规则;
  • Model Services:领域服务,涉及多个实体的复杂业务逻辑,例如抽象存储库(仍然将实现细节留给外层,例如数据库连接);
  • Application Services:应用程序服务,它定义了应用程序的业务流程;
  • User interface/Infrastructure/Tests:最外层是用户界面、与外部基础设施的连接和自动化测试。与端口和适配器一样,此模式将与所有外部依赖项(例如数据库、API 和用户界面)的连接留在边缘,以便轻松切换;

1.2 提出原因

洋葱架构被提出的原因是作者觉得传统自上而下的分层架构模式存在严重的弊端弊端:耦合,每一层都耦合到它下面的层,每一层通常耦合到各种基础设施问题。下图为传统分层架构图:


从传统架构图可以看出每层的强依赖关系,UI 和业务逻辑与数据访问的耦合,如果业务逻辑不存在,UI 将无法运行。如果没有数据访问,业务逻辑就无法运行。而洋葱架构强调整个系统的关注点分离,使得应用程更易于维护。

1.3 适用范围

洋葱架构不适合小型网站,它适用于长期存在的业务应用程序以及具有复杂行为的应用程序。

2. 整洁架构

整洁架构:Clean Architecture,它是由 Robert C. Martin (Uncle Bob) 于 2012 年提出。整洁架构是基于洋葱架构的概念之上提出的,但各层的细节有所不同。它的核心不叫"领域模型",而是称为"实体",但仍然代表企业范围的业务规则。下图摘自作者原文:


从整洁架构的架构图可以看出:整洁架构最主要的原则是依赖原则,它定义了各个层级的依赖关系,同心圆代表软件的不同领域,越往里能力越是核心。外圆代码依赖只能指向内圆,内圆无需关注外圆变化(包括函数、类。变量,或任何其他命名的软件实体)。

2.1 各层说明

  • Entities:实体。它封装了企业范围的业务规则,实体可以是具有方法的对象,也可以是一组数据结构和函数。只要实体可以被企业中的许多不同应用程序使用,就没有关系。
  • Use Cases:用例。该层中的软件包含特定于应用程序的业务规则。它封装并实现了系统的所有用例。这些用例协调进出实体的数据流,并指导这些实体使用其企业范围的业务规则来实现用例的目标。
  • Interface Adapters:接口适配器。该层中的软件是一组适配器,可将数据从对用例和实体最方便的格式转换为对某些外部机构(如数据库或 Web)最方便的格式。例如,这一层将完全包含 GUI 的 MVC 架构。Presenters、Views 和 Controllers 都属于这里。这些模型可能只是从控制器传递到用例,然后从用例返回到呈现器和视图的数据结构。
  • Frameworks and Drivers:框架和驱动程序。最外层主要提供适配的能力,适配能力分为主动适配和被动适配,一般由Database、Web Framework等框架和工具组成,这一层一般不会写太多代码,除了往内和下一个圈子通信的胶水代码。

在图表的右下方展示了如何跨越圆圈边界的示例。它显示了 Controller 控制器和 Presenters演示器与下一层中的用例进行通信。注意控制流。它从控制器开始,通过用例移动,然后结束在演示器中执行。还要注意源代码依赖性。它们中的每一个都向内指向用例。

3. 六边形架构

3.1 结构

六边形架构:Hexagonal Architecture,又名“端口适配器架构”,它是由 Alistair Cockburn 于 2005 年在论文中引入的。

需要说明的是:六边形架构中的六边形不是六边形,因为数字 6 很重要,而是让绘图的人有空间根据需要插入端口和适配器,而不受一维分层绘图的限制。"六边形架构"一词就源于这种视觉效果。更直白地说,该图案实际上与六边形无关,它只是通常的绘制方式而已。下图摘自作者原论文:

六边形架构将系统分为内六边形和外六边形两层,这两层的职能划分如下:

  • 内六边形实现应用的核心业务逻辑;
  • 外六边形完成外部应用、驱动和基础资源等的交互和访问,对前端应用以 API 主动适配的方式提供服务,对基础资源以依赖倒置被动适配的方式实现资源访问。

六边形架构的核心理念是:应用是通过端口与外部进行交互的,一个端口可能对应多个外部系统。也就是说,在下图的六边形架构中,最内层的核心业务逻辑与外部资源(包括 APP、Web 应用以及数据库资源等)完全隔离,仅通过适配器进行交互。它解决了业务逻辑与用户界面的代码交错问题,很好地实现了前后端分离。六边形架构各层的依赖关系与整洁架构一样,都是由外向内依赖。

3.2 实现逻辑

当任何驱动程序想要在端口上使用应用程序时,它会发送一个请求,该请求由针对驱动程序特定技术的适配器转换为可用的过程调用或消息,然后将其传递到应用程序端口。该应用程序对驱动程序的技术一无所知。当应用程序有东西要发送时,它会通过端口将其发送到适配器,适配器会创建接收技术(人工或自动)所需的适当信号。应用程序在其所有方面都与适配器进行了语义上的声音交互,而实际上并不知道适配器另一端事物的性质。

4. DDD分层架构

DDD 分层架构应该是目前流行度最高的一种架构方式,但是,其架构也经历了多次的变更。DDD 最早使用的是传统的四层架构;后来四层架构发生了优化,实现了各层对基础层的解耦;再后来领域层和应用层之间增加了上下文环境(Context)层,五层架构(DCI)就此形成了。架构演变图如下:

DDD 分层架构有一个重要的原则:每层只能与位于其下方的层发生耦合。

4.1 各层说明

  • User interface:用户接口层,用户接口层负责向用户显示信息和解释用户指令。这里的用户可能是:用户、程序、自动化测试和批处理脚本等等。
  • Application:应用层,它可以协调多个聚合的服务和领域对象完成服务编排和组合,协作完成业务操作;
  • Domain:领域层,领域层的作用是实现企业核心业务逻辑,通过各种校验手段保证业务的正确性。领域层主要体现领域模型的业务能力,它用来表达业务概念、业务状态和业务规则。
  • Infrastructure:基础层,基础层是贯穿所有层的,它的作用就是为其它各层提供通用的技术和基础服务,包括第三方工具、驱动、消息中间件、网关、文件、缓存以及数据库等。比较常见的功能还是提供数据库持久化。

4.2 模型对比

通过上面对四种架构详细介绍可以发现:几种架构里面都有核心领域层(不同架构命名可能不一样),但都是实现核心业务逻辑,它的作用就是将核心业务逻辑与外部应用、基础资源进行隔离。不同架构,核心业务逻辑也是有差异的,有的业务逻辑属于领域模型的能力,有的则属于面向用户的用例和流程编排能力。应用层实现面向用户操作相关的用例和流程,对外提供粗粒度的 API 服务。它就像一个齿轮一样进行前台应用和领域层的适配,接收前台需求,随时做出响应和调整,尽量避免将前台需求传导到领域层。应用层作为配速齿轮则位于前台应用和领域层之间。

5. 总结

  • 微服务的几种模型见证了微服务架构的演进历史,每种架构都有其使用场景和一定的时代意义;
  • 四种架构都是分离关注点,将变与不变进行分离;
  • 四种架构模型表现形式不一样,但设计思想都体现了微服务架构高内聚低耦合原则,正所谓神同行异;
  • 四种架构的核心层都是领域层,它保持领域模型和业务逻辑的稳定,对外提供稳定的细粒度的领域服务;

相关推荐

团队管理“布阵术”:3招让你的团队战斗力爆表!

为何古代军队能够以一当十?为何现代企业有的团队高效似“特种部队”,有的却松散若“游击队”?**答案正隐匿于“布阵术”之中!**今时今日,让我们从古代兵法里萃取3个核心要义,助您塑造一支战斗力爆棚的...

知情人士回应字节大模型团队架构调整

【知情人士回应字节大模型团队架构调整】财联社2月21日电,针对原谷歌DeepMind副总裁吴永辉加入字节跳动后引发的团队调整问题,知情人士回应称:吴永辉博士主要负责AI基础研究探索工作,偏基础研究;A...

豆包大模型团队开源RLHF框架,训练吞吐量最高提升20倍

强化学习(RL)对大模型复杂推理能力提升有关键作用,但其复杂的计算流程对训练和部署也带来了巨大挑战。近日,字节跳动豆包大模型团队与香港大学联合提出HybridFlow。这是一个灵活高效的RL/RL...

创业团队如何设计股权架构及分配(创业团队如何设计股权架构及分配方案)

创业团队的股权架构设计,决定了公司在随后发展中呈现出的股权布局。如果最初的股权架构就存在先天不足,公司就很难顺利、稳定地成长起来。因此,创业之初,对股权设计应慎之又慎,避免留下巨大隐患和风险。两个人如...

消息称吴永辉入职后引发字节大模型团队架构大调整

2月21日,有消息称前谷歌大佬吴永辉加入字节跳动,并担任大模型团队Seed基础研究负责人后,引发了字节跳动大模型团队架构大调整。多名原本向朱文佳汇报的算法和技术负责人开始转向吴永辉汇报。简单来说,就是...

31页组织效能提升模型,经营管理团队搭建框架与权责定位

分享职场干货,提升能力!为职场精英打造个人知识体系,升职加薪!31页组织效能提升模型如何拿到分享的源文件:请您关注本头条号,然后私信本头条号“文米”2个字,按照操作流程,专人负责发送源文件给您。...

异形柱结构(异形柱结构技术规程)

下列关于混凝土异形柱结构设计的说法,其中何项正确?(A)混凝土异形柱框架结构可用于所有非抗震和抗震设防地区的一般居住建筑。(B)抗震设防烈度为6度时,对标准设防类(丙类)采用异形柱结构的建筑可不进行地...

职场干货:金字塔原理(金字塔原理实战篇)

金字塔原理的适用范围:金字塔原理适用于所有需要构建清晰逻辑框架的文章。第一篇:表达的逻辑。如何利用金字塔原理构建基本的金字塔结构受众(包括读者、听众、观众或学员)最容易理解的顺序:先了解主要的、抽象的...

底部剪力法(底部剪力法的基本原理)

某四层钢筋混凝土框架结构,计算简图如图1所示。抗震设防类别为丙类,抗震设防烈度为8度(0.2g),Ⅱ类场地,设计地震分组为第一组,第一自振周期T1=0.55s。一至四层的楼层侧向刚度依次为:K1=1...

结构等效重力荷载代表值(等效重力荷载系数)

某五层钢筋混凝土框架结构办公楼,房屋高度25.45m。抗震设防烈度8度,设防类别丙类,设计基本地震加速度0.2g,设计地震分组第二组,场地类别为Ⅱ类,混凝土强度等级C30。该结构平面和竖向均规则。假定...

体系结构已成昭告后世善莫大焉(体系构架是什么意思)

实践先行也理论已初步完成框架结构留余后人后世子孙俗话说前人栽树后人乘凉在夏商周大明大清民国共和前人栽树下吾之辈已完成结构体系又俗话说青出于蓝而胜于蓝各个时期任务不同吾辈探索框架结构体系经历有限肯定发展...

框架柱抗震构造要求(框架柱抗震设计)

某现浇钢筋混凝土框架-剪力墙结构高层办公楼,抗震设防烈度为8度(0.2g),场地类别为Ⅱ类,抗震等级:框架二级,剪力墙一级,混凝土强度等级:框架柱及剪力墙C50,框架梁及楼板C35,纵向钢筋及箍筋均采...

梁的刚度、挠度控制(钢梁挠度过大会引起什么原因)

某办公楼为现浇钢筋混凝土框架结构,r0=1.0,混凝土强度等级C35,纵向钢筋采用HRB400,箍筋采用HPB300。其二层(中间楼层)的局部平面图和次梁L-1的计算简图如图1~3(Z)所示,其中,K...

死要面子!有钱做大玻璃窗,却没有钱做“柱和梁”,不怕房塌吗?

活久见,有钱做2层落地大玻璃窗,却没有钱做“柱子和圈梁”,这样的农村自建房,安全吗?最近刷到个魔幻施工现场,如下图,这栋5开间的农村自建房,居然做了2个全景落地窗仔细观察,这2个落地窗还是飘窗,为了追...

不是承重墙,物业也不让拆?话说装修就一定要拆墙才行么

最近发现好多朋友装修时总想拆墙“爆改”空间,别以为只要避开承重墙就能随便砸!我家楼上邻居去年装修,拆了阳台矮墙想扩客厅,结果物业直接上门叫停。后来才知道,这种配重墙拆了会让阳台承重失衡,整栋楼都可能变...

取消回复欢迎 发表评论: