Параллельные платежи Microservices на тот же счет - PullRequest
0 голосов
/ 28 июня 2018

Допустим, у нас есть микросервис транзакций, который переводит деньги с одного счета на другой, используя mysql в качестве хранилища данных.

Допустим, есть запрос под названием K для перевода денег со счета A на счет B. Существует также еще один запрос Z со счета A на счет C одновременно для перевода денег. Мой вопрос заключается в том, какую стратегию должна использовать микросервисная транзакция, когда аккаунт B заблокирован во время обработки? Должен ли запрос Z истечь и вернуть ошибку, должен ли запрос Z выполнить несколько раз?

1 Ответ

0 голосов
/ 04 июля 2018

Решение для финансовых транзакций: 1. Любая транзакция на счете A - это помещение в очередь, которая должна иметь учетную запись A в транзакции. Давайте назовем эту очередь QueueA. Существует некоторый код, который будет обрабатывать транзакции в QueueA, возможно, в отдельном потоке. 2.Если есть новый запрос на транзакцию, проверьте учетные записи, вовлеченные в транзакцию. Если существует очередь с одной из учетных записей, добавленных в нее, добавьте эту транзакцию в эту очередь, если не создайте новую очередь, и добавьте транзакцию туда.

Идея состоит в том, чтобы линеаризовать обработку транзакций на одном и том же счете. Это предотвращает блокировку и тайм-аут соединения с базой данных. Кроме того, используйте оптимистическую блокировку базы данных, добавив столбец версии в каждую таблицу. Это обеспечивает целостность данных в финансовых системах, а не пессимистическую блокировку, которая может привести к тайм-ауту соединений с базой данных.

...