awesome-everything EN
↑ Обратно к восхождению

Сети и протоколы

Edge workers и edge-side composition

Суть Как V8-изоляты на edge CDN выполняют кастомную логику за 2–5 мс холодного старта, и как ESI и HTMLRewriter собирают ответы из независимо-кешированных фрагментов.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

Страница товара требует глобально-кешированного тела (TTL 10 минут), персонализированной цены в реальном времени (без кеша, получается на edge на каждого пользователя) и общего счётчика комментариев (TTL 60 секунд). Если всё три отправлять к origin на каждый запрос — p95 задержка 300 мс. Если собирать страницу на edge из трёх независимо-кешированных фрагментов — она падает до 30 мс. Вот обещание edge-side composition.

Edge workers: вычислительная модель

Все крупные CDN теперь запускают пользовательский код на edge — не только статические файлы:

  • Cloudflare Workers: V8-изоляты. Холодный старт 2–5 мс p99. Лимит памяти 128 МБ. 50 мс CPU wall-time на запрос (расширяется с Workers Unbound). Тысячи клиентских функций разделяют один V8-процесс через изоляцию — минимальные накладные расходы на запуск функции.
  • Fastly Compute@Edge: WebAssembly. Холодный старт аналогичен Workers.
  • AWS Lambda@Edge: полный рантайм Node.js/Python. Холодный старт 400–600 мс на некоторых региональных POP — штраф 100× против Workers для latency-sensitive путей.
  • Vercel Fluid Compute (2026): V8, персистентные тёплые инстансы, параллельная обработка запросов внутри одного изолята. 99.37% запросов без холодного старта. В 1.2–5× быстрее Workers для тяжёлого SSR (рендеринг шаблонов, сборка больших страниц). Бюджет wall-time 50 мс.
Сравнение рантаймов edge workers (2026)
Холодный старт Cloudflare Workers (p99)
2–5 мс
Холодный старт Lambda@Edge (некоторые PoP)
400–600 мс
Доля запросов без холодного старта Vercel Fluid
99.37% запросов
Бюджет CPU wall-time Workers
50 мс на запрос
Лимит памяти Workers
128 МБ
Модель изоляции Workers
Тысячи клиентов на один V8-процесс

Сценарии применения edge workers

Workers стоят в пути запроса и могут делать всё, что прокси — с кодом:

  • Auth на edge: проверить JWT или session token на edge POP без round-trip к origin. Отклонять невалидные запросы до того, как они достигнут серверов.
  • A/B-тест маршрутизация: читать cookie пользователя или experiment ID и переписывать URL запроса в /variant-a/ или /variant-b/ на edge.
  • Гео-редирект: Workers имеют доступ к коду страны пользователя (заголовок Cloudflare CF-IPCountry) — редиректить / на /en/ или /de/ без участия origin.
  • Мутация запроса/ответа: добавлять security-заголовки (Strict-Transport-Security, X-Content-Type-Options) ко всем ответам без изменения origin.
  • Динамическая маршрутизация: обращаться к нескольким микросервисам, объединять ответы, возвращать merged JSON — всё внутри edge POP, не в центральном регионе.

Бюджет wall-time 50 мс

Workers ограничивают CPU-время до 50 мс на запрос. Это исключает: инференс больших ML-моделей, ресайзинг больших изображений, тяжёлые запросы к базам данных. Допускает: валидацию JWT (~1 мс), переписывание URL (~0.1 мс), KV-lookup (~3 мс), простые HTML-мутации (~5 мс). Проектируйте workers как тонкие слои маршрутизации/auth/мутации, а не вычислительно-тяжёлые бэкенды.

Почему это работает

Почему V8-изоляты, а не контейнеры. Традиционный serverless (Lambda) требует отдельного процесса или контейнера на функцию — запуск занимает 400–600 мс. V8-изоляты — эффективные по памяти песочницы внутри одного V8-процесса: каждый изолят имеет свою кучу, нет разделяемого изменяемого состояния, но разделяют стоимость запуска процесса. Модель Cloudflare: тысячи клиентских функций разделяют один запущенный V8-процесс. Холодный старт нового изолята стоит 2–5 мс, не 400 мс. Гарантия изоляции — криптографическая (V8-сандбокс), а не на уровне OS-процесса — это приемлемо для CDN-нагрузок с недоверенным клиентским кодом.

TLS resumption на edge

Новое TLS-соединение стоит 1 RTT (~10 мс локально на edge). Возобновление сессии через TLS 1.3 PSK (pre-shared keys) пропускает хендшейк при переподключении. Современные CDN реплицируют session tickets по всем POP: если пользователь подключился к POP A, затем переподключается через POP B (смена мобильной сети), POP B уже имеет session ticket — нет повторного хендшейка. Важнее всего на мобильных устройствах (частые хэндоверы между вышками).

Edge-side composition (ESI и HTMLRewriter)

ESI (Edge Side Includes), W3C draft 2001, по-прежнему в production у Akamai. HTML-ответы содержат плейсхолдеры <esi:include src="/fragment/nav" />, которые edge заменяет на закешированные фрагменты перед отправкой браузеру. Каждый фрагмент имеет свой cache key и TTL — shared nav кешируется 6 часов; баннер срочных новостей — 30 секунд.

Современная замена: Cloudflare Workers + HTMLRewriter API. Worker получает HTML-ответ и использует потоковый HTML-парсер HTMLRewriter для вставки фрагментов в конкретные DOM-позиции — быстрее и гибче ESI.

Объединяющая идея: собирать страницу на edge из независимо-кешированных частей. Страница товара:

  • Хром страницы (шапка, подвал, навигация): max-age=21600 (6 часов)
  • Описание товара: max-age=600 (10 минут)
  • Цена: получается свежей из регионального pricing-сервиса на каждый запрос (~30 мс)
  • Персонализированный виджет рекомендаций: из KV-хранилища по user-id (~3 мс)

Результат: полная страница собирается на edge за ~35 мс, нет round-trip к origin для 80% байт.

Проследи
1/4

Страница checkout e-commerce требует обязательных вычисленных на edge ставок налога и доставки. Edge worker получает их из регионального микросервиса при cache miss. Оптимизируйте для cold-load сценариев.

1
Step 1 of 4
Шаг 1: что является критическим путём от запроса пользователя до ответа?
2
Locked
Шаг 2: ставки налога/доставки не кешируются (зависят от почтового индекса). Но можно параллелизировать. Как?
3
Locked
Шаг 3: память edge worker 128 МБ. Все региональные таблицы ставок хранятся в KV, чтобы избежать fetch. Почему это может создать проблемы?
4
Locked
Шаг 4: вы оптимизировали worker до 15 мс wall-time. Как убедиться, что пользователи выиграли?
Найди ошибку

Алерт деградации производительности edge worker

log
$ curl -w "@format.txt" https://api.example.com/checkout
  time_starttransfer: 450ms
  time_connect: 12ms
  time_tls: 2ms
  time_firstbyte: 428ms

Edge diagnostics via worker:
Server-Timing: edge-worker=185ms; regional-service=240ms; kv-lookup=3ms

Worker logs (2026-05-15):
handler_start=0ms
kv_fetch=3ms
regional_service_start=5ms
regional_service_timeout=185ms
handler_end=188ms
total_wall_time=188ms (budget: 50ms × 4 extensions used)

Edge worker использует 4× бюджет wall-time, пользователи видят 450 мс ответы. В чём узкое место?

Выбери лучший вариант

E-commerce сайт должен раздавать страницы товаров глобально с миллисекундной точностью обновления цен. Выберите стратегию кеширования.

Вспомните перед уходом
  1. 01
    Почему Cloudflare Workers достигает холодного старта 2–5 мс, а Lambda@Edge — 400–600 мс?
  2. 02
    Опишите edge-side composition для новостной страницы с shared хромом, баннером срочных новостей (свежесть в течение 30 с обязательна) и телом статьи (5 мин устаревания ок).
  3. 03
    Что такое бюджет wall-time 50 мс в Cloudflare Workers и что он исключает?
Итог

Edge workers выполняют кастомный код на CDN POP с использованием V8-изолятов (Cloudflare Workers: холодный старт 2–5 мс p99) или WebAssembly. Они обеспечивают валидацию auth, A/B-маршрутизацию, гео-редирект, мутацию запроса/ответа и real-time fetch фрагментов без round-trip к origin. Бюджет wall-time 50 мс ограничивает вычислительно-тяжёлые задачи — они принадлежат региональным Functions. Edge-side composition (ESI или Workers + HTMLRewriter) собирает ответы из независимо-кешированных фрагментов — хром страницы кешируется часами, персонализированные или real-time данные получаются свежими на запрос — объединяя эффективность кеша статических ассетов с свежестью динамических данных. Холодный старт Lambda@Edge 400–600 мс дисквалифицирует его для latency-sensitive путей; Vercel Fluid Compute достигает 99.37% запросов без холодного старта через тёплые изоляты. Репликация TLS session tickets по POP амортизирует стоимость переподключений на мобильных.

Связанные уроки
встречается в162
Продолжить восхождение ↑CDN: операции и observability
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.