Ответ
Трассировка запроса (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 для сбора и визуализации.
Пример простого трейса:
[Gateway]Получен HTTP-запрос (span 1).[Auth Service]Проверка токена (span 2).[Order Service]Запрос к БД (span 3).[Payment Service]Вызов внешнего API (span 4). Все эти спаны связаны однимTrace ID, что позволяет увидеть полную картину выполнения.