advanced

Durable Objects

Координация stateful edge-логики per-key: сессии, коллаборация, rate limiting или строго упорядоченные операции.

Durable Objects (DO) дают single-threaded strongly consistent state по ID — WebSocket-комнаты, collaborative editing, per-user rate limiters или ordered job processing на edge. Каждый инстанс DO сериализует запросы: in-memory state плюс опциональный SQLite без race conditions.

					export class ChatRoom {
  async fetch(request: Request) {
    // один инстанс на roomId — упорядоченная обработка сообщений
    const msg = await request.json();
    this.messages.push(msg);
    return Response.json({ ok: true });
  }
}
// wrangler: new ChatRoom() bound to env.ROOM
				

| Кейс | Зачем DO | |------|----------| | WebSocket hub | Один координатор на комнату | | Rate limiter | Точные counters per-key | | Leader election | Один writer на shard | | Strong ordering | Без lost updates vs KV |

Маршрутизируйте через `idFromName(roomId)`, чтобы один key всегда попадал в один object. DO hibernate при idle; state восстанавливается из storage при пробуждении.

На интервью: DO vs KV vs origin Redis, hibernation, лимиты масштаба на object, архитектура WebSocket и recovery после сбоев.

Типовые ошибки: один DO как global bottleneck; тяжёлый CPU в hot object; забытая persistence при hibernate; DO как универсальная БД.

Компромисс — strong per-key consistency и простая координация против лимитов horizontal scale на object и сложности эксплуатации.

Чеклист:

  • Шардируйте hot keys по многим DO ID.
  • Persist критичный state в DO storage.
  • Быстрая I/O-aware логика внутри object.
  • WebSocket API для real-time fan-out.