Конструирование микросервиса для выполнения денежных переводов

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

Условие

Необходимо создать микросервис, который:

  • Осуществляет перевод средств между пользовательскими счетами.
  • Обеспечивает атомарность и безопасность всех транзакций.
  • Корректно обрабатывает ошибки, такие как отсутствие достаточного баланса, отсутствие запрашиваемого счёта и прочие исключительные ситуации.

Ответ

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

Проверьте авторизацию отправителя, существование счетов, положительную сумму и валюту. Храните деньги в целых минимальных единицах или точном decimal. В одной транзакции блокируйте счета в стабильном порядке, проверяйте остаток, создавайте проводки и фиксируйте результат операции. Ошибки недостатка средств и отсутствия счёта возвращайте явно. Для уведомлений используйте outbox; перевод между независимыми хранилищами требует отдельного протокола, а не двух несвязанных UPDATE.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее