Real-Time Backend

Edge Computing

Пользователь в Токио видит курсор коллеги с задержкой 250мс - совместное редактирование ощущается как лаг. Перенос WebSocket на Cloudflare edge снизил это до 15мс. Разница между "неудобно" и "незаметно".

  • Figma перенесла multiplayer cursors на Cloudflare Workers - latency снизилась с 80-120мс до 15-30мс для пользователей в Европе и Азии
  • Cloudflare Durable Objects billing: 0.15 USD за миллион WebSocket messages vs аналогичный K8s кластер - в 3-5 раз дешевле за счёт автоматического scaling до нуля
  • Discord использует edge-ноды для voice/video signaling - первоначальная латентность установки WebRTC соединения снизилась с 800мс до 150мс

Edge Computing для real-time: зачем это нужно

Пользователь в Токио подключается к WebSocket-серверу в us-east-1. Round-trip time - 170мс. Каждое сообщение в чате добавляет 340мс latency (туда и обратно). В Slack это незаметно - сообщения редкие. В multiplayer игре это катастрофа.

Edge computing переносит вычисления ближе к пользователю. Cloudflare Workers работают в 300+ точках присутствия по всему миру. Пользователь в Токио подключается к edge-ноде в Токио - latency 5-10мс вместо 170мс.

Но у edge есть фундаментальная проблема: два пользователя в разных городах хотят общаться в одном чате. Их edge-ноды разные. Как синхронизировать state между ними?

Figma в 2022 перенесла multiplayer cursors на Cloudflare Workers - latency движения курсора снизилась с 80-120мс до 15-30мс для пользователей в Европе и Азии. Это сделало совместное редактирование субъективно мгновенным.

В чём основная проблема edge computing для синхронных real-time взаимодействий?

Cloudflare Durable Objects: state на edge

Durable Object (DO) - это singleton объект, который существует в одной конкретной точке присутствия Cloudflare. У него есть persistent storage и он может держать WebSocket соединения. Несколько Workers из разных регионов могут обращаться к одному DO через RPC.

Для чат-комнаты: каждая комната - один DO. Все пользователи этой комнаты подключают свои Workers к одному DO. DO фанаутит сообщения всем подключённым Workers, которые доставляют их пользователям по их локальным соединениям.

Как Durable Objects решают проблему синхронизации state между edge-нодами?

State Management на edge: persistent storage и hibernation

DO имеет встроенный key-value storage с транзакциями. Это не Redis - это локальное хранилище, доступное только этому конкретному DO. Операции синхронные с точки зрения логики DO, но асинхронные под капотом.

Hibernation - ключевая оптимизация стоимости. Если в DO нет активных WebSocket-соединений, Cloudflare выгружает его из памяти. При следующем запросе он восстанавливается из storage. Без hibernation DO потреблял бы ресурсы постоянно.

Что происходит с Durable Object при hibernation?

Latency реальных цифр: когда edge помогает, когда нет

Edge помогает не всегда. Профиль latency зависит от типа взаимодействия. Локальные действия (cursor movement, typing indicator) - выигрывают. Глобальные (сообщение в международный чат) - не так закономерно.

Cursor movement и typing indicators - идеальный кейс для edge: они важны только для пользователей в том же регионе (в реальности - в одном офисе). Для chat messages нужен глобальный fan-out и преимущество edge меньше.

Cloudflare Durable Objects billing: USD 0.15 за миллион WebSocket messages + storage. Для большинства приложений это в 3-5 раз дешевле аналогичного K8s кластера из-за автоматического scaling до нуля. Но при очень высокой нагрузке (100M+ messages/day) K8s может быть дешевле.

Edge computing всегда снижает latency по сравнению с централизованным сервером

Edge снижает latency только для локальных взаимодействий; для глобального fan-out выигрыш меньше и есть случаи когда edge добавляет hop

Если Durable Object находится в us-east-1 (создан первым подключившимся пользователем), а все остальные пользователи в Азии - они всё равно идут через трансокеанский hop к DO. Edge Worker добавляет один hop вместо того чтобы его убрать.

Для какого сценария edge computing даёт наибольший выигрыш в latency?

Итоги

  • Edge computing снижает latency для локальных взаимодействий в 10-20 раз; для глобального fan-out выигрыш меньше
  • Durable Objects - singleton на одной edge-ноде; все Workers из разных регионов обращаются к нему через RPC
  • Hibernation выгружает DO из памяти при отсутствии соединений и восстанавливает из storage при следующем запросе
  • Cursor movement и typing indicators - идеальный кейс для edge; глобальный чат - меньший выигрыш

Связанные темы

Edge computing пересекается с несколькими областями distributed systems

  • CAP теорема — Durable Objects выбирают CP: singleton гарантирует consistency, availability снижается при недоступности ноды
  • Infrastructure (K8s) — Edge как альтернатива K8s для WebSocket: другой trade-off между контролем и операционной сложностью
  • Cost Optimization — Edge billing per-message vs K8s billing per-resource - разные модели с разным breakeven point
  • Feature Flags — Rollout на edge: Cloudflare Workers поддерживают feature flags через Workers KV

Вопросы для размышления

  • Как определить в каком регионе создать Durable Object для комнаты если пользователи равномерно распределены по всему миру?
  • Что произойдёт с DO если Cloudflare edge-нода в регионе DO упадёт - есть ли автоматический failover?
  • Когда стоит предпочесть традиционный K8s кластер вместо Cloudflare Durable Objects для WebSocket?

Связанные уроки

  • net-40-cdn
  • sd-08-cdn
Edge Computing

0

1

Войти