【问题标题】:Applied Eventually Consistency and Race Conditions应用最终一致性和竞争条件
【发布时间】:2020-09-28 15:29:59
【问题描述】:

我有一个关于最终一致 (EC) 微服务​​系统的影响的问题。

假设我们有一个预订系统 - user-service Abooking-service B。每个服务都有自己的数据库。想象一下,系统同时为不同的用户同时预订相同的资源。假设我们有一个运行时验证系统检查并发预订。

会不会因为EC机制导致数据库中的更新延迟完成而导致B处的并发预订监控器没有实现?

【问题讨论】:

    标签: concurrency runtime microservices verification eventual-consistency


    【解决方案1】:

    在您的示例中,Booking Service 是(推测)资源是否可供预订的事实来源。因此,该服务应该非常清楚地允许发生第一个预订请求并拒绝第二个预订请求。

    在这种情况下,“先到先得”是要求,您需要一个中间状态,等待来自 Booking Service 的响应,并仅在响应已收到时更新 User Service收到了。

    如果您的架构设置正确,User Service 无论如何都不应该直接调用Booking Service - 它应该通过消息传递平面进行通信。因此,当User 点击“立即预订”时,您可以生成resourceBookingRequested 消息并将其提交到队列。您会确认此请求已排队发送给用户,并将其 UI 更新为“等待预订确认...”或类似内容。

    一旦接受或拒绝预订,User Service 将订阅生成的消息并更新 UI(和/或采取其他操作,例如发送电子邮件),以让用户知道他们的请求成功或失败。

    【讨论】:

    • 但是,如果用户因为预订救援服务等紧急情况而无法等待并需要立即响应怎么办?好吧,这不是他为什么有时间选择选项的问题,但是……所以这个 EC 不应该应用于这个设置?但如果它会被应用,那么场景是否可能?我专注于 RV 在微服务系统中可能出现故障的场景,这就是我的想法。
    • 我很难想象你的情景。 “立即响应”是什么意思?您的Booking Service 可以由 UI 直接调用(这应该与User Service 分开),如果不再可用则返回错误。没有比这更直接的了。
    • 立即响应我的意思是,不要让用户等待“等待预订确认...”,而是在请求后直接在“用户服务”进行预订检查。我的意思是 EC 的想法是提高可用性。当我在“用户服务”处进行此预订检查时,这会大大提高可用性吗?
    猜你喜欢
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多