Профилактика багов
Отслеживать производительность
Как исправить баг
Управление багами
Профилактика багов
Отслеживать производительность
Как исправить баг
Управление багами
Иногда баги вызваны производительностью приложения или связанных с ним компонентов: баз данных, кэшей, очередей отложенных задач и прочих.
В Издательстве бюро
Авторы жалуются, что в черновиках книг перестали генерироваться превьюшки разворотов. В оглавлении висят пустые развороты, что сильно дезориентирует.
Превьюшки генерирует безголовый Хром — полноценный браузер без графического интерфейса, которым управляют программно через АПИ. Чтобы сгенерировать превьюшку, бэкенд издательства открывает указанный разворот в безголовом Хроме, делает скриншот и пережимает его до нужных размеров.
Этот процесс занимает пять‑шесть секунд, поэтому превьюшки генерируются лениво и асинхронно. Когда разворот изменяется, бэкенд удаляет старую превьюшку. Когда автор открывает книгу, его браузер запрашивает превьюшку. Если превьюшки нет, бэкенд добавляет в очередь отложенных заданий задачу «Сгенерировать превьюшку» и просит браузер повторно запросить превьюшку попозже.
Чтобы понять, почему превьюшки не генерируются, заглядываем в метрики очереди задач. В очереди уже около миллиона таких задач. Скриншоты не успевают сгенерироваться за десять секунд, процесс прерывается, задача снова встаёт в очередь. Фронтенд не получает превьюшку и просит бэкенд сгенерировать её, добавляя проблемных задач в очередь.
Чтобы понять, почему скриншоты не успевают сгенерироваться за десять секунд, заглядываем в логи скриншотилки: Хром не дожидается ответа от бэкенда. Заглядываем в метрики бэкенда: контроллер, отдающий книгу Хрому, большую часть времени тратит на сверку и синхронизацию изменений в книге.
Убираем сверку и синхронизацию: скриншотилке достаточно последней доступной версии разворота. Скриншоты снова нормально генерируются.
Без отслеживания производительности приложения и его инфраструктуры понять причину этой проблемы было бы трудно: пришлось бы вслепую угадывать, в чём дело.
Чтобы отслеживать производительность приложений и инфраструктуры, программисты придумали целый класс приложений, APM — application performance monitoring. Самые популярные из них:
Кроме того, систему мониторинга производительности можно собрать самим из Prometheus и Grafana.
Важный момент: если хотите, чтобы от метрик была польза, их мало отслеживать — никто не станет после каждого деплоя следить за всеми доступными графиками. Настройте автоматические оповещения о проблемах с производительностью и убедитесь, что их читают и на них реагируют.
Ещё по теме
P. S. Это был совет о веб‑разработке. Хотите знать всё о коде, тестах, фронтенд‑разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.