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

How to design a microservice based application with each microservice having their own datasource?

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

支付服务需要预订服务的信息。

如何使用 MySQL 进行设计,同时为两种服务保留单独的数据库?如何在不同数据库中的两个表之间强制执行关系约束?

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

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

API 之间的数据共享应该通过 API 进行。

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

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

在微服务中没有所谓的关系一致性,你的系统应该最终一致。

让我们以您的情况为例,您有两个具有差异的微服务。数据库

  • 预订
  • 付款

现在假设有人创建了一个预订,现在想使用支付服务支付预订费用。

你一定在想这是支付服务我应该检查预订是否存在或者预订是否被取消。

如果不在服务之间创建非常高级别的依赖性,则可以实现上述验证但不是 100%,这违反了微服务的原则。

举个例子:

  1. 有人在付款过程中取消了预订 - 假设您在从预订服务检查预订正常后在付款服务中处理付款,而在付款过程中有人取消了预订

现在在这种情况下,系统暂时处于不一致状态,你应该做的是从预订服务上的事件,如 BookingCancelled,检查我们是否接受了付款,是的然后开始支付反向过程,而不是检查所有马上处理。

Go for a eventual consistent system in which both service listen to events to one other and tries to be consistent.