我正在设计一个基于微服务的应用程序,其中有一些服务使用MySQL数据库中的信息。有两种服务-预订服务和付款服务。
付款服务需要预订服务中的信息。
如何使用MySQL设计此功能,同时为两个服务保留单独的数据库?如何在独立数据库中的两个表之间实施关系约束?
P.S:我正在使用Spring Boot设计Web服务。
答案 0 :(得分:1)
建议微服务使用不同的数据库并维护自己的数据(PolyglotPersistence)。
跨API的数据共享应通过API进行。
在这种情况下,如果付款服务需要预订详细信息,则应通过调用预订服务API来检索详细信息。
有关更多详细信息,请参阅Martin Fowler撰写的link到微服务文章。
答案 1 :(得分:1)
在微服务中,没有什么被称为关系一致性,您的系统应该最终成为一致性。
让我们来看一下,您有两个带有diff的微服务。数据库
现在可以说有人创建了一个预订,现在想使用付款服务为预订付款。
您必须认为这是付款服务,我应该检查预订是否存在或是否取消预订。
在没有在服务之间建立非常高级别的依赖关系的情况下,可以实现上述验证,但不能达到100%,这违反了微服务的原理。
让我给你一个例子:
现在,在这种情况下,系统暂时处于不一致状态,您应该做的是从Booking Service上的事件(如BookingCancelled)中进行检查,检查我们是否付款了,是的,然后开始进行付款反向处理,而不是检查所有内容一次。
选择最终的一致系统,两个服务都在其中侦听 彼此之间发生事件并试图保持一致。