【问题标题】:Microservices Concurrent Payments on The Same Account同账户微服务并发支付
【发布时间】:2018-06-27 21:02:50
【问题描述】:

假设我们有一个交易微服务,它使用 mysql 作为数据存储将资金从一个账户转移到另一个账户。

假设有一个名为 K 的请求从账户 A 向账户 B 转账。同时还有另一个请求 Z 从账户 A 向账户 C 转账。我的问题是,当账户 B 在处理过程中被锁定时,事务微服务应该使用什么策略?请求 Z 是否应该超时并返回错误,是否应该请求 Z 尝试多次?

【问题讨论】:

    标签: concurrency locking microservices


    【解决方案1】:

    金融交易的解决方案是: 1.账户 A 上的任何交易都被放入队列中,该交易中必须有账户 A。让我们将此队列称为 QueueA。有一些代码将处理 QueueA 上的事务,可能是一个单独的线程。 2.如果有新的交易请求,请查看交易涉及的账户。如果有一个添加了其中一个帐户的队列,则将该事务添加到该队列中,如果没有,则创建一个新队列并在那里添加该事务。

    这个想法是对同一帐户上的交易处理进行线性化处理。这可以防止数据库连接阻塞和超时。此外,通过在每个表上添加版本列来使用乐观数据库锁定。这可确保金融系统中的数据完整性,而不是可能导致数据库连接超时的悲观锁定。

    【讨论】:

      猜你喜欢
      • 2017-12-14
      • 2018-08-06
      • 2021-01-08
      • 1970-01-01
      • 2011-04-20
      • 2015-03-25
      • 2011-12-03
      • 2020-03-27
      • 2016-03-25
      相关资源
      最近更新 更多