解决微服务之间的设计依赖性

时间:2018-11-08 14:39:03

标签: orm microservices

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

3 个答案:

答案 0 :(得分:1)

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

现在有了这些要点,我将主要将来自其他服务的数据限制为某些参考ID(应该是不变的)。在ORM层,我将获取参考ID并通过对相关服务(业务层)进行API调用来膨胀它们。

您可能会意识到您正在打来太多电话,说要使用客户ID向客户服务获取客户名称,如果是这样,您可能会考虑将其中的某些信息保存在系统中。但是要小心。您保存的数据不应不稳定,并确保在进行该调用时已进行了尽职调查。

答案 1 :(得分:0)

在设计微服务时,这是相当普遍的情况。大多数微服务将需要访问通过其他微服务或外部提供商提供的数据。

解决此问题的最佳方法是将每个微服务设计为“单独的”应用程序,并将所有其他微服务都视为外部应用。

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

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

答案 2 :(得分:0)

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