Files
huncode 6c96a2a338
Build and deploy / deploy (push) Successful in 13s
revise September 2020 tracing articles
2026-07-31 11:47:30 +03:00

15 KiB
Raw Permalink Blame History

Сентябрь 2020 — тройное ревью автономного пакета P31 «Трассировка запроса»

Статус: принят независимым редактором в выпусковой набор. В revision нет date и author; слой публикации сохраняет их из базового архива. Автономный авторский пакет не менял registry, articles.json, стандарт, очередь, package configuration или Git.

Проверенные revision:

  • editorial-2020-09-practice-tracing-basics;
  • editorial-2020-09-mechanism-tracing-basics;
  • editorial-2020-09-field-tracing-basics.

Модуль экспортирует ровно три revision. При --print-revisions stdout содержит только JSON. При --verify-fixture запускается только in-memory модель одного synthetic trace; она не открывает сеть, не читает production-журнал и не вызывает collector.

Проход 1. Факты, историческая рамка и механизм — пройдено

Утверждение или решение Первичный / официальный источник Зафиксированная граница
Trace Context Level 1 — W3C Recommendation от 06 февраля 2020 года, а не черновик сентября 2020 W3C Trace Context Level 1, 2020-02-06 Тексты называют готовым именно переносимый format traceparent, а не «готовую трассировочную платформу».
Для version 00 traceparent несёт version, 32-hex trace-id, 16-hex parent-id и trace-flags; нулевые ID невалидны W3C Trace Context, sections 3.2–3.2.2 Учебный parser принимает только 00, lowercase hex, ненулевые ID и 00/01 flags; он не притворяется generic parser-ом будущих версий.
В 2020 OpenTelemetry-specification ещё была до 1.0; tag v0.5.0 датирован 02 июня 2020 OpenTelemetry Specification v0.5.0 changelog Пакет не приписывает сентябрю 2020 стабильный collector, auto-instrumentation, service map или version-independent SDK.
Официальная документация относит стабильность Trace API к началу 2021 года OpenTelemetry Libraries Это редакционная историческая сверка: текст сентября 2020 остаётся transport-neutral учебным разбором, а не ретроспективной инструкцией по современной экосистеме.

Техническая модель повторно сверена после авторского прохода:

  • один synthetic trace-id связывает ровно пять span;
  • catalog.lookup получает gateway как parent, а inventory.fetch — catalog;
  • duration считается только как endMs - startMs;
  • child intervals полностью лежат внутри parent intervals в пределах fixture;
  • pricing и inventory перекрываются, поэтому их duration не суммируются;
  • выбранный fixture critical path — gateway.handle → catalog.lookup → inventory.fetch → inventory.adapter;
  • exclusive segments выбранной цепочки равны 40 + 30 + 100 + 70 = 240 ms, то есть root duration;
  • invalid all-zero trace-id и зарезервированный 09 flags отвергаются.

Выполнен --verify-fixture. Реальный результат содержит восемь истинных assertions: round-trip traceparent, получение текущего parent child-операцией, общий trace-id, положительные intervals, ожидаемый critical path, совпадение exclusive суммы с root и два негативных случая. Fixture использует только synthetic IDs, services, интервалы и header: training-gateway, training-catalog, training-inventory и 00-4bf92f3577b34da6a3ce929d0e0e4736-a111111111111111-01.

Вердикт прохода: пройден. Поправлена дополнительная техническая граница: version 00 fixture больше не принимает произвольный двухсимвольный flags byte; 01 остаётся примером sampled bit, но не policy, которой должен доверять публичный вход.

Проход 2. Редактура, голос М3 и плотность — пройдено

Revision Проблема и цена в первых двух абзацах Главный вопрос Голос и следующий шаг
Практика Логи есть, но 240 ms не разложены; правка timeout/retry/базы по догадке увеличивает стоимость следующего сбоя Как сохранить один context и увидеть один учебный waterfall М3 связывает границы gateway, catalog и inventory; сначала проверяет carrier и fixture, затем предлагает один transport test.
Механизм Разные trace-id или потерянный parent создают ложную причинность и неправильного «виновника» Что реально несут trace-id, span-id, parent-id, flags и duration М3 описывает W3C contract и прямую ответственность transport boundary, не выдавая carrier за бизнес-API.
Полевой разбор Самый заметный span провоцирует оптимизацию не той ветви Как отделить inclusive duration от critical path одной истории М3 разбирает controlled fixture, называет overlap и выбирает одну следующую проверку вместо диагноза production-системы.
  • Draft gate после финальной технической правки измерил основной текст без источников: практика — 10 269 знаков, механизм — 11 727, полевой разбор — 9 702. Все три текста попадают в диапазон 5 000–15 000.
  • В каждом revision есть 8–9 смысловых разделов, две таблицы с caption/thead, две figure с осмысленными alt/figcaption, два code/example блока, нумерованный маршрут и три официальные или первичные ссылки.
  • Структура держит краткую последовательность «симптом → причина → проверка → действие». Примеры не подменяют проверку общими словами о важности наблюдаемости.
  • В текст не внесены современные обещания: нет production latency, реального trace или URL, сервиса карт, стабильного tracing platform, готовой collector-конфигурации, автоматического instrumentor-а или наблюдаемого инцидента пользователя.
  • Используется исторически подходящий словарь М3: trace context, span, transport boundary, fixture, overlap и clock skew раскрываются рядом с конкретным действием. Автор учится связать события между сервисами, но не пишет от лица владельца зрелой платформы.

Вердикт прохода: пройден. Тексты сохраняют техническую плотность и соответствуют сентябрю 2020 года без анахронизмов.

Проход 3. Визуал, доступность и выпуск автономного пакета — пройдено в заданных границах

  • tracing-span-waterfall-2020.svg показывает пять intervals на шкале 0–240 ms, overlap pricing/inventory и выделенную позднюю цепочку.
  • tracing-context-propagation-2020.svg показывает отдельные шаги inject/extract, неизменность trace-id и смену текущего span-id без имитации сетевого трафика.
  • tracing-critical-path-2020.svg показывает разницу inclusive и exclusive duration, параллельный pricing и расчёт 240 ms.
  • У каждого SVG есть title, desc, role="img", вертикальный viewBox, контрастные карточки и короткие подписи. Нет JavaScript, foreignObject, внешних URL, data URI или пользовательских данных.
  • Все три SVG отрендерены Sharp при ширине 375 px и просмотрены вручную. Текст, bars и нижние карточки читаемы; обрезания, наложения и горизонтальный overflow внутри SVG не обнаружены. Waterfall оставлен вертикальным именно для этой ширины.

Фактические команды и результаты

cd web
node --check scripts/upgrade-2020-09.mjs
npm run audit:draft -- scripts/upgrade-2020-09.mjs
node scripts/upgrade-2020-09.mjs --verify-fixture
xmllint --noout \
  public/assets/editorial/2020/tracing-span-waterfall-2020.svg \
  public/assets/editorial/2020/tracing-context-propagation-2020.svg \
  public/assets/editorial/2020/tracing-critical-path-2020.svg
Проверка Реальный результат
node --check код завершения 0
Draft audit PASS: 10 269 / 11 727 / 9 702 знаков тела
In-memory fixture 8 assertions вернули true; root duration и selected exclusive path равны 240 ms
XML все три SVG валидны, код завершения 0
375 px visual preflight выполнен через локальный Sharp-render и ручной просмотр; SVG читаемы, без clipping/overflow
Scope/self-review revision не переопределяет date/author; в работе изменены только пять разрешённых файлов P31

Не запускались browser-review опубликенной страницы, реальный HTTP, reverse proxy, browser instrumentation, OpenTelemetry SDK/collector, exporter, clock synchronization, CI, production build, deployment или assistive-technology проверка. Наличие осмысленных alt-текстов и подписей не заменяет проверку скринридером.

Итог

Статус: тройное ревью пройдено, пакет P31 принят к отдельной публикации.

После трёх проходов зафиксированы три существенные границы качества:

  1. W3C Trace Context Recommendation 2020 отделена от незрелости ранней OpenTelemetry-экосистемы; статья не обещает современный platform-level результат.
  2. Fixture проверяет не только красивую схему: он связывает trace context, parent/child relation, duration и exclusive critical path в одном синтетическом запросе.
  3. SVG переделаны как крупные вертикальные схемы и отдельно проверены на ширине 375 px; публикационный слой, архив и чужие незакоммиченные файлы намеренно не затронуты.

Независимая интеграционная приёмка

Основной редактор 31 июля 2026 года подключил три revision к web/data/editorial-revisions.mjs, не меняя базовый articles.json, даты или автора архивных записей. В registry стало 88 revision. Отдельно выполнены:

Проверка после интеграции Реальный результат
Строгий audit трёх slug PASS: 10 269 / 11 727 / 9 702 знаков; у каждой статьи есть figures, tables и code examples
Production build PASS: Next.js собрал 374 статические страницы
Независимый mobile visual review PASS: основной редактор повторно просмотрел три SVG после Sharp-рендера в 375 px; clipping, overlap и overflow не обнаружены

W3C Recommendation от 6 февраля 2020 года сверена независимо по первичному тексту: она действительно описывает перенос контекста через traceparent, но не обещает готовую tracing-платформу. В отчёте не утверждается запуск реального HTTP, proxy, OpenTelemetry SDK/collector, browser или assistive technology.

Выпусковой вердикт: ACCEPT. Commit и push выполняются отдельной публикационной операцией; Git остаётся источником её фактической записи.