我正在设计一个基于微服务的应用程序,其中有一些服务使用来自MySQL db的信息。有两种服务-预订服务和支付服务。
付款服务需要从订票服务处获得信息。
如何使用MySQL进行设计,同时为两个服务保留单独的数据库?如何在独立数据库上的两个表之间强制执行关系约束?
P.S:我正在使用Spring来设计web服务。
发布于 2018-07-12 05:14:11
在微服务中,没有什么叫做关系一致性,您的系统最终应该是一致的。
让我们来看看你的例子,你有两个有差异的微服务。数据库
现在,假设有人创建了一个预订,现在想要支付预订使用支付服务。
您一定认为这是付款服务,我应该检查预订是否存在,或者预订是否取消。
上述验证是可以实现的,但不是100%,而不需要在服务之间造成很高的依赖性,这违背了微服务的原则。
让我举一个例子:
现在,由于临时系统处于不一致的状态,您应该做的是从预订服务(如BookingCancelled )上的事件中,检查我们是否接受了付款,是的,然后开始支付反向过程,而不是一次检查所有事情。
选择一个最终一致的系统,在这个系统中,两个服务都彼此监听事件,并试图保持一致。
发布于 2018-07-11 20:08:45
建议微服务使用不同的数据库并维护自己的数据(PolyglotPersistence)。
API之间的数据共享应该通过API来实现。
在这种情况下,如果支付服务需要预订详细信息,则应该通过调用预订服务API来检索详细信息。
要了解更多细节,请看Martin的链接 to microservices文章。
https://stackoverflow.com/questions/51292640
复制相似问题