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?