<返回更多

微服务架构的四种常见模型

2022-12-29  微信公众号  猿java
加入收藏

互联网的快速发展,微服务架构已经成为了后端人员一个必备技能,今天我们就来分享微服务中四种常见架构模型,帮助我们更好的去了解微服务的发展。

一、洋葱架构 

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

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

各层说明

提出原因

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

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

适用范围

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

 

二、整洁架构 

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

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

 

各层说明

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

 

三、六边形架构 

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

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

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

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

 

实现逻辑

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

 

四、DDD分层架构 

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

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

 

各层说明

 

五、模型对比 

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

 

六、总结 

 

七、参考文献 

Clean-Architecture:https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html

Hexagonal Architecture:http://alistair.cockburn.us/Hexagonal+architecture

Onion Architecture:https://alistair.cockburn.us

Screaming Architecture :https://cleancoders.com/blog/2011-09-30-Screaming-Architecture

关键词:微服务架构      点击(3)
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多微服务架构相关>>>