多个限界上下文应该使用多少个事件存储?

How many event storages should we use by multiple bounded contexts?

我目前正在阅读有关 DDD 的内容,但未能找到该问题的答案。如果我们有一个具有多个限界上下文的大型应用程序,那么据我所知,我们应该将每个 BC 实现为一个单独的应用程序。因此,得出每个 BC 都有自己的 UI 和事件存储的结论是合乎逻辑的。我以前认为我们只有一个事件存储,因为根据一些文章(关于 CQRS),它是唯一的事实来源。这些陈述的唯一问题是它们缺乏上下文。那么事件存储是单个限界上下文中还是整个应用程序中的唯一真实来源?

  "Is an ES the single source of truth in a bounded context or in entire application?" 

我猜你说的是系统,因为Bounded Context最简单的解释就是一个应用程序。

 "If we have a large application with multiple bounded contexts"

同一模型中不能有多个限界上下文。限界上下文限制模型。因此,您应该将术语 bounded context 更改为 subdomain,这是正确的。

总之回答你的问题。这取决于。

整个系统的单一事件存储

优点

  • 一处管理
  • 通过CorrelationID很容易看到相关事件
  • 在某些软件中不需要服务发现。所有服务(应用程序)都可以通过单个 ES 进行集成(我说的是真正的 ES,而不是数据存储。)
  • 不需要 cpu/memory

缺点

  • 单点故障(当然你可以扩展它,避免这种情况)
  • 你正在将服务耦合在一起(打破微服务的规则)
  • 有义务在系统生命周期内不更改 ES

每个应用一个事件存储

优点

  • 无单点故障
  • 随应用程序部署
  • 服务之间没有耦合。更多自主权
  • 如果应用程序将被禁用 ES 可以用它来禁用
  • 新服务可以使用新版本甚至不同的 ES

缺点

  • 需要关注和监控的其他数据库
  • 消耗更多cpu/ram
  • 更难管理 correlationID,因为它们在多个 ES 之间拆分
  • 需要一些服务发现。对于订阅多个ES或者需要额外的消息队列