Этим летом я проходила собеседование на продакта в компанию, у которой есть свой мессенджер. Среди этапов был 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. Можно забрать себе, дополнить вопросами или адаптировать под свою подготовку.
Если попробуете, расскажите, где объяснения непонятные, чего не хватает и на каких вопросах вы сами спотыкались на собеседованиях. Если найдёте ошибку в материалах, тоже приносите.
Комментарии (11)

alterbred
20.09.2026 03:28Моему "нишевому проекту" уже почти 30 лет.
Начинался как "фото-альбом", а привёл к альтернативе Вики-энциклопедиям. Своё устройство каталогизации информации и связей с другой информацией.
Сделал только небольшой пример того, как могла бы выглядеть информация в такой системе
На полноценный пример моих знаний и возможностей не хватило
Много слов на эту тему по ссылке

MRD000
20.09.2026 03:28Так ли я понимаю, что, если обобщить, то смысл в том, что UI адаптируется на какую-то подсекцию/ тему, которая всегда остается на экране? Т.е. как если бы Wikipedia была разделена на миллиард под-сайтов?

alterbred
20.09.2026 03:28упс...
Интересно, а что в моих словах могло привести к подобному выводу???
Вообще-то там много разных "смыслов" и основной в том, что на каждую тему/смысл будет не одна статья, как в Вики, а множество разных источников.
И все "предки" каждой темы будут определять "контекст" её понимания, а "потомки" - объяснять тему/смысл
Что касается оформления - то оно может изменяться под необходимые условия - попробуйте понажимать на "кнопочки" правом верхнем углу и подвигать горизонтальный разделитель экрана

achekalin
20.09.2026 03:28Сам формат тренажёра мне нравится: даже как результат подготовки это хороший способ зафиксировать свои решения, проверить их на прочность и передать следующему человеку уже не просто набор мыслей, а основу, которую можно развивать дальше.
Но на собеседовании я бы начал с вопроса: почему здесь вообще Kafka? Какую именно проблему она решает? Какие гарантии доставки нам нужны? Что произойдёт при повторной доставке? Где и как обеспечивается порядок сообщений? Что будет с сообщением, отправленным из метро без сети? А если пользователь одновременно сидит с телефона и ноутбука? Как синхронизируются прочтение и уведомления?
То есть System Design мессенджера я бы начинал не с Kafka и Cassandra, а с того, что именно мы обещаем пользователю. Где хранится история? Что будет, если телефон утонет? Кто способен прочитать переписку? Совместима ли сегодняшняя модель шифрования с теми требованиями, которые могут появиться завтра?
Дальше медиа: превью, MIME type, докачка, транскодирование, хранение, backup. И пользовательские примитивы тоже часть архитектуры: телеграмовские кружочки стали самостоятельным форматом общения. В нашем независимом мессенджере, разумеется, будут пятиугольнички.
И ещё эксплуатация. Добавление нод, замена упавших серверов, обновления и восстановление должны быть рутинными операциями, а не подвигом дежурного администратора.
Вот после того, как определены гарантии, пользовательские свойства и эксплуатационная модель, уже интересно обсуждать Kafka, Cassandra и остальные прямоугольники.

stabuev
20.09.2026 03:28Я себе такие курсы тоже штампую, но руки не доходят почистить их от нейрослопа. ))) Поэтому пока прячу
aPiks
Сайт потыкал - типичный нейрослоп. А статья - запрос на Code Review.
Только вы бы свой Claude и просили вам ревью делать.
Ну и на кой продакту System Design? Или теперь продакт + клод = архитект?
monrech Автор
Продакту System Design нужен, чтобы понимать ограничения системы, обсуждать с разработчиками варианты решений и учитывать их последствия для продукта. В моём случае это ещё и был этап собеседования, к которому я готовилась. На роль архитектора я не претендую.
В статье я делюсь учебным инструментом, который сделала для себя и судя по добавлению в закладки, возможно, пригодится кому-либо для собеса (на это и была рассчитана статья). Запроса на code review там нет
aPiks
Если в вашем комментарии поменять слово "Продакту" на слово "Архитекту" - то изречение станет верным. А если там, куда вы ходили на собеседование, требуется знание вышеперечисленного для продакта - то очевидно это соковыжималка для людей с нулевым пониманием процесса разработки.
По поводу вашего проекта - вам было скучно просто сидеть изучать архитектуру готовых проектов, но было не скучно читать всю ту воду, что выдала вам нейронка? Ну и почему вы решили, что на собесе вам зададут мессенджер? А если бы что-то другое? Соцсеть? файло-помойку? А если бы у вас спросили, почему не рассмотрели Server Side Events + Http для пересылки сообщений?
А вообще, всем, кто готовится к подобным интервью, я бы рекомендовал не изучать отдельно каждое решение, а прочитать пару нормальных книг о System Design. Designing Data-Intensive Applications как одна из них.