open atlas
↑ К треку
Разборы System Design SDC · 02 · 08

02-social-feed: спроектируй и защити приложение на ленте

Практический проект: подготовь полный дизайн-док соцприложения с лентой, уведомлениями и presence — выбери стратегии fan-out, гибрид знаменитостей, гарантии доставки и порядок — затем обоснуй каждый порог числом и проверь рискованнейшее прототипом.

SDC Senior ◷ 240 min
Уровень
ОсновыJuniorMiddleSenior

Знать каждый кейс по отдельности — не то же, что собрать их в одну связную систему, которую подпишет стафф-инженер. Возьми соцприложение реальной формы, напиши дизайн-док от начала до конца — лента, уведомления, presence, с каждым выбором fan-out и консистентности, обоснованным числом — затем докажи два рискованнейших решения прототипом, а не отмашкой.

Этот проект делает юнит операционным: ты интегрируешь четыре кейса в одну систему, решаешь каждый компромисс против оценки и меряешь ради подтверждения двух предсказаний, рискованнейших к укусу — стоимости fan-out знаменитости и гарантии доставки at-least-once-плюс-дедуп.

Проект
0 из 9
Цель

Подготовь полный дизайн-док соцприложения (приложение коротких постов с домашней лентой, push/email уведомлениями и presence), сделав и обосновав решения юнита по fan-out, гибриду, доставке и порядку — затем построй малый прототип, эмпирически валидирующий твою стратегию fan-out знаменитости и путь уведомлений at-least-once-с-дедупом.

Требования
Критерии приёмки
  • Дизайн-док, читаемый за пару минут: оценки нагрузки (среднее + пик, одна значащая цифра), отношение чтение:запись и решения по fan-out/гибриду/доставке/порядку, каждое цитирует число, которое его двигает.
  • Явный порог знаменитости с арифметикой, что его задаёт, плюс дизайн feed cache и пагинации.
  • Рабочий прототип, чьи измерения показывают шторм записей знаменитости под чистым push и его устранение под гибридом, с порогом и числом подписчиков, давшими каждое.
  • Демонстрация доставки: прогон с впрыском отказов, где дубли схлопнуты ключом идемпотентности, а навсегда проваленные отправки попадают в DLQ, с числом дублей до/после.
  • Краткий разбор: абзац о том, что показала оценка до кода, и абзац о том, где поведение прототипа разошлось с салфеткой и почему.
Senior-стретч
  • Добавь поверхность чата: постоянные WebSocket-соединения, реестр соединений и seq в диалоге; продемонстрируй консистентный порядок и переподключение-и-синхронизацию через seq как курсор.
  • Добавь автодополнение поиска юзеров/тем: офлайн-сборку trie с top-k на узле и покажи, что путь чтения — O(1) лукап против живого скана лога.
  • Добавь presence: покажи ловушку fan-out (событие онлайн популярного юзера) и реализуй pull-для-видимых-контактов, измерив разницу в объёме обновлений.
  • Пересчитай весь план под рост 10x и определи первый порог, что пересекаешь (шард feed cache, шард БД, больше гейтвеев), демонстрируя, как оценка переформирует дизайн при росте входов.
Вспомните перед уходом
  1. 01
    Какие оценки нагрузки двигают дизайн ленты и уведомлений и как каждая становится решением?
  2. 02
    Как валидировать два рискованнейших решения в прототипе?
  3. 03
    Почему проектировать и оценивать сначала, затем прототипировать, а не строить сразу?
Итог

Этот проект собирает четыре кейса в одну систему и заставляет каждое решение опираться на число. Ты пишешь дизайн-док соцприложения на ленте: оцени QPS чтения ленты, записи постов и уведомлений (среднее и пик, одна значащая цифра), выведи отношение чтение:запись и используй его для выбора fan-out-on-write дефолтом ленты с порогом знаменитости, что задаёт арифметика, плюс ограниченный feed cache и курсорную пагинацию. Ты специфицируешь пайплайн уведомлений (асинхронный fan-out, очереди по каналам, ключ идемпотентности, ретрай+джиттер в DLQ, транзакционная приоритетная дорожка) с явной гарантией at-least-once-плюс-дедуп и заявляешь, какие поверхности eventually consistent и почему. Затем ты закрываешь петлю: прототип, показывающий, как шторм записей знаменитости исчезает под гибридом, и прогон с впрыском отказов, где ключ идемпотентности схлопывает дубли, пока DLQ ловит отказы. Сначала оценка, потом валидация — салфетка говорит форму и рискованнейшие предсказания; прототип их подтверждает. Инженер, построивший это раз, собирает соцсистемы осознанно, а не открывает хвост знаменитостей в проде.

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

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.