Вопрос проверяет понимание распределённого трейсинга и инструментов наблюдаемости для отслеживания запросов через несколько микросервисов.
В микросервисной архитектуре запрос пользователя может проходить через десятки сервисов. Без специальных инструментов невозможно понять, где возникла задержка или ошибка. Наблюдаемость (observability) — это способность измерять внутреннее состояние системы по её внешним выходам. Трейсинг (tracing) — ключевой компонент, который отслеживает путь конкретного запроса.
Каждый запрос получает уникальный trace ID. При переходе между сервисами этот ID передаётся в заголовках HTTP или через брокеры сообщений. Каждый сервис создаёт span — единицу работы с временными метками. Все spans собираются и связываются в дерево.
const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');
const { SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-base');
const { JaegerExporter } = require('@opentelemetry/exporter-jaeger');
const provider = new NodeTracerProvider();
provider.addSpanProcessor(new SimpleSpanProcessor(new JaegerExporter()));
provider.register();
const tracer = provider.getTracer('example-service');
app.get('/api/data', (req, res) => {
const span = tracer.startSpan('handle-request');
span.setAttribute('http.method', 'GET');
// ... обработка запроса
span.end();
res.send('OK');
});Вывод: распределённый трейсинг обязателен для production-микросервисов. Он помогает быстро находить узкие места и сбои, особенно при высокой нагрузке и сложной топологии сервисов.