Иногда баги вызваны производительностью приложения или связанных с ним компонентов: баз данных, кэшей, очередей отложенных задач и прочих.

В Издательстве бюро

Авторы жалуются, что в черновиках книг перестали генерироваться превьюшки разворотов. В оглавлении висят пустые развороты, что сильно дезориентирует.

Превьюшки генерирует безголовый Хром — полноценный браузер без графического интерфейса, которым управляют программно через АПИ. Чтобы сгенерировать превьюшку, бэкенд издательства открывает указанный разворот в безголовом Хроме, делает скриншот и пережимает его до нужных размеров.

Этот процесс занимает пять‑шесть секунд, поэтому превьюшки генерируются лениво и асинхронно. Когда разворот изменяется, бэкенд удаляет старую превьюшку. Когда автор открывает книгу, его браузер запрашивает превьюшку. Если превьюшки нет, бэкенд добавляет в очередь отложенных заданий задачу «Сгенерировать превьюшку» и просит браузер повторно запросить превьюшку попозже.

Чтобы понять, почему превьюшки не генерируются, заглядываем в метрики очереди задач. В очереди уже около миллиона таких задач. Скриншоты не успевают сгенерироваться за десять секунд, процесс прерывается, задача снова встаёт в очередь. Фронтенд не получает превьюшку и просит бэкенд сгенерировать её, добавляя проблемных задач в очередь.

Чтобы понять, почему скриншоты не успевают сгенерироваться за десять секунд, заглядываем в логи скриншотилки: Хром не дожидается ответа от бэкенда. Заглядываем в метрики бэкенда: контроллер, отдающий книгу Хрому, большую часть времени тратит на сверку и синхронизацию изменений в книге.

Убираем сверку и синхронизацию: скриншотилке достаточно последней доступной версии разворота. Скриншоты снова нормально генерируются.

Без отслеживания производительности приложения и его инфраструктуры понять причину этой проблемы было бы трудно: пришлось бы вслепую угадывать, в чём дело.

Чтобы отслеживать производительность приложений и инфраструктуры, программисты придумали целый класс приложений, APM — application performance monitoring. Самые популярные из них:

Кроме того, систему мониторинга производительности можно собрать самим из Prometheus и Grafana.

Важный момент: если хотите, чтобы от метрик была польза, их мало отслеживать — никто не станет после каждого деплоя следить за всеми доступными графиками. Настройте автоматические оповещения о проблемах с производительностью и убедитесь, что их читают и на них реагируют.

Ещё по теме

P. S. Это был совет о веб‑разработке. Хотите знать всё о коде, тестах, фронтенд‑разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.
Веб‑разработка
Отправить
Поделиться
Запинить

Рекомендуем другие советы