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?

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

  • dist-12-consistency
Case Study: Google Docs

0

1

Войти