18 марта с 18:33 до 18:46 (мск) для 15% клиентов наблюдалась недоступность сервиса api.mindbox.ru
Корневая причина недоступности — ошибка конфигурации приложения при развертывании кластера в kubernetes
Во время инцидента на пострадавших проектах синхронные запросы расчета и сохранения заказов, операции получения информации по клиенту, а также операции персонализации сайтов завершались с ошибками.
В нашей инфраструктуре мы используем сервера (kubernetes nodes) для обработки запросов и поддержания работы наших сервисов. В рамках работ по расширению кластера в kubernetes мы обновили конфигурацию этих серверов, увеличив их мощность для повышения надежности системы.
В процессе развертывания обновлений (деплоя) было запущено большое количество подов – это отдельные компоненты или "рабочие единицы", которые обрабатывают запросы. Поскольку нода была новой и не использовалась до этого, на ней было значительное количество свободных ресурсов. В результате развертывания на нем запустилось большое количество подов с новой версией приложения.
Размещение подов по серверам основывается на среднем потреблении ими ресурсов во время работы, однако поды используют больше ресурсов при запуске, чем во время обычной работы. Это привело к чрезмерной нагрузке на центральный процессор и, как следствие, к отказу сервера.
Все входящие запросы в API проходят через наш API Gateway. Этот сервис отвечает за роутинг запросов в конкретные конечные сервисы. Чтобы не допустить каскадный отказ всего API-гейта мы используем паттерн Circuit Breaker. Он отслеживает вызовы к внешнему сервису и при обнаружении слишком большого количества неудачных попыток временно блокирует вызовы, предотвращая тем самым падение всей системы. Этот отказ затронул примерно 10% трафика, что привело к тому, что Circuit Breaker отключил часть вызовов, уменьшив радиус отказа.