Некорректная работа сервиса SMS для 25% клиентов в течение 85 минут

Incident Report for Mindbox

Postmortem

30 ноября с 17:30 до 18:20 и с 19:00 до 19:35 (мск) наблюдалась некорректная работа и недоступность сервиса SMS для 25% клиентов в течение 85 минут.

Корневая причина недоступности — ошибка в legacy-коде. Выкладка нового кода вскрыла проблему некорректной обработки ошибок после передачи сообщений провайдеру, реализованной в 2016 году и некорректной конфигурации механизма быстрого отключения нового функционала, реализованного в 2020 году.

Влияние на клиента

С 17:30 до 18:20 (мск) дублировались отправки SMS-сообщений. С 19:00 до 19:35 (мск) SMS не отправлялись. Большинство запланированных за время инцидента сообщений, за исключением потенциально задублированных, были отправлены

Как выявляли и устраняли инцидент

17:30 – выложен код с ошибкой

17:39 – сработал мониторинг

17:40 – дежурный подключился к диагностике проблемы

18:03 – проблема локализована, начат откат до предыдущей версии кода

18:20 – завершилась выкладка старой версии, новые сообщения отправляются корректно. От клиентов продолжают поступать жалобы о дублях сообщений

19:00 – отключен сервис отправки SMS. Манипуляция проводилась для очистки очереди 1.5 млн потенциальных дублей сообщений

19:35 – выложен релиз, в котором сообщения сформированные в период с 17:30 до 18:20 удаляются без попытки отправки

Отчёт

Для обработки очередей отправки сообщений мы используем брокер RabbitMQ. Серия отказов брокера, влияющих на механики клиентов, привела к переходу на хорошо зарекомендовавшую себя платформу Apache Kafka. На время работ мы оставили RabbitMQ как резервный инструмент с возможностью быстрого переключения на него в непредвиденных ситуациях. Переход между механизмами происходит через сервис переключателей с использованием ключей безопасности.

Такой сервис уже применяется в каналах Email и Mobile Push, завершаются работы в канале SMS. Для отправки SMS-сообщений используется протокол SMPP. Протокол подразумевает, что повторные вызовы приводят к повторной отправке сообщений. Для работы с ним требуется сохранить информацию о попытке отправки сообщения в надежном хранилище до контакта с провайдером.

Код прошёл проверку на тестовом окружении, и был выложен на боевой контур продукта. После применения обновлений на проектах воспроизвелась ошибка, связанная с невозможностью использования переключателя при попытке записи отчёта о контакте с провайдером. Проблема заключалась в некорректной конфигурации ключей безопасности. Тестовое окружение не вскрыло проблему так как было сконфигурировано отлично от боевой среды. Следствием такой ошибки стало отсутствие записи об отправке и повторная отправка сообщения.

Что улучшили

  • Исключили возможность повторной отправки SMS-сообщения. Сохраняем запись о запросе на отправку провайдеру и не повторяем запрос для SMS с такими записями

Что улучшим

  • уточним информацию, передаваемую дежурному при нарушении внутреннего мониторинга, чтобы быстрее определять зону проблемы – декабрь 2023
  • автоматизируем генерацию внутренних ключей безопасности, чтобы исключить возможность генерации ключа с некорректным набором разрешений – 2е полугодие 2024
  • реализуем процесс прогрессивного развертывания обновлений сервиса отправки SMS, чтобы исключить влияние возможных ошибок на всех клиентов одновременно – 2е полугодие 2024
Posted Dec 14, 2023 - 11:05 UTC

Resolved

С 17:30 до 18:20 (мск) наблюдалась некорректная работа сервиса: дублировались отправки сообщений.

С 19:00 до 19:35 (мск) наблюдалась недоступность сервиса. Проводилась принудительная очистка очередей потенциально дублирующихся сообщений.

С 19:35 (мск) сервис работает в штатном режиме.

Некорректная работа была связана с неправильной обработкой ошибки во время отправки SMS. Вернемся с детальным разбором ситуации и следующими шагами в течение двух недель.
Posted Nov 30, 2023 - 17:42 UTC

Update

В настоящий момент сервис работает в штатном режиме.

Команда инженеров продолжает мониторинг работоспособности. Вернёмся с обновлением информации в течение часа.
Posted Nov 30, 2023 - 16:56 UTC

Monitoring

С 17:30 до 18:30 (MSK) наблюдалась некорректная работа сервиса SMS. Ошибка в сервисе приводила к многократной отправке части сообщений.

Команда сервиса откатила изменения, сейчас сервис работает корректно. Вернемся с обновленным статусом через час.
Posted Nov 30, 2023 - 15:40 UTC