System Design: Модули
Программа рассматривает проектирование систем как повторяемый метод: определить требования и атрибуты качества, оценить масштаб, построить API и модель данных и обосновать выбор через компромиссы. Метод применяется к 6–8 классическим case study, и каждое заканчивается письменным анализом компромиссов.
01
Требования и атрибуты качества
Перед проектированием уточняем, что мы решаем и что не решаем.
- Функциональные и нефункциональные требования
- Атрибуты доступности, задержки, надёжности и согласованности
- Явная запись ограничений и допущений
- Понятия SLI и SLO
- Ограничение scope
Лабораторная: Для неопределённой задачи написать список требований и допущений и определить не-цели.
02
Оценка нагрузки
Нужна не точная цифра, а порядок величины, влияющий на решение.
- Запросы в секунду и пиковый коэффициент
- Расчёт хранилища и bandwidth
- Соотношение чтения и записи
- Как оценка меняет решение
- Открытое указание допущений
Лабораторная: Подготовить оценку трафика и хранилища для выбранной системы и записать, на какое решение влияет результат.
03
Дизайн API и данных
Начинаем с шаблонов доступа и строим под них API и модель данных.
- Дизайн ресурсов и операций
- Пагинация, идемпотентность и rate limit
- Нормализация и денормализация
- Соответствие индексов шаблонам доступа
- Эволюция схемы
Лабораторная: Составить контракт API и схему таблиц для заданной системы и объяснить, как выполняются ключевые запросы.
04
Кэширование и очереди
Оцениваем пользу и риск двух главных инструментов снижения задержки и сглаживания нагрузки.
- Cache-aside, write-through, write-behind
- Инвалидация и устаревшие данные
- Cache stampede и защита
- Развязка нагрузки очередями и backpressure
- Dead letter и повторные попытки
Лабораторная: Добавить кэш в сервис с преобладанием чтения и смоделировать сценарии устаревших данных и stampede.
05
Выбор хранилища и масштабирование
Выбираем хранилище под нагрузку и сравниваем варианты масштабирования чтения и записи.
- Relational, key-value, document, search и object storage
- Read replica и задержка репликации
- Ключ sharding и сложность re-sharding
- Проблема hot key
- Практический смысл CAP и PACELC
Лабораторная: Написать краткий документ решения, сравнивающий два варианта хранилища для одной и той же нагрузки.
06
Согласованность и режимы отказа
Заранее продумываем, где и как система сломается.
- Strong, eventual и causal consistency
- Поиск single point of failure
- Timeout, retry и идемпотентность
- Частичный отказ и стратегия деградации
- Основы disaster recovery: RPO и RTO
Лабораторная: Подготовить таблицу режимов отказа для спроектированной системы с ответом и оценкой ущерба для каждого.
07
Case study I: URL shortener, rate limiter, уведомления
Применяем метод к трём классическим задачам с относительно узким scope.
- URL shortener: генерация ID, нагрузка на редирект, аналитика
- Rate limiter: token bucket, sliding window, распределённые счётчики
- Система уведомлений: каналы, приоритеты, повторные попытки
- Оценка и анализ компромиссов для каждой
Лабораторная: Выбрать две из трёх задач и подготовить полный письменный документ дизайна с анализом компромиссов.
08
Case study II: payments ledger, feed, поиск
Разбираем три задачи, более сложные по согласованности, масштабу и поиску.
- Payments ledger: двойная запись, идемпотентность, аудит
- Feed: fan-out on write и on read, горячие пользователи
- Поиск: инвертированный индекс, задержка индексации, релевантность
- Анализ согласованности и отказов для каждой
Лабораторная: Выбрать одну из трёх задач, написать документ дизайна и переработать его после peer review.