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