System Design
Case Study: WhatsApp
WhatsApp: масштаб и принципы
**WhatsApp в цифрах:** - 2+ миллиарда пользователей - 100+ миллиардов сообщений в день - 180+ стран - 50 инженеров поддерживали систему до 2014 **Принципы дизайна:** 1. Минимализм (маленькая команда) 2. Erlang/OTP для concurrency 3. Efficient protocol (не HTTP) 4. End-to-end encryption
**Почему Erlang?** | Свойство
| **Lightweight processes** | Миллионы concurrent connections | | **Hot code reload** | Deploy без downtime | | **Fault tolerance** | "Let it crash" philosophy | | **Distribution** | Built-in clustering | | **Soft real-time** | Predictable latency | Erlang создавался для телекоммуникаций - идеально для messaging.
Что вы узнали о WhatsApp: масштаб и принципы?
Connection Management
**Persistent Connections:** - Каждый клиент держит постоянное TCP соединение - Используется XMPP-подобный бинарный протокол - Heartbeat каждые 30-60 секунд - Один сервер обслуживает ~2M соединений
**Оптимизации соединений:** 1. **Binary protocol** (не JSON/XML) - Меньше данных = меньше battery drain - Быстрее парсинг 2. **Compression** (zlib) - Сжатие повторяющихся паттернов 3. **Connection multiplexing** - WhatsApp Web через один канал с телефоном 4. **Graceful reconnect** - Клиент сохраняет state, продолжает с той же точки
Что вы узнали о Connection Management?
Message Delivery
**Message Delivery Semantics:** - **At-least-once** delivery (с дедупликацией на клиенте) - Store-and-forward для offline пользователей - Сообщения НЕ хранятся на сервере после доставки - Offline storage: до 30 дней
**Offline Message Queue:**
Что вы узнали о Message Delivery?
End-to-End Encryption
**Signal Protocol (Double Ratchet):** - Даже WhatsApp не может читать сообщения - Forward secrecy: компрометация ключа не раскрывает старые сообщения - Post-compromise security: после восстановления - новые сообщения защищены
**Что шифруется:** | Данные
| Текст сообщения | E2E | | Медиа (фото/видео) | E2E (key передаётся в сообщении) | | Голосовые звонки | E2E (SRTP) | | Статусы | E2E | | Backup в iCloud/Google | Опционально E2E | **Что НЕ шифруется E2E:** - Метаданные (кто, кому, когда) - Телефонные номера контактов
Что вы узнали о End-to-End Encryption?
Presence и Typing Indicators
**Real-time Presence:** - Online/Offline/Last seen - Typing indicator - Recording voice message indicator Это ephemeral data - не хранится, только broadcast.
**Privacy Settings влияют на presence:**
Что вы узнали о Presence и Typing Indicators?
Media Handling
**Медиа-файлы обрабатываются отдельно:** 1. Клиент шифрует медиа локально 2. Загружает зашифрованный blob на сервер 3. Отправляет ключ и URL получателю (в E2E сообщении) 4. Получатель скачивает и расшифровывает
**Media Optimizations:** 1. **Progressive download:** показываем blur placeholder 2. **Thumbnail in message:** маленький preview inline 3. **Auto-download settings:** WiFi only / Always / Never 4. **Media TTL:** файлы удаляются с сервера после скачивания 5. **Compression:** изображения/видео сжимаются перед отправкой
Что вы узнали о Media Handling?