知识卡片

聚合与上下文与微服务的事务层级

结构图卡 · 1976.y

内容

考虑事务处理需理清聚合、限界上下文、微服务三者关系:一个限界上下文可能含多个聚合,一个微服务可能含多个限界上下文;反之绝不允许一个聚合分散在不同上下文,更不用说微服务。同一进程内的聚合协作可用本地事务确保强一致;跨进程的聚合协作则用柔性事务保证最终一致。每个聚合有其事务边界,同一微服务/上下文内的领域对象必在同一进程边界内。发散:事务策略的选择完全由”协作双方是否跨进程”决定,而这又由聚合与上下文的归属关系决定——理清归属,事务边界自然浮现。

结构图:

flowchart TB
    MS[微服务=进程边界] --> BC1[限界上下文1]
    MS --> BC2[限界上下文2]
    BC1 --> AGA[聚合A·事务边界]
    BC1 --> AGB[聚合B·事务边界]
    AGA -->|同进程协作| LT[本地事务·强一致]
    AGB -->|跨进程协作| ST[柔性事务·最终一致]

参考来源

- 位置:《解构领域驱动设计》第18章《领域驱动设计的战略考量》18.4(源文件:_epub-src/OEBPS/031.xhtml) - 结论依据:原文说明上下文含多聚合、微服务含多上下文、聚合不可跨上下文,并以图18-15说明同进程用本地事务、跨进程用柔性事务。 - 原始内容:同一进程中的聚合A与聚合B……之间的协作可考虑采用本地事务,确保数据的强一致性;聚合B和聚合C的协作为跨进程通信,可考虑采用柔性事务保证数据的最终一致性。