database - 微服务不适合业务领域?

标签 database domain-driven-design microservices distributed-computing soa

业务领域有五个高级限界上下文

  • 客户
  • 申请
  • 文件
  • 决定
  • 预制件

此外,这些限界上下文具有子上下文,例如文档的排序和交付。尽管该项目由成千上万个类和数十个 EJB 组成,但大多数业务逻辑都驻留在关系数据库 View 和触发器中,这是有原因的:所有业务事务中都涉及大量连接、联合和约束。换句话说,有界上下文之间存在复杂的依赖关系和约束网络,这限制了状态传输。通俗地说:业务规则非常复杂。

现在,如果我要将这个整体拆分为每个服务微服务架构的数据库,有界上下文是建议的服务边界,我将不得不使用显式 API 调用来实现所有业务逻辑。我最终会得到数百个 API 来实现所有这些愚蠢的小业务规则。由于性能是主要因素(我们用很多努力来优化 SQL,就像现在一样),这是不可能的。其次,在这个不断发展的业务规则网络中维护隔离的 API 可能是一场噩梦,因为数据库触发器实际上支持高内聚和 DRY 心态,透明地执行业务规则。

我得出的结论是微服务架构不适合这种类型的文档管理系统。我是正确的,还是从错误的角度接近这个想法?

最佳答案

首先,您不必拥有微服务架构。我真心的!如果管理人员/架构师命令这样做,但它并没有解决您遇到的任何实际问题,那么您可能会反对。

话虽这么说,并且免责声明我不知道您的应用程序的确切要求,将“事物”作为限界上下文是一种气味。因此,将“客户”、“应用程序”、“文档”等作为服务很可能是错误的做法。

限界上下文不应该是对特定实体的 CRUD 操作。它们应该是整个应用程序的完全独立(或尽可能独立)的“垂直”部分。最好有自己的数据库 GUI。它们还应该彼此独立运行,不需要其他服务的输入来做出自己的决定。

它与以数据为中心的设计完全相反,其中表/字段和关系是核心概念。在这里,功能是核心概念。您必须按照功能拆分您的应用程序才能实现良好的分离。

我可以想象一个文档管理系统具有这些独立的限界上下文/服务:搜索工作流编辑等。

您可以这样想:搜索 不需要来自任何其他服务的任何(同步)输入。它可能会定期接收新文档的更新,甚至是近期的更新,但这并不影响它的主要功能:搜索已经索引的文档。 GUI 也是独立的,类似于带有搜索框的类似 google 的页面。它可以独立提供结果,并会在您单击结果时链接工作流编辑应用。

其他人也同样独立。同样,关键是以一种使它们独立工作的方式拆分服务。如果没有,微服务只会让事情变得更糟。

关于database - 微服务不适合业务领域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48921774/

相关文章:

java - Java应用程序无法连接到MySQL数据库

c# - 在关系数据库中保存任何类型的对象

domain-driven-design - 我们应该由多个有界上下文使用多少个事件存储?

jakarta-ee - 微服务设计中生成JPA实体

microservices - 相对于 Activiti 5,Core Activiti 6 和 Activiti 7 中可用的附加功能是什么

php - 如何从选定字段列表构建 SQL 查询?

php - Laravel 4 - 用于生产的 MySQL 用户配置

object - DDD : Classify entity/value object

不同限界上下文聚合根之间通信的.net实现

spring - 在微服务架构中,Auth Server 是否应该与 User Service 结合?