【发布时间】:2019-04-10 13:33:56
【问题描述】:
第一个问题应该是:什么可以帮助我决定我的微服务是否应该包含可能包含多个聚合的整个有界上下文,还是应该只包含一个聚合?
如果微服务包含多个聚合,那么我想到的另一个问题是:微服务应该有多个事务边界(每个聚合一个)还是微服务应该只有一个事务边界(有界上下文)?
也许,这些问题的答案是:视情况而定。但我想有一些理由来做出正确的决定。
我试图实现一个实验性的微服务,它实现了一个由 3 个聚合和每个聚合一个事务边界组成的有界上下文,但我遇到了一些痛点:
- 微服务本身的最终一致性
- 以弹性方式在微服务中对聚合和发布领域事件进行原子更新
- 决定是所有领域事件都应该在外部发布(到其他微服务)还是只发布其中的一部分
- 决定领域事件是否应以集成事件的形式发布,以保持领域模型的纯度
然后我设想了将微服务拆分为多个微服务的可能性,每个聚合一个:
- 发布所有领域事件变得更加自然(无需明确区分领域事件和集成事件)
- 降低了微服务的内部复杂度
我还没有找到一些关于这个主题的文档来指导我做出决策。
编辑:
考虑到有界上下文可以是一组作为合作伙伴一起工作的微服务,并且每个微服务将封装一个且只有一个聚合具有自己的扩展策略,是否有意义?
然后,每个微服务将有一个且只有一个更改原因:聚合。
【问题讨论】:
-
如果你需要在一个事务中使用多个聚合(甚至属于同一个限界上下文或微服务),那么你就是在破坏 DDD 和微服务哲学。这表明设计错误,不应这样做。
标签: domain-driven-design microservices