Что такое трассировка запроса в распределенных системах?

«Что такое трассировка запроса в распределенных системах?» — вопрос из категории Логирование и мониторинг, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Трассировка запроса (Request Tracing или Distributed Tracing) — это метод мониторинга и отладки, который позволяет отследить путь единого запроса (транзакции) через все компоненты распределенной системы (сервисы, базы данных, очереди). Каждый шаг запроса записывается как спан (span), а вся цепочка — как трейс (trace).

Зачем это нужно:

  • Поиск узких мест: Определить, какой именно сервис или запрос вызывает высокую задержку (latency).
  • Отладка ошибок: Проследить полный путь запроса, завершившегося сбоем.
  • Анализ зависимостей: Визуализировать взаимодействие между сервисами.

Как это работает (на примере HTTP): При поступлении запроса генерируется уникальный Trace ID, который передается через все сервисы в HTTP-заголовках. Каждый сервис добавляет свои Span ID.

GET /api/order/123 HTTP/1.1
Host: example.com
X-Request-ID: abc123
Traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01

Ключевые концепции и инструменты:

  • Trace ID: Уникальный идентификатор для всей цепочки запроса.
  • Span ID: Идентификатор отдельной операции внутри трейса.
  • Инструменты: OpenTelemetry (стандарт и SDK), Jaeger, Zipkin для сбора и визуализации.

Пример простого трейса:

  1. [Gateway] Получен HTTP-запрос (span 1).
  2. [Auth Service] Проверка токена (span 2).
  3. [Order Service] Запрос к БД (span 3).
  4. [Payment Service] Вызов внешнего API (span 4). Все эти спаны связаны одним Trace ID, что позволяет увидеть полную картину выполнения.