Перейти к основному содержимому

LSR из-за 'минорного бекенда'

·257 слов·2 минут
Оригинал опубликован в Telegram

Неожиданная связь

Я рассказывал об инциденте с неправильным ключом или о Кассандре. Сегодня пойдет речь о более серьезном инциденте — LSR с нашим внешним сервисом.

Начало “традиционное”: сработали мониторинги → увеличились тайминги → сервис перестал обрабатывать нагрузку.

Проблема видна как внутренним, так и внешним пользователям. SRE кричит на опенспейс “ФАКАП!". 

Девопсы включились в работу:

  • трафик не изменился
  • подозрительные запросы отсутствуют
  • в логах нет ничего подозрительного

Вдруг проблема исчезает так же неожиданно, как и появилась. Сидим в непонимании и пытаемся локализовать проблему.

Заходит коллега из соседней команды: — Слушайте, я тут отключаю минорный бекенд. Там трафика — “слёзы”. Отключил, но сразу откатил, т.к. увидел у вас проблему. Это я вас задел? — Нет. Это точно не связано. Можно вырубать. — Ага. Тогда я через минут 10 опять его вырублю.

Коллега ушел, а мы продолжили расследование инцидента. Проходят 10 мин.

Срабатывают мониторинги → увеличиваются тайминги → сервис через пару минут перестанет обрабатывать нагрузку.

Таких совпадений не бывает! Пишем коллеге, чтобы вернул свой бекенд в строй. Проблема исчезает.

Оказалось, что наш сервис использовал отключаемый бекенд глубоко в “кишках” сервиса. Этот фрагмент кода написан много лет назад и жил по принципу “работает — не трогай”. Вызов бекенда был без таймаута, т.е. если бекенд не отвечал, то сервис ждал неразумное время. Также не было никакого логирования, что сильно усложнило диагностику.

В рамках LSR исправили проблему и настроили правильную деградацию сервиса.

Мораль: Bus factor — безумно важен! Если вам достался сервис в наследство, то разберите его на кирпичики. Это поможет вовремя наложить заплатку и не допустить инцидента в будущем.