如何设计一个基于微服务的应用程序,每个微服务都有自己的数据源?

时间:2018-07-11 19:09:48

标签: java spring-boot microservices rdbms

我正在设计一个基于微服务的应用程序,其中有一些服务使用MySQL数据库中的信息。有两种服务-预订服务和付款服务。

付款服务需要预订服务中的信息。

如何使用MySQL设计此功能,同时为两个服务保留单独的数据库?如何在独立数据库中的两个表之间实施关系约束?

P.S:我正在使用Spring Boot设计Web服务。

2 个答案:

答案 0 :(得分:1)

建议微服务使用不同的数据库并维护自己的数据(PolyglotPersistence)。

跨API的数据共享应通过API进行。

在这种情况下,如果付款服务需要预订详细信息,则应通过调用预订服务API来检索详细信息。

有关更多详细信息,请参阅Martin Fowler撰写的link到微服务文章。

答案 1 :(得分:1)

在微服务中,没有什么被称为关系一致性,您的系统应该最终成为一致性。

让我们来看一下,您有两个带有diff的微服务。数据库

  • 预订
  • 付款

现在可以说有人创建了一个预订,现在想使用付款服务为预订付款。

您必须认为这是付款服务,我应该检查预订是否存在或是否取消预订。

在没有在服务之间建立非常高级别的依赖关系的情况下,可以实现上述验证,但不能达到100%,这违反了微服务的原理。

让我给你一个例子:

  1. 有人在付款过程中取消了预订-假设您在通过“预订服务”检查了“确定”后确定在付款服务中处理付款,而在付款过程中有人取消了预订

现在,在这种情况下,系统暂时处于不一致状态,您应该做的是从Booking Service上的事件(如BookingCancelled)中进行检查,检查我们是否付款了,是的,然后开始进行付款反向处理,而不是检查所有内容一次。

  

选择最终的一致系统,两个服务都在其中侦听   彼此之间发生事件并试图保持一致。