System Design
Case Study: Google Docs
Real-time Collaboration: вызовы
**Google Docs позволяет:** - Сотням людей редактировать один документ одновременно - Видеть курсоры и изменения других в реальном времени - Работать офлайн и синхронизироваться позже - Сохранять полную историю изменений **Главная проблема:** конфликты при одновременном редактировании
**Два подхода к конфликтам:** | Подход | Описание
| **OT** | Трансформируем операции на сервере | Google Docs | | **CRDT** | Структуры данных сами разрешают конфликты | Figma, Notion | Google Docs исторически использует OT, но CRDT становится популярнее.
Что вы узнали о Real-time Collaboration: вызовы?
Operational Transformation (OT)
**OT - трансформация операций для сохранения intent** Идея: когда операция B приходит после A, мы трансформируем B с учётом A, чтобы intent сохранился.
**Transform Functions:**
Что вы узнали о Operational Transformation (OT)?
CRDT: альтернатива OT
**CRDT - Conflict-free Replicated Data Types** Вместо трансформации операций: - Структура данных сама гарантирует конвергенцию - Не нужен центральный сервер - Работает при partition и офлайн
**OT vs CRDT:** | Аспект | OT
| **Сервер** | Обязателен для ordering | Опционален | | **Offline** | Сложно | Нативная поддержка | | **Корректность** | Prove transforms | Prove merge function | | **Память** | Меньше (позиции) | Больше (IDs для каждого символа) | | **Примеры** | Google Docs | Figma, Notion, Yjs |
Что вы узнали о CRDT: альтернатива OT?
Архитектура Google Docs
**Компоненты системы:** 1. **Client** - редактор в браузере 2. **Collab Server** - OT processing, session management 3. **Storage** - документы и история 4. **Presence** - курсоры, selections 5. **Comments/Suggestions** - отдельный слой
**Client-Server Protocol:**
Что вы узнали о Архитектура Google Docs?
Presence и Cursors
**Real-time Presence:** - Cursor position каждого пользователя - Selection highlights разными цветами - Avatar/name при hover - Instant updates (WebSocket)
**Cursor Position After OT:** Проблема: после трансформации операций позиции курсоров тоже должны обновиться!
Что вы узнали о Presence и Cursors?
Offline Support
**Offline Editing:** 1. Service Worker кеширует документ 2. IndexedDB хранит локальные изменения 3. При восстановлении связи - синхронизация 4. OT разрешает конфликты с server state
Что вы узнали о Offline Support?