DDD - 微服务架构模子_范畴驱动设计(DDD)分层架构 vs 整洁架构(洋葱架构 ...

打印 上一主题 下一主题

主题 854|帖子 854|积分 2562



引言

在当今的技能架构中,微服务架构已成为构建大规模分布式系统的主流方式。相较于传统的单体架构,微服务架构以其灵活、可扩展、高可用和高容错的特点,帮助企业应对快速变化的业务需求。然而,微服务架构并非万能,它对系统的设计和开发提出了新的挑战,特殊是怎样精确明确和运用微服务架构模子,确保系统能够高效、稳固地运行。
接下来我们将对几种常见的微服务架构模子进行详细分析,包括范畴驱动设计(DDD)分层架构整洁架构六边形架构(端口-适配器架构),探讨怎样使用这些架构模子设计高内聚低耦合的微服务架构。
1. 概述

微服务架构(Microservices Architecture)是一种将单一应用步调拆解为多个小型服务的架构风格。每个微服务实现一个业务功能,独立摆设和独立扩展,这种方式极大地提升了系统的灵活性、可维护性和可扩展性。微服务架构的核心优势包括:


  • 松耦合:每个微服务都可以独立演化,修改一个微服务不会影响到其他服务。
  • 独立摆设:每个微服务可以独立摆设,淘汰了系统升级时的风险。
  • 技能栈多样性:不同的微服务可以采用不同的技能栈,选择最得当的工具和框架。
  • 高可扩展性:通过服务拆分,可以根据业务需要独立扩展某个服务,避免了单体应用的性能瓶颈。
然而,微服务架构也面对着挑战。特殊是在系统复杂性大幅提升时,怎样包管微服务之间的协调、服务的可靠性以及怎样精确分别服务边界成为了微服务架构设计中的关键问题。微服务架构的成功不仅仅取决于服务的拆分,还取决于怎样设计符合的架构模子和分层策略。

2. 范畴驱动设计(DDD)分层架构模子

范畴驱动设计(Domain-Driven Design, DDD)是一种以范畴模子为核心的架构设计理念,旨在通过深入明确业务范畴,实现系统设计和开发的高效协同。DDD提倡将业务范畴模子作为核心,围绕范畴模子进行系统的设计与实现。

2.1 DDD的核心概念

DDD的核心概念包括:


  • 范畴(Domain):是指应用步调所要处置惩罚的实际问题空间,包含了全部与业务相关的概念和规则。
  • 限界上下文(Bounded Context):将系统分别为多个子范畴,每个子范畴内部的模子和规则都是独立的。
  • 范畴模子(Domain Model):范畴模子是范畴中关键概念的抽象,用于表现业务实体及其之间的关系和举动。
2.2 DDD架构分层解析

DDD的分层架构包括:

  • 范畴层(Domain Layer):负责核心业务逻辑的实现,包括范畴模子和范畴服务。范畴层是系统的核心,承载着系统的业务规则。
  • 应用层(Application Layer):负责处置惩罚用户请求,调用范畴层的功能,完成业务流程。应用层并不包含业务逻辑,而是通过范畴层来实现业务功能。
  • 接口层(Interface Layer):负责与外部系统(如UI、外部API等)的交互。接口层通过应用层向用户或外部系统提供服务。
  • 基础设施层(Infrastructure Layer):提供数据存储、消息队列等底层资源的支持。基础设施层实现与外部系统的集成。
通过这种分层,DDD确保了系统的业务逻辑与外部依赖的解耦,使得业务模子能够独立演化,不受外部系统变更的影响。

3. 整洁架构:洋葱架构与依赖倒置

整洁架构(Clean Architecture)由Robert C. Martin提出,其核心思想是将系统的核心业务逻辑与外部技能细节进行隔离。整洁架构夸大分层设计,并通过依赖倒置原则(Dependency Inversion Principle)来实现各层之间的解耦。

3.1 整洁架构的核心思想

整洁架构的核心思想是将应用分别为多个条理,每个条理负责不同的职责。其结构类似于洋葱,每一层都像洋葱的外皮一样包裹着内层,外层依赖于内层,而内层则完全不依赖于外层。


  • 核心层:包括范畴模子、范畴服务和应用服务,这些条理实现了核心的业务逻辑。
  • 外部层:包括用户接口、数据库、缓存、消息队列等,这些层负责与外部天下的交互。
3.2 整洁架构的条理结构

整洁架构的典范条理结构如下:

  • 核心层(Core Layer):包含范畴模子、范畴服务、应用服务等,它们界说了应用的核心业务逻辑。
  • 接口层(Interface Layer):界说了系统与外部交互的接口,如UI层、API层等。
  • 基础设施层(Infrastructure Layer):负责数据库、文件系统、缓存等基础设施的实现。
  • 外部适配层(External Adapter Layer):通过适配器连接不同的外部系统和服务。
整洁架构的关键是通过依赖倒置原则,使得核心业务逻辑和外部技能细节解耦,从而进步了系统的可维护性和可扩展性。
4. 六边形架构:解耦核心业务与外部系统

六边形架构(Hexagonal Architecture),也被称为端口-适配器架构(Ports and Adapters Architecture),旨在通过端口和适配器的方式解耦核心业务与外部系统。六边形架构的关键是将应用的核心业务逻辑放在“内六边形”中,外部天下通过“端口”和“适配器”与应用进行交互。

4.1 六边形架构的设计理念

六边形架构的核心设计理念是应用的核心业务逻辑与外部天下的交互通过端口和适配器进行隔离。这意味着,外部的API、数据库、用户接口等都与核心业务逻辑解耦,系统可以灵活适配不同的外部需求。
六边形架构将系统分别为两层:


  • 内六边形(Core Logic):包含应用的核心业务逻辑。该层不依赖
于外部系统,任何变化都不会直接影响到核心逻辑。


  • 外六边形(External Adapters):通过适配器连接外部系统和应用的核心逻辑。适配器负责转换外部请求为应用能够处置惩罚的情势。

4.2 六边形架构的适用场景

六边形架构特殊适用于以下场景:


  • 复杂业务逻辑:当系统中存在复杂的业务逻辑时,六边形架构能够帮助我们将业务逻辑与外部依赖解耦,确保业务的稳固性。
  • 多样化的外部系统集成:当系统需要与多个外部系统(如数据库、第三方服务、消息队列等)集成时,六边形架构能够通过适配器将这些集成方式抽象化。
5. 三种架构模子的对比与适用场景


5.1 架构模子的核心对比

特性DDD分层架构整洁架构六边形架构核心理念聚焦范畴模子,分层设计核心业务逻辑独立,解耦技能细节通过端口和适配器解耦核心逻辑与外部系统分层范畴层、应用层、接口层核心层、接口层、基础设施层内六边形(核心业务)和外六边形(适配器)外部依赖解耦限界上下文分别,避免跨边界依赖依赖倒置,核心逻辑不依赖外部通过端口与适配器解耦外部依赖适用场景复杂范畴模子、大型企业应用需要独立摆设和扩展的系统需要灵活适配多种外部系统的场景
6. 微服务架构设计中的分层与解耦

6.1 微服务的分层设计

微服务架构设计中的分层结构通常包括以下几层:

  • 表现层(API层):负责与用户或外部系统交互,暴露服务接口。
  • 服务层(业务层):处置惩罚业务逻辑,协调不同微服务之间的交互。
  • 范畴层:负责范畴模子的实现和核心业务逻辑的处置惩罚。
  • 数据层:负责数据存储和持久化。

6.2 范畴模子与应用层的分离

范畴模子是系统的核心,它应与应用层分离。应用层负责协调不同微服务的调用,而范畴模子则专注于业务逻辑的实现。

6.3 资源解耦与适配策略

通过引入适配器和防腐层(Anti-Corruption Layer),可以确保新系统和旧系统之间的解耦,避免旧系统的技能细节影响新系统的业务逻辑。

7. 中台架构与微服务架构的融合

中台本质上是范畴的子域,它可能是核心域,也可能是通用域或支撑域。通常大家以为阿里的中台对应 DDD 的通用域,将通用的公共能力沉淀为中台,对外提供通用共享服务。

7.1 中台架构的核心思想

中台架构的核心思想是将企业的共性能力提炼成中台服务,提供给不同业务线使用。通过中台,企业能够实现资源共享、能力复用,从而提升整体运营效率。

7.2 微服务与中台架构的联合

微服务架构与中台架构相联合,可以有用解决大规模企业中各个业务单元之间的协作问题。微服务架构可以为每个业务单元提供独立的服务,中台则提供公共服务和资源管理,从而淘汰重复开发和维护成本。

项目级微服务


项目级微服务的内部遵循分层架构模子就可以了。范畴模子的核心逻辑在范畴层实现,服务的组合和编排在应用层实现,通过 API 网关为前台应用提供服务,实现前后端分离。但项目级的微服务可能会调用别的微服务,比如某个项目级微服务 B 调用认证微服务 A,完成登录和权限认证。
通常项目级微服务之间的集成,发生在微服务的应用层,由应用服务调用别的微服务发布在API 网关上的应用服务。图中微服务 B 中赤色框内的应用服务 B,它除了可以组合和编排自己的范畴服务外,还可以组合和编排外部微服务的应用服务。它只要将编排后的服务发布到 API 网关供前端调用,这样前端就可以直接访问自己的微服务了。

企业级中台微服务

企业级的业务流程往往是多个中台微服务一起协作完成的,那跨中台的微服务怎样实现集成呢?企业级中台微服务的集成不能像项目级微服务一样,在某一个微服务内完成跨微服务的服务组合和编排。我们可以在中台微服务之上增加一层,你看下面这张图,增加的这一层就位于赤色框内,它的紧张职能就是处置惩罚跨中台微服务的服务组合和编排,以及微服务之间的协调,它还可以完成前端不同渠道应用的适配。

不妨借用 BFF(服务于前端的后端,Backend for Frontends)这个词,暂且称它为BFF 微服务。BFF 微服务与别的微服务存在较大的差异,就是它没有范畴模子,因此这个微服务内也不会有范畴层。BFF 微服务可以承担应用层和用户接口层的紧张职能,完成各个中台微服务的服务组合和编排,可以适配不同前端和渠道的要求.

8. 最佳实践:怎样实现高内聚低耦合的微服务

8.1 业务逻辑与外部依赖的解耦

要实现高内聚低耦合,首先要包管业务逻辑的独立性。通过DDD、整洁架构或六边形架构的应用,可以确保核心业务逻辑不受外部系统变化的影响。

8.2 微服务之间的通信与集成

微服务之间的通信方式有同步和异步两种,常见的协议有RESTful API、gRPC等。选择符合的通信方式可以淘汰服务之间的耦合,进步系统的性能。

8.3 服务的独立性与可扩展性

服务的独立性是微服务架构成功的关键。每个微服务应能够独立摆设、独立扩展,同时包管服务之间的协作不被影响。

9. 小结

DDD 分层架构、整洁架构、六边形架构都是以范畴模子为核心,实验分层架构,内部核心业务逻辑与外部应用、资源隔离并解耦 .
怎样在微服务架构中实现高内聚低耦合,怎样通过架构模子的合理设计进步系统的灵活性和可维护性,将是技能团队面对的紧张挑战。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我爱普洱茶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表