8 февраля с 12:23 до 12:55 (мск) для 100% клиентов наблюдалась недоступность сервиса api.mindbox.ru.
Корневая причина недоступности — ошибка при обновлении внутреннего сервиса, необходимого для работы синхронного и асинхронного API.
С 12:23 до 12:48 (мск) для 100% клиентов заканчивались ошибками 4хх и 5хх все синхронные вызовы к api.mindbox.ru. Для 1% клиентов недоступность продолжалась до 13:47 (мск).
С 12:43 до 12:55 (мск) для 100% клиентов все асинхронные вызовы API заканчивались ошибками 4хх.
Мы обеспечиваем защиту API от неавторизованного доступа и гибкую настройку механик благодаря точкам интеграции. Через них проходят все запросы к асинхронному и синхронному API. Для проверки подлинности каждого запроса мы сверяем точку и секретный ключ. При обнаружении несоответствия операция не выполняется и отправляется сообщение об ошибке.
Сервис точек интеграции в нашей архитектуре изолирован и большинство обновлений не затрагивает его производительность. С другой стороны, изменения в нём требуют скоординированных обновлений во всех компонентах API. В ходе оптимизации асинхронного API мы обновили контракт сервиса точек интеграции, который также используется для синхронного API.
Процесс обновления состоит из создания новой версии контракта, перехода всех сервисов на неё и последующее удаление старой версии. При выполнении алгоритма не было учтено использование устаревшего контракта другими сервисами и следовательно невозможность удаления версии. Это привело к сбою взаимодействия синхронного API.
Новая версия асинхронного API могла функционировать только с обновленным контрактом сервиса точек интеграции, что вызвало его недоступность до завершения откатов старых версий сервисов. За время инцидента 1% клиентов успел закешировать невалидные данные точек интеграции. Попытка очистить кэш перезапуском работающей версии синхронного API не помогла, поэтому была выполнена выкладка предыдущей версии кода.