Серия "Улучшение наблюдаемости API" (Часть 3): Трассировка

March 19, 2024

Technology

Введение

Что такое распределенная трассировка?

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

Процесс использования трассировки в API

Изначально необходимо развернуть агент трассировки или SDK для трассировки на входе каждого сервиса, чтобы захватывать все запросы. С помощью данных трассировки мы можем четко наблюдать время обработки запросов в каждом сервисе, тем самым выявляя потенциальные узкие места в производительности. Распределенная трассировка не только записывает нормальную обработку запросов, но и фиксирует любые исключения и ошибки, возникающие в процессе. Визуализируя данные распределенной трассировки, мы можем интуитивно понять поток запросов между различными сервисами и компонентами.

Трассировка API7 Enterprise

Улучшение наблюдаемости - Распределенная трассировка

В отношении распределенной трассировки вот несколько методов для улучшения наблюдаемости API, а также конкретные примеры:

1. Выбор подходящих инструментов и технологий распределенной трассировки

При выборе инструментов распределенной трассировки следует учитывать ваш технологический стек, бизнес-требования и сложность мониторинга. Zipkin, SkyWalking и OpenTelemetry являются популярными решениями для распределенной трассировки, каждое из которых имеет свои уникальные особенности.

2. Интеграция распределенной трассировки в разработку API

Для Zipkin и SkyWalking интеграция в разработку API может быть достигнута путем добавления соответствующих зависимостей и конфигураций. Однако для OpenTelemetry требуется ручное создание и управление контекстом трассировки с использованием его API.

3. Настройка и оптимизация систем распределенной трассировки

Zipkin, SkyWalking и OpenTelemetry могут быть настроены через конфигурационные файлы. Можно установить такие параметры, как частота выборки, конфигурация хранилища данных и оптимизация передачи данных. Кроме того, важно определить правила оповещения для своевременного реагирования на исключительные события.

4. Анализ и визуализация данных

Zipkin, SkyWalking и OpenTelemetry предоставляют интерфейсы визуализации для отображения данных распределенной трассировки и метрик производительности. Например, в интерфейсе Zipkin можно искать и просматривать конкретные данные трассировки, чтобы понять поток запросов между различными сервисами. Дашборд SkyWalking предлагает общий обзор производительности и график вызовов сервисов. Данные OpenTelemetry могут быть импортированы в различные инструменты визуализации, такие как Grafana, для создания пользовательских дашбордов и графиков.

5. API7 Enterprise интегрирует плагины распределенной трассировки

API7 Enterprise поддерживает несколько плагинов трассировки, включая Zipkin, OpenTracing и SkyWalking. Эти плагины трассировки необходимо привязывать к правилам маршрутизации или глобальным правилам. Если нет требований к частоте выборки, рекомендуется привязывать их к глобальным правилам, чтобы избежать пропусков.

Плагины наблюдаемости API7 Enterprise

Практический анализ случая: Улучшение наблюдаемости API электронной коммерции

В процессе просмотра и покупки товаров на платформе электронной коммерции задействовано несколько вызовов API. Например, пользователи сначала вызывают API сервиса товаров для получения списка товаров, затем выбирают конкретный товар и вызывают API сервиса заказов для создания заказа, и, наконец, вызывают API сервиса оплаты для завершения платежа.

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

  1. Выбор инструментов распределенной трассировки: Команда выбрала SkyWalking в качестве инструмента распределенной трассировки благодаря его поддержке нескольких языков, простоте интеграции и богатым возможностям визуализации.

  2. Интеграция SkyWalking: Сервис заказов разработан на Java, и команда интегрировала Java Agent SkyWalking в код сервиса заказов. Это позволяет SkyWalking автоматически собирать данные трассировки при вызове API сервиса заказов.

  3. Настройка SkyWalking: Команда настроила хранилище данных SkyWalking на Elasticsearch и установила подходящую частоту выборки, чтобы сбалансировать уровень детализации данных трассировки и затраты на хранение.

  4. Сбор и анализ данных трассировки: В периоды пиковой нагрузки команда наблюдала цепочку вызовов и метрики производительности API сервиса заказов через интерфейс SkyWalking. Они обнаружили, что определенный вызов API сервиса инвентаризации товаров занимал значительно больше времени в процессе создания заказа, становясь узким местом в производительности.

  5. Детальное исследование: Команда дополнительно изучила подробные данные трассировки API сервиса инвентаризации товаров, включая параметры вызова, возвращаемые результаты и информацию об исключениях. Они обнаружили, что API выполнял сложный запрос к базе данных при обработке определенных товаров, что приводило к увеличению времени обработки.

  6. Меры оптимизации: Чтобы решить эту проблему, команда реализовала две меры оптимизации. Во-первых, они оптимизировали запросы к базе данных для повышения эффективности запросов. Во-вторых, они внедрили кэширование для API сервиса инвентаризации товаров, извлекая результаты напрямую из кэша для часто запрашиваемых и редко изменяющихся товаров, тем самым избегая ненужных запросов к базе данных.

Заключение

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

Связанные блоги

Tags: