System Design Space
Граф знанийНастройки

Обновлено: 24 марта 2026 г. в 13:28

Frontend system design кейс: Design Google Docs collaborative editor

hard

Практический frontend-кейс: коллаборативный редактор в стиле Google Docs, real-time синхронизация, конфликт-резолвинг, offline-first и UX при сетевых сбоях.

Коллаборативный редактор ценен тем, что быстро снимает иллюзию, будто фронтенд - это только слой отображения. Как только в браузере появляются общий документ, курсоры других пользователей и offline-first режим, интерфейс становится полноправным участником распределенной системы.

Глава помогает увидеть, как real-time синхронизация, разрешение конфликтов, локальное состояние, сетевые сбои и понятный UX сцеплены друг с другом. Это хороший материал, чтобы почувствовать, насколько сильно фронтенд зависит от выбранной модели консистентности и протокола взаимодействия.

В интервью и design review этот кейс удобен, когда нужно обсуждать realtime и local-first не абстрактно, а через конкретные решения о reconciliation, optimistic UI, восстановлении после разрыва связи и том, что пользователь должен видеть в каждый момент времени.

Практическая польза главы

Практика проектирования

Переводите знания о реалтайм-коллаборации, синхронизации состояния и конфликт-резолюции в конкретные решения по composition, ownership и runtime-поведению клиентской системы.

Качество решений

Оценивайте архитектуру по измеримым эффектам: скорость delivery, стабильность UI, observability, цена изменений и эксплуатационные риски.

Interview articulation

Стройте ответ как цепочку problem -> constraints -> architecture -> trade-offs -> migration path, с явной аргументацией frontend-выбора.

Trade-off framing

Фиксируйте компромиссы вокруг реалтайм-коллаборации, синхронизации состояния и конфликт-резолюции: масштаб команды, технический долг, performance budget и долгосрочная поддержка.

Context

Frontend Architecture Overview

Кейс про collaborative editor показывает пределы frontend-архитектуры в real-time мультиплеерных сценариях.

Открыть главу

Design Google Docs collaborative editor требует точной синхронизации между клиентами, предсказуемого UX при задержках сети и корректного разрешения конфликтов без потери пользовательских правок.

Problem & Context

Пользователи одновременно редактируют один документ и ожидают, что изменения других участников появляются почти мгновенно. Система обязана сохранить намерения каждого редактора даже при конфликтных правках, reconnect и офлайн-режиме.

Functional requirements

  • Совместное редактирование одного документа несколькими пользователями в реальном времени.
  • Показ курсоров/выделений других участников и индикаторов присутствия.
  • Undo/redo на клиенте без разрушения глобальной консистентности документа.
  • Offline edit с последующей синхронизацией изменений после восстановления сети.

Non-functional requirements

  • Задержка применения удаленного изменения в UI: желательно < 200ms.
  • Высокая устойчивость к временным network partition и reconnect storm.
  • Сохранность истории операций и защита от потери пользовательского ввода.
  • Масштабируемость по активным документам и числу участников в одном документе.

Scale assumptions

Active documents

5M+/day

Большинство документов малые по размеру, но есть heavy collaborative sessions.

Concurrent editors per doc

1-50 typical, 200 peak

Архитектура должна корректно работать и в асимметричных сессиях с большим числом участников.

Ops throughput

10k-50k ops/s global

Пиковые окна обычно связаны с учебными/рабочими часовыми поясами.

Reconnect burst

x3 baseline

После локального сетевого сбоя часть клиентов пытается отправить буферизованные операции одновременно.

Related

Consistency & Idempotency

Collaborative editing напрямую зависит от корректной модели консистентности и обработки повторов операций.

Открыть главу

Architecture

Realtime gateway

WebSocket/WebTransport слой для bidirectional доставки операций и presence-событий.

Collaboration engine

Применяет OT/CRDT правила, валидирует версию документа, сериализует операции и рассылает подписчикам.

Document state store

Хранит snapshot + operation log; поддерживает recovery, replay и point-in-time reconstruction.

Client sync module

Локальный буфер неподтвержденных операций, ack tracking и reconciliation после reconnect.

Deep dives

OT vs CRDT

OT обычно проще интегрировать в централизованный серверный pipeline; CRDT лучше для peer/offline сценариев, но увеличивает metadata overhead.

Ordering and causality

Сервер должен deterministically сериализовать конкурентные операции. Клиент применяет трансформации и версии, чтобы исключить divergence.

Offline-first sync

Локальные операции применяются оптимистично, затем отправляются батчами. При конфликте - rebasing и повторная валидация состояния документа.

Presence channel separation

Presence-ивенты (cursor/mouse/typing) отделяются от документных операций: можно агрессивно дропать без потери данных документа.

Trade-offs

Сильная server-side координация упрощает консистентность, но повышает зависимость от центрального collab engine.

Полный operation log удобен для аудита и отладки, но может дорого стоить по storage и replay latency.

Более частые snapshots ускоряют recovery, но увеличивают write overhead на storage.

Агрессивная компрессия операций экономит bandwidth, но усложняет дебаг и диагностику инцидентов.

References

Связанные главы

  • Clock Synchronization - Понимание временных допущений полезно для ordering и отладки конфликтов в collaborative editing.
  • Консистентность и идемпотентность - Ключевая база для корректной обработки повторной доставки и replay операций.
  • Event-Driven Architecture - Коллаборативный редактор использует event-driven поток операций и async обработку состояния.
  • Service Discovery - Realtime gateway и collaboration engine требуют устойчивого discovery и маршрутизации.
  • Design Instagram Feed - Контраст двух frontend-кейсов: read-heavy feed vs write-heavy collaborative editor.

Чтобы отмечать прохождение, включи трекинг в Настройки