Курс «Архитектура мессенджера»
Бесплатный курс по архитектуре мессенджера: 22 раздела о постоянных соединениях, доставке сообщений, шардировании, E2EE и звонках. Подготовка к System Design собеседованиям. Текстовая версия — для чтения и поиска; тот же материал доступен в интерактивном тренажёре с тестами, флеш-карточками и сборкой схемы.
Часть 1 · Картина целиком
Фундамент: чем мессенджер архитектурно отличается от обычного «запрос — ответ», как очертить требования и рамки задачи и какие API торчат наружу. На эту картину опирается всё остальное.
- Раздел 1. Что такое мессенджер с точки зрения архитектурыЧем мессенджер отличается от обычного веб-сервиса; почему нужны постоянные соединения, а не модель «запрос — ответ»; ключевые сущности (пользователь, устройство, чат, сообщение); знакомство с главным тренажёром.
- Раздел 2. Требования и рамки задачиФункциональные требования (диалоги, группы, статусы, медиа); нефункциональные (масштаб, задержка, доступность, консистентность); прикидка нагрузки (DAU, сообщений в секунду, объём хранилища); как сужать scope прямо на интервью.
- Раздел 2A. API-ручки (эндпоинты)Что такое ручка-эндпоинт; как вывести API из требований; HTTP против WebSocket по направлению.
Часть 2 · Соединение и доставка
Сердце курса. Как клиент держит постоянное соединение, какой путь проходит сообщение онлайн и офлайн, чем очередь отличается от лога, и как устроены гарантии доставки, порядок и статусы «доставлено / прочитано».
- Раздел 3. Как клиент держит связь с серверомПостоянное соединение (WebSocket / long-lived TCP) против polling; gateway- и connection-серверы; как сервер понимает, к какому узлу подключён получатель.
- Раздел 3A. Протоколы — TCP, UDP, HTTP, WebSocket, WebRTC, CDNTCP/UDP, HTTP/WebSocket, WebRTC и CDN: что поверх чего и зачем в мессенджере.
- Раздел 4. Путь сообщения онлайн-доставкаПолный путь от отправителя к получателю, когда оба онлайн; роль message-сервиса и маршрутизации; подтверждения sent / delivered / read.
- Раздел 5. Офлайн-доставка и пушиОчередь недоставленных сообщений; что происходит при переподключении; push-уведомления (APNs/FCM) и зачем они нужны поверх собственного соединения.
- Раздел 6. Гарантии доставки и порядокAt-least-once против exactly-once на практике; идемпотентность и дедупликация по messageid; упорядочивание сообщений; откуда берутся повторы.
- Раздел 6A. Очередь против лога — Kafka, Cassandra и догон по курсоруТранзиентная очередь (Kafka) против durable-лога (Cassandra); запись всегда идёт в лог; курсор клиента решает, откуда читать пропущенное.
- Раздел 7. Статусы присутствия и индикаторыОнлайн/офлайн, «был(а) в сети», «печатает…»; почему presence дорого масштабировать; что хранить, а что считать эфемерным.
Часть 3 · Хранение и данные
Где сообщения живут: шардированная база и схемы таблиц, медиа через объектное хранилище и CDN, синхронизация истории между несколькими устройствами по курсору.
- Раздел 8. Где живут сообщения и как шардируютсяВыбор БД; шардирование и по какому ключу (chatid против userid); durability и репликация; что значит «сообщение не потеряется».
- Раздел 8A. Модель данных (схемы таблиц)Сущности и таблицы; ключ шардирования; SQL и NoSQL; связь модели данных с ручками.
- Раздел 9. Медиа и CDNЧем загрузка фото/видео отличается от текста; объектное хранилище; CDN, превью и транскодинг; почему в сообщении лежит ссылка, а не само «тело».
- Раздел 10. Несколько устройств и синхронизация историиОдин аккаунт — много устройств; синхронизация истории; новое устройство и догрузка чатов; конфликты и «источник правды».
Часть 4 · Масштаб: группы, каналы, регионы
Что ломается при росте: группы и каналы с fan-out, балансировщики и шлюзы на входе, геораспределение и доступность при падении дата-центра.
- Раздел 11. Группы и фан-аутFan-out on write против fan-out on read; маленькие группы против огромных каналов; почему рассылка на миллион — отдельная задача.
- Раздел 12. Балансировка, шлюзы и маршрутизация соединенийКак раскидывать миллионы соединений; балансировщики и connection-серверы; реестр сессий (кто где подключён); деградация и переподключения.
- Раздел 13. Геораспределение и доступностьНесколько дата-центров; близость к пользователю и задержка; репликация между регионами; trade-off консистентности и доступности при отказах.
Часть 5 · Протоколы безопасности
От TLS к сквозному шифрованию: Signal Protocol, X3DH и Double Ratchet, групповое E2EE, подход Telegram (MTProto), и честный разговор о том, чего E2EE не закрывает — метаданные, бэкапы, регуляторика.
- Раздел 14. Транспортное против сквозного шифрованияTLS «клиент — сервер» против end-to-end; что видит сервер в каждом случае; модель угроз — кто от кого защищается.
- Раздел 15. Signal Protocol, X3DH и установка ключей из названияКак два устройства договариваются об общем ключе, не будучи онлайн одновременно; prekeys и сервер ключей; зачем это асинхронному мессенджеру — без тяжёлой математики.
- Раздел 16. Double Ratchet и forward secrecyСмена ключа на каждое сообщение; forward secrecy и post-compromise security простыми словами; почему утечка одного ключа не раскрывает всю переписку.
- Раздел 17. MTProto и подход TelegramЧем отличается подход Telegram; облачные чаты против секретных; где E2EE есть, а где нет, и какие у этого продуктовые последствия.
- Раздел 18. Групповое E2EEПочему шифровать группу сложнее, чем диалог; подход sender keys и идея MLS; что происходит с ключами при добавлении и удалении участника.
- Раздел 19. Чего E2EE НЕ закрывает, метаданные и бэкапыМетаданные (кто, кому, когда, как часто) видны даже при E2EE; облачные бэкапы как «дыра» в защите; устройство как слабое звено.
- Раздел 20. Регуляторный и продуктовый угол безопасностиДавление регуляторов (доступ к данным, локализация, «бэкдоры»); приватность как продуктовое позиционирование; компромиссы, которые защищает продакт.
Часть 6 · Звонки и реальное время
Реальное время поверх всего: как устроен медиапоток звонка, зачем STUN/TURN и SFU, и как шифруются групповые звонки.
- Раздел 21. Голосовые и видеозвонки как устроен потокЧем звонок отличается от сообщений; STUN/TURN, WebRTC и почему UDP.
- Раздел 22. Групповые звонки и шифрованиеMesh против SFU/MCU; групповое видео; E2EE в звонке.