2 апреля с 15:30 до 18:00 (мск) наблюдался отказ в работе массовых и автоматических рассылок.
Корневая причина – отказ брокера очередей, отвечающего за отправку сообщений из-за отключения механизма очистки памяти при изменении архитектуры сервиса.
До 50% транзакционных сценариев выполнялись с задержкой:
Операции отправки авторизационных и регистрационных кодов во время отказа заканчивались ошибками в 50-100% случаев. Массовые рассылки отправлялись со скоростью ниже целевой
14:17 – отказал 1 брокер кластера
14:25 – дежурный инженер получил уведомление о недоступности брокера
14:30 – произвели аварийную перезагрузку пострадавшего брокера
14:45 – кластер вернулся к штатной работе
15:30 – начался каскадный отказ брокеров кластера
16:15 – кластер потерял 6 брокеров, к починке подключились SRE-инженеры
16:25 – выявили причину отказа кластера и приступили к масштабированию брокеров
17:43 – работоспособность транзакционных сценариев полностью восстановлена
17:52 – работоспособность операций отправки авторизационных и регистрационных кодов полностью восстановлена
18:00 – все брокеры масштабированы до целевой конфигурации, кластер функционирует в штатном режиме, массовые рассылки достигли целевой скорости отправки
Мы используем брокер очередей Apache Kafka в качестве системы-посредника для отправки рассылок. Для обеспечения пропускной способности отправки сообщений используется специальный алгоритм очистки занятых ресурсов, опирающийся на информацию о статусе рассылок.
Мы упустили перенос этого механизма при работах по улучшению инфраструктуры сервиса. Это вызвало рост количества очередей сообщений для массовых рассылок. Достижение критического объёма очереди привело к отказу кластера Apache Kafka, отвечающего за отправки рассылок.
После локализации проблемы мы добавили каждому брокеру в кластере ресурсы для восстановления работоспособности кластера и вручную очистили занятые уже отправленными рассылками ресурсы.
Изолировали рассылки друг от друга, разместив очереди в три независимых кластера Apache Kafka: