聚合必须是一致的吗?

时间:2013-02-12 10:21:44

标签: domain-driven-design aggregateroot event-sourcing eventual-consistency dddd

我在DDD上阅读的所有内容都暗示聚合中的状态必须非常一致。

这意味着如果需要冗余,则只能使用强一致性复制(例如2PC,3PC或Paxos)。

您是否可以使用最终一致的复制,如多主机或主机?如果您确实使用它们,那么您在DDD术语中仍然是“聚合”吗?这是常见的事情吗?

1 个答案:

答案 0 :(得分:3)

聚合本身需要保持一致,但相关聚合最终可以相互一致。事实上,最终的一致性是分布式场景中DDD的常见范例。聚合可以被认为是一致性边界。这意味着聚合的定义必须是一致的,而不是对现实的纯粹反映。

例如,聚合上的行为可以发布域事件,然后在外部发布。该事件的带外处理程序最终可以使整个系统进入一致状态。很多时候,最终的一致性是一个完全可以接受的业务约束,特别是因为最终的一致性在现实中更为普遍。

请查看Effective Aggregate Design by Vaughn Vernon了解更多信息。

<强>更新

最终应根据具体情况评估聚合的一致冗余。一些总量将非常适合解决冲突,可能采用自然补偿行动。这些类型的冲突将以类似于CQRS式冲突的方式解决,其中需要补偿操作以使系统进入一致状态。与CQRS一样,应该与领域专家讨论最终一致性的影响。