Существует ли известное архитектурное решение для ситуаций с высокой степенью распределенности OLTP, где применяются предварительные условия? Например, давайте использовать банковский пример. Лицо A хочет перевести N долларов лицу B. Предварительным условием для успеха этого является то, что лицо A должно иметь на своем счету более N долларов.
С точки зрения лица А, они входят в какое-то веб-приложение. Они создают перевод от себя лицу B на сумму N долларов. Имейте в виду, что в фоновом режиме деньги снимаются и вносятся со счета лица А в режиме реального времени по мере применения и создания перевода. Деньги могут существовать до создания, но после применения перевода их может и не быть. Другими словами, это не может быть проверка на стороне клиента. Человек А хотел бы знать, что эта передача прошла успешно или не удалось синхронно. Человек А не хотел бы отправлять перевод асинхронно, а затем возвращаться позже в очередь или к какому-либо уведомлению о том, что перевод не удался.
Существует ли известная архитектура, решающая эту проблему в больших масштабах? Если все учетные записи находятся в одной СУБД, вы можете сделать что-то подобное с помощью встроенных транзакционных возможностей. Но если вы используете в конечном счете согласованное хранилище данных в стиле NoSQL или инфраструктуру на основе журналов/сообщений, такую как Kafka, есть ли известное решение подобных проблем?