Orm 解决微服务之间的设计依赖关系

Orm 解决微服务之间的设计依赖关系,orm,microservices,Orm,Microservices,我正在使用微服务方法设计一个电子商务应用程序,使用ORM(JPA)为一个名为OrderService的微服务进行数据持久化。OrderService拥有与持久化和报告订单相关的功能,基本上包括客户和产品信息。客户和产品功能由不同的微服务管理。 我的问题是ORM层OrderService需要POJO,它属于ProductService和CustomerService。处理服务之间的这种依赖关系的最佳方法是什么?应用程序是否需要以不同的方式设计?在设计微服务时,这是一种相当常见的情况。大多数微服务都

我正在使用微服务方法设计一个电子商务应用程序,使用ORM(JPA)为一个名为OrderService的微服务进行数据持久化。OrderService拥有与持久化和报告订单相关的功能,基本上包括客户和产品信息。客户和产品功能由不同的微服务管理。
我的问题是ORM层OrderService需要POJO,它属于ProductService和CustomerService。处理服务之间的这种依赖关系的最佳方法是什么?应用程序是否需要以不同的方式设计?

在设计微服务时,这是一种相当常见的情况。大多数微服务都需要通过其他微服务或外部提供商访问可用数据

处理这一问题的最佳方法是将每个微服务设计为一个“独立”的应用程序,并将所有其他微服务视为它的外部

因此,微服务1(M1)的开发人员必须检查微服务2(M2)规范,并为从那里获取的数据编写简单的POJO类。就像他使用Facebook这样的外部API一样。
请注意,M1将始终与M2对话(例如通过REST),而不会直接与DB对话以获取所需的数据


理想情况下,每个微服务都有自己的数据库(或中央数据库的部分克隆)

在尝试找到解决方案时,应该考虑的事情很少 1.您无法访问其他服务的数据库,必须拨打电话。 2.您应该尽量不要将来自其他服务的数据保存到您的服务中。重复数据会导致状态不一致,如果可以,应避免重复数据 3.当需要时,您应该能够从其他服务查询数据

现在有了这些要点,我将主要把来自其他服务的数据限制在一些引用ID上(这些ID应该是不可变的)。在ORM层,我将只获取引用ID,并通过对相关服务(业务层)进行API调用来扩充它们


你可能会意识到你打电话的次数太多了,比如说用客户ID把客户姓名转给客户服务,如果是这样的话,你可以考虑在系统中保存一些信息。但要小心。您保存的数据不应是易变的,并确保您在拨打该电话时进行了尽职调查。

最近,我了解了许多微服务的设计原则,并认识到CQRS-ES和最终一致的数据复制是解决此问题的最佳解决方案。我们尽量使通信异步,仅在必要时才在微服务之间使用点对点同步通信

我同意你的方法,即使它不符合ORM的概念。有什么方法可以在数据库级别维护引用完整性吗?我想我们应该摆脱这种耦合。通过引入引用完整性,我们迫使这两个人沿着某些路线进行交流。因此,我不确定是否有,如果有,他们如何帮助。这促使我思考这个问题,但我不知道现在是否有任何事情