【发布时间】:2023-12-03 06:19:01
【问题描述】:
业务领域有五个高级有界上下文
- 客户
- 应用程序
- 文档
- 决定
- 瓶坯
此外,这些有界上下文具有子上下文,例如文档的排序和交付。尽管该项目由数万个类和数十个 EJB 组成,但大多数业务逻辑都驻留在关系数据库视图和触发器中,原因是:所有业务事务中都涉及大量连接、联合和约束。换句话说,有界上下文之间存在复杂的依赖关系和约束网络,这限制了状态转移。通俗地说:业务规则非常复杂。
现在,如果我要将这个单体架构拆分为每个服务微服务架构的数据库,有界上下文是建议的服务边界,我将不得不使用显式 API 调用来实现所有业务逻辑。我最终会得到数百个 API 来实现所有这些愚蠢的小业务规则。由于性能是主要因素(我们花了很多精力来优化现在的 SQL),所以这是不可能的。其次,在这个不断发展的业务规则网络中维护隔离的 API 可能是一场噩梦,因为数据库触发器实际上支持高内聚和 DRY 心态,透明地执行业务规则。
我得出的结论是微服务架构不适合这种类型的文档管理系统。我是正确的,还是从错误的角度接近这个想法?
【问题讨论】:
-
你为什么想要转向微服务?
-
如果您的微服务拥有自己的数据库并且您将在所有这些数据库中复制数据,那么您可以实现所需的性能。但在你的情况下,这听起来不像是一个选择。要在每个服务中实现更少的 API 方法,您可以使用
specification开发模式。此外,您还可以使用GraphQL之类的东西来减少传输的数据量并简化 API 接口。
标签: database domain-driven-design microservices distributed-computing soa