Concurrency 微服务在同一账户上同时支付

Concurrency 微服务在同一账户上同时支付,concurrency,locking,microservices,Concurrency,Locking,Microservices,假设我们有一个交易微服务,它使用mysql作为数据存储将资金从一个帐户转移到另一个帐户 假设有一个名为K的请求将资金从帐户a转移到帐户B。还有另一个请求Z同时从帐户a转移到帐户C以转移资金。我的问题是,当帐户B在处理过程中被锁定时,事务微服务应该使用什么策略?是否应请求Z超时并返回错误,是否应请求Z重试多次?金融交易的解决方案是: 1.账户A上的任何交易都被放入一个队列中,该队列中必须有账户A。让我们把这个队列称为QueueA。有一些代码将在QueueA上处理事务,可能是一个单独的线程。 2.如

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


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

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

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