Оптимизация производительности начинается с определения ключевых показателей, обычно связанных с задержкой и пропускной способностью. Добавление мониторинга для сбора и отслеживания этих метрик выявляет слабые места в приложении. С помощью показателей можно провести оптимизацию для улучшения показателей эффективности.
Кроме того, многие инструменты мониторинга позволяют настраивать оповещения для ваших показателей, чтобы вы получали уведомления о достижении определенного порогового значения. Например, вы можете настроить оповещение, которое будет срабатывать, если доля неудачных запросов превысит нормальный уровень более чем на X%. Инструменты мониторинга помогут вам определить, как выглядит нормальная производительность, и выявить необычные всплески задержки, количества ошибок и других ключевых показателей. Возможность отслеживать эти показатели особенно важна в критические для бизнеса периоды или после того, как новый код был передан в производство.
Как определить показатели задержки
Убедитесь, что интерфейс реагирует на действия пользователя максимально быстро. Помните, что к мобильным приложениям предъявляются ещё более высокие требования. Задержку также следует измерять и отслеживать для внутренних сервисов, особенно потому, что она может привести к проблемам с пропускной способностью, если ее не контролировать.
Рекомендуем отслеживать следующие показатели:
- Продолжительность запроса
- Продолжительность запроса на уровне подсистемы (например, вызовы API).
- Продолжительность работы
Определите показатели пропускной способности
Пропускная способность – это общее количество запросов, обработанных за определенный период времени. На пропускную способность может влиять задержка подсистем, поэтому для улучшения пропускной способности может потребоваться оптимизировать задержку.
Вот несколько показателей, которые мы рекомендуем отслеживать:
- количество запросов в секунду
- Объем данных, передаваемых за секунду.
- Количество операций ввода-вывода в секунду
- использование ресурсов, например ЦП или памяти;
- Размер очереди обработки, например издатель-подписчик или количество потоков.
Не только среднее значение
Распространенная ошибка при измерении производительности – смотреть только на среднее значение. Это полезно, но не дает представления о распределении задержки. Лучше отслеживать процентили производительности, например 50-й, 75-й, 90-й и 99-й процентили для показателя.
Обычно оптимизация выполняется в два этапа. Сначала оптимизируйте задержку для 90-го процентиля. Затем рассмотрим 99-й процентиль, также известный как хвостовая задержка: небольшая часть запросов, выполнение которых занимает гораздо больше времени.
Отслеживание на стороне сервера для получения подробных результатов
Для отслеживания показателей обычно предпочтительно профилирование на стороне сервера. Серверную часть обычно гораздо проще настроить, она позволяет получить доступ к более детализированным данным и меньше подвержена сбоям из-за проблем с подключением.
Мониторинг браузера для комплексного анализа
Если ваша интеграция Google Ads API предоставляет конечным пользователям веб-интерфейс, профилирование браузера может дать дополнительную информацию о взаимодействии с пользователем. Вы можете узнать, какие страницы медленно отвечают на запросы, и сопоставить эти данные с результатами мониторинга на стороне сервера.
Google Аналитика также позволяет отслеживать время загрузки страниц с помощью отчета о времени загрузки страниц. В нем есть несколько полезных представлений, которые помогут вам понять, как пользователи взаимодействуют с вашим сайтом. В частности, это:
- Время загрузки страницы
- Время загрузки переадресации
- Время ответа сервера
Мониторинг в облаке
Существует множество инструментов, которые можно использовать для сбора и отслеживания показателей эффективности приложения. Например, вы можете использовать Google Cloud Logging, чтобы регистрировать показатели эффективности в проекте Google Cloud, а затем настроить панели в Google Cloud Monitoring, чтобы отслеживать и сегментировать зарегистрированные показатели.
В руководстве по ведению журналов приведен пример специального перехватчика журналов gRPC, написанный для клиентской библиотеки Python. В этом примере перехватчик вызывает logger.log_struct(), чтобы отправить словарь Python со структурированными данными журнала в Cloud Logging, который сохраняет их в поле jsonPayload записи журнала:
logger.log_struct({
"method": method_name,
"elapsed_ms": elapsed_milliseconds,
"is_fault": is_fault,
})
На основе этих данных вы можете создавать показатели, которые позволят вам отслеживать работу приложения в Google Cloud Monitoring. Следуйте руководству по пользовательским показателям на основе данных журналов, чтобы создать показатели на основе данных журналов, используя журналы, отправленные в Google Cloud Logging.
Вы также можете использовать клиентские библиотеки Cloud Monitoring, чтобы определить показатели в коде и отправлять их напрямую в Monitoring отдельно от журналов.
Пример показателя на основе данных журналов
Предположим, вы хотите отслеживать значение is_fault, чтобы лучше понимать частоту ошибок в приложении. Поскольку logger.log_struct() записывает структурированные поля словаря в jsonPayload в каждой записи в журнале Cloud Logging, вы можете создать показатель счетчика с названием ErrorCount и фильтром, который соответствует отклоненным запросам, например jsonPayload.is_fault = true.
В Cloud Logging ярлыки позволяют группировать показатели по категориям на основе других данных в журналах. Вы можете настроить ярлык STRING с названием Method в поле jsonPayload.method, отправляемом в Cloud Logging, чтобы разбить количество ошибок по методам Google Ads API.
Настроив показатель ErrorCount и ярлык Method, вы можете создать новую диаграмму в Cloud Monitoring, чтобы отслеживать показатель ErrorCount с основанием группировки по Method.
Оповещения
В Cloud Monitoring и других инструментах можно настроить правила оповещений, которые определяют, когда и как должны срабатывать оповещения на основе ваших показателей. Инструкции по настройке оповещений Cloud Monitoring приведены в руководстве по оповещениям на основе показателей журналов.