知识卡片

微服务解耦策略全景图

结构图卡

内容

全书用DDD做微服务设计时用到的各种解耦手段,可以按作用范围分成两个层次。第一层是”微服务/聚合之间”的解耦:限界上下文划分出微服务的物理边界,让不同业务领域从一开始就不共享一个微服务;聚合划分出同一微服务内不同聚合之间的逻辑边界;领域事件配合消息中间件,用数据最终一致性策略实现微服务之间的异步调用,避免同步阻塞耦合;值对象的业务快照数据冗余设计,用适当的数据冗余换取跨微服务、跨聚合之间的数据解耦。第二层是”微服务内部”的解耦:DDD分层架构通过明确各层职责边界,解耦微服务内部不同层的代码;用户接口层的facade接口和组装器,解耦核心业务逻辑与前端应用的直接依赖;仓储模式通过依赖倒置,解耦核心领域逻辑与基础资源处理逻辑;微服务代码目录按聚合目录和分层目录划分代码边界,为架构演进时的代码组合和拆分预留空间;应用服务通过组合编排不同聚合的领域服务,解耦同一微服务内不同聚合的调用方式;聚合之间坚持用聚合根ID而不是对象引用来访问彼此,解耦不同聚合的领域对象;微服务内部聚合之间还可以通过事件总线、以数据最终一致性策略解耦聚合间的同步服务调用。这张全景图的价值在于把原本分散在各章、各自独立出现的解耦手段收拢到一起,能让人看清楚:DDD对微服务的”解耦”从来不是单一技术动作,而是在物理边界、逻辑边界、调用方式、数据依赖等多个维度同时发力的一整套组合策略。

结构图

flowchart TB
  subgraph L1["第一层:微服务/聚合之间的解耦"]
    A1["限界上下文<br/>→ 微服务物理边界"]
    A2["聚合<br/>→ 微服务内逻辑边界"]
    A3["领域事件+消息中间件<br/>→ 最终一致性异步调用"]
    A4["值对象业务快照冗余<br/>→ 跨聚合数据解耦"]
  end
  subgraph L2["第二层:微服务内部的解耦"]
    B1["DDD分层架构<br/>→ 层间职责边界"]
    B2["facade接口+组装器<br/>→ 核心逻辑与前端解耦"]
    B3["仓储模式(依赖倒置)<br/>→ 领域逻辑与基础资源解耦"]
    B4["聚合目录+分层目录<br/>→ 代码边界,利于拆分重组"]
    B5["应用服务编排<br/>→ 聚合间调用方式解耦"]
    B6["聚合根ID引用<br/>→ 领域对象解耦"]
    B7["事件总线<br/>→ 聚合间同步调用解耦"]
  end
  L1 -.微服务真正物理拆分时首先依赖.-> L2

参考来源

- 位置:第19章《基于DDD的微服务代码详解》"19.9 微服务解耦策略小结"(源文件:_epub-src/OEBPS/Text/chapter4-8-9.xhtml) - 结论依据:原文分两组罗列"微服务或聚合之间的解耦策略"(限界上下文、聚合、领域事件+消息中间件、值对象业务快照数据冗余)与"微服务内的解耦策略"(DDD分层架构、facade接口+组装适配、仓储模式依赖倒置、代码目录聚合+分层边界、应用服务组合编排、聚合根ID引用、事件总线数据最终一致性),本卡片按原文分组结构完整转述并配图,直接支撑卡片内容。 - 原始内容:限界上下文实现了不同业务领域边界的微服务物理边界的解耦。聚合实现了微服务内不同聚合之间逻辑边界的解耦。微服务之间通过领域事件和消息中间件,以数据最终一致性的策略,实现了微服务之间的异步调用和服务解耦……DDD分层架构,通过分层和不同层的职责边界定义,实现了微服务内各层职能和代码的解耦……仓储模式通过依赖倒置策略,实现了核心领域逻辑与基础资源处理逻辑的解耦。