Тренажёр
System Design
Десять задач по нарастающей сложности: от кэша и одной таблицы до распределённой координации. В каждой — условие с цифрами, канвас для схемы прямо в браузере, эталонное решение и разбор того, что должно прозвучать на собеседовании.
Порядок не обязателен, но задачи выстроены лестницей: приёмы из первых нужны в последних.
01
Сократитель ссылок
Начальный
Классика на разогрев: 10 000 переходов в секунду против 100 созданий — вся архитектура вырастает из этого перекоса.
кэшгенерация ключейасинхронная аналитика
02
Хранилище и раздача картинок
Начальный
Файлы не должны ходить через ваше приложение. Задача про объектное хранилище, CDN и асинхронную обработку.
объектное хранилищеCDNфоновая обработка
03
Ограничение частоты запросов
Начальный
Маленькая задача с большим количеством граблей: алгоритм окна, общее состояние на 20 инстансов и атомарность.
алгоритмы окнаобщее состояниеатомарность
04
Сервис уведомлений
Средний
Первая задача, где всё держится на очередях: приоритеты, ретраи, дедупликация и внешние провайдеры, которые падают.
очереди и приоритетыретраиидемпотентность
05
Лента новостей
Средний
Главный вопрос: раскладывать пост по лентам подписчиков при записи или собирать ленту при чтении. И что делать со звёздами.
fanout on write / on readкэш ленткурсорная пагинация
06
Бронирование мест
Средний
Задача не про масштаб, а про конкурентность: 500 человек одновременно жмут на одно место, и продать его можно ровно один раз.
блокировкитранзакциивременная бронь
07
Поиск по каталогу
Средний
Отдельное хранилище для поиска, его наполнение из основной БД и жизнь с тем, что индекс всегда чуть отстаёт.
поисковый индексCDC и outboxотставание данных
08
Оплата заказа
Продвинутый
Деньги нельзя ни потерять, ни списать дважды. Распределённой транзакции с банком не существует — отсюда идемпотентность, outbox и сага.
идемпотентностьoutboxсага и компенсации
09
Аналитика в реальном времени
Продвинутый
100 000 событий в секунду и требование считать уникальных. Задача про то, где точность не стоит своих денег.
потоковая обработкаприблизительные структурыопоздавшие события
10
Планировщик отложенных задач
Продвинутый
Пять инстансов смотрят в одну таблицу задач. Самая распределённая задача набора: координация, аренда и отсутствие exactly-once.
координацияаренда и блокировкиat-least-once
Теория к этим задачам — в боте
Кэш, очереди, репликация, шардирование и транзакции разобраны карточками с интервальным повторением.