Баг, который почти стоил денег пользователя
Работая с финтех-сервисами и инвестиционными системами, я убедился в одной простой вещи: самые опасные баги — это не падения приложения.
Самые опасные — тихие ошибки в данных.
Один из кейсов, с которым я сталкивался — проблема синхронизации статусов операции между микросервисами.
Что происходило:
API возвращал пользователю статус операции как завершённую, хотя в другом сервисе операция всё ещё находилась в обработке.
При определённой последовательности действий пользователь мог:
• повторно отправить операцию • увидеть некорректный баланс • получить дублирование транзакций
Проблема проявлялась только:
— при высокой нагрузке — при асинхронной обработке — при задержках между сервисами
Найти её получилось только через:
• интеграционное тестирование • анализ логов через Kibana • проверку данных в PostgreSQL
После этого кейса я всегда уделяю особое внимание:
— синхронизации микросервисов — повторным запросам — idempotency операций
Интересно, сталкивались ли вы с похожими кейсами в микросервисной архитектуре?