Этим летом я проходила собеседование на продакта в компанию, у которой есть свой мессенджер. Среди этапов был System Design, и к нему надо было подготовиться.
Просто изучать архитектуру мессенджера мне было скучно. Ну и я решила заодно забацать себе курс. Чтобы были объяснения, схема, вопросы, можно было потыкать и проверить, что запомнила. В общем, подготовка к собесу немного разрослась. Ахахах.
Получился базовый курс с интерактивным тренажёром по архитектуре мессенджера. Может, кому‑то, кто тоже готовится к собеседованиям, пригодится, конечно же бесплатно.

Что особенно в мессенджере?
У мессенджера очень понятная отправная точка: Алиса написала Бобу «привет». Хочется, чтобы Боб этот привет получил. Желательно один раз, вовремя и в нужном чате.
А дальше начинаются вопросы:
Боб сейчас онлайн или у него телефон без интернета?
Если Алиса нажала «отправить», а соединение оборвалось, сообщение уже сохранилось? Можно отправлять ещё раз?
Боб открыл приложение на ноутбуке. Откуда там возьмётся история с телефона?
Если в чате сто тысяч человек, как раздать им новое сообщение?
А если отправили видео?
А если включили сквозное шифрование?
И вот уже есть повод разбираться с соединениями, хранением, очередями, синхронизацией и шифрованием. У каждой темы появляется конкретный вопрос, на который хочется получить ответ.
Что внутри курса
Внутри 22 основных раздела и четыре дополнительных, плюс справка по сетям. Начинается всё с требований: что вообще проектируем, какие функции берём, какой масштаб предполагаем.

Дальше постепенно разбираются:
Соединение и доставка. Как клиент держит связь с сервером, как сообщение доходит до получателя, что происходит в офлайне, зачем нужны пуши и откуда берутся повторы.
Хранение и синхронизация. Где лежат сообщения, как распределять данные, что делать с фотографиями и видео, как подтягивать историю на нескольких устройствах.
Масштабирование. Группы, большие каналы, балансировка соединений, несколько регионов и отказы.
Безопасность. Транспортное и сквозное шифрование, Signal Protocol, Double Ratchet, подход Telegram, групповые чаты, метаданные и бэкапы.
Звонки. Как устроены голос и видео, что добавляется в групповых звонках и как это связано с шифрованием.
Есть отдельные разделы про API и модель данных. Чтобы после общей схемы можно было пойти глубже: какие запросы делает клиент, какие сущности храним, какие поля и ключи для этого нужны.
Если по дороге непонятно, что такое сокет или чем TCP отличается от WebSocket, справка тоже рядом.
Прочитала. А рассказать смогу?

Можно прочитать раздел, посмотреть на схему и подумать: ну да, понятно.
А потом закрыть её и попробовать объяснить путь сообщения своими словами. Где оно сохраняется? Как сервер находит получателя? Что будет, если получатель отключился прямо сейчас? Поэтому к текстам я добавила несколько способов себя проверить.
Тесты после разделов. Всего 156 вопросов, по шесть на раздел. Есть объяснения к ответам, раздел отмечается пройденным при результате 6/6. Можно сразу увидеть, к какой теме стоит вернуться.
Карточки с интервальными повторениями. Их 88. Сначала пробую ответить сама, потом открываю ответ и оцениваю, насколько хорошо вспомнила. Удобно именно проговаривать: в голове ответ иногда звучит гораздо убедительнее, чем вслух, хех.
Сборка схемы по памяти. Тут уже нужно расставить компоненты и восстановить связи между ними. Семь уровней: от базового скелета до нескольких устройств и звонков.
Есть режим с подсказками, а есть «Чистая доска»: сначала надо вспомнить, какие компоненты вообще понадобятся. Очень быстро обнаруживается место, где вроде всё понимала, но почему‑то не могу собрать обратно.
Можно посмотреть, куда идёт сообщение
В тренажёре есть интерактивная карта архитектуры: 21 узел с пояснениями и 15 пошаговых сценариев.

Можно пройти доставку сообщения, посмотреть на группы, шифрование и звонки. По шагам проследить, какие компоненты участвуют и что между ними происходит.
Мне хотелось связать общую картинку с конкретным действием пользователя. Вот человек отправил сообщение. Вот оно прошло через эти части системы. Вот здесь понадобилось хранение, а здесь — информация о подключении получателя.
Потом можно переключиться на сборку схемы и попробовать воспроизвести это самостоятельно.
И ещё немного практики
Кроме схемы и карточек, внутри есть ещё три режима.
API и БД. Собираешь запросы из кусочков, выбираешь поля таблиц, отвечаешь на вопросы про ключи и хранение. Внутри 22 задачи на API и восемь таблиц. Полезно, когда общие прямоугольники уже нарисовала и хочется понять, что конкретно между ними передаётся.

Прикидки нагрузки. Задачи на порядок величины. Сколько примерно сообщений будет проходить через систему, какой объём данных получается. Можно потренироваться считать и объяснять свои допущения.

Прогон интервью. Режим для репетиции целиком: собрать подготовку в один последовательный ответ и посмотреть, где начинаешь буксовать.
Я бы пользовалась так: прочитать тему, пройти тест, закрыть объяснения и попробовать рассказать самой. Потом собрать схему. Если на каком‑то шаге зависли — вернуться в нужный раздел.
Кому может пригодиться
В первую очередь таким же продактам, которым предстоит техническое интервью или хочется лучше понимать устройство мессенджера
Разработчикам, которые начинают готовиться к System Design, тоже может пригодиться как вспомогательный материал, пример: взять один знакомый сервис и пройти его от требований до более сложных вопросов.
Как попробовать
Открываете тренажёр и пользуетесь. Бесплатно, без регистрации и установки.
Сам сайт — обычные HTML, CSS и JavaScript на GitHub Pages. Прогресс хранится локально в браузере. Его можно экспортировать в файл и потом импортировать в другом браузере; автоматической синхронизации между устройствами нет.
Код и материалы лежат на GitHub. Можно забрать себе, дополнить вопросами или адаптировать под свою подготовку.
Если попробуете, расскажите, где объяснения непонятные, чего не хватает и на каких вопросах вы сами спотыкались на собеседованиях. Если найдёте ошибку в материалах, тоже приносите.

