Школа
Веб-разработка

Как бороться с багами? Часть пятая: отслеживать производительность

6 авг 2020
👁 5354  
Веб-разработка

Как бороться с багами? Часть пятая: отслеживать производительность

6 авг 2020
👁 5354  
Василий Половнёв
Технический директор бюро
Полезно
 5
5
Непонятно
  
Войдите в Бюросферу, чтобы голосовать

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

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

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

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

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

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

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

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

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

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

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

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

Ещё по теме

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

Веб‑разработка
Полезно
 5
5
Непонятно
  
Войдите в Бюросферу, чтобы голосовать
Отправить
Поделиться
Поделиться
Запинить
Твитнуть

Комментариев пока нет

Цель рубрики — обсуждение вопросов дизайна, веб-разработки, переговоров, редактуры и управления.
Комментарии модерируются. Мы публикуем комментарии, которые добавляют к уже сказанному новые мысли и хорошие примеры.

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