Деньги списаны, а заказ не создан: что описать в требованиях
Сценарий оформления заказа: сервис заказов синхронно вызывает платёжный сервис, получает подтверждение списания, затем сохраняет заказ в своей БД — и падает на сохранении.
В результате деньги у клиента списаны, заказа в системе нет. Единой транзакции между двумя сервисами не существует.
Что должен описать системный аналитик в требованиях к сценарию?
- Объединить оба шага в одну транзакцию БД, подключив платёжный сервис к той же транзакции приложения
- Поменять шаги местами: сначала создать заказ, потом списать деньги — тогда рассогласование исчезнет само
- Компенсирующий сценарий: при сбое сохранения выполняется возврат платежа, статусы заказа явные, повтор идемпотентен
- Повторять сохранение заказа в цикле до успеха: база данных рано или поздно ответит и заказ сохранится
