问题描述
我对最终一致的(EC)微服务系统的影响有疑问。
想象一下,我们有一个预订系统-用户服务A 和预订服务B 。每个服务都有其自己的数据库。想象一下,系统同时为不同的用户并发预订同一资源。假设我们有一个运行时验证系统来检查并发预订。
由于EC机制,数据库中的更新被延迟了,因此监视器是否有可能无法在B处实现并发预订?
解决方法
在您的示例中,Booking Service
是(可能是)是否可以预订该资源的真相之源。因此,该服务应明确允许第一个预订请求发生而拒绝第二个预订请求。
在这种情况下,“先来先服务”是必要条件,您希望有一个中间状态,该状态将等待Booking Service
的响应并仅在以下情况下更新User Service
:已收到回复。
如果正确设置了体系结构,则User Service
不应直接调用Booking Service
-它应该通过消息传递平面进行通信。这样,当User
单击“立即预订”时,您可以生成resourceBookingRequested
消息并将其提交到队列。您将确认此请求已排队给用户,并将其UI更新为“正在等待预订确认...”或类似的内容。
一旦接受或拒绝预订,User Service
就会订阅生成的消息并更新UI(和/或执行其他操作,例如发送电子邮件),以使用户知道他们的请求成功还是失败。 t。