Перейти к основному содержимому
DevScallix
← System DesignПланируется

System Design: Модули

Программа рассматривает проектирование систем как повторяемый метод: определить требования и атрибуты качества, оценить масштаб, построить API и модель данных и обосновать выбор через компромиссы. Метод применяется к 6–8 классическим case study, и каждое заканчивается письменным анализом компромиссов.

  1. 01

    Требования и атрибуты качества

    Перед проектированием уточняем, что мы решаем и что не решаем.

    • Функциональные и нефункциональные требования
    • Атрибуты доступности, задержки, надёжности и согласованности
    • Явная запись ограничений и допущений
    • Понятия SLI и SLO
    • Ограничение scope

    Лабораторная: Для неопределённой задачи написать список требований и допущений и определить не-цели.

  2. 02

    Оценка нагрузки

    Нужна не точная цифра, а порядок величины, влияющий на решение.

    • Запросы в секунду и пиковый коэффициент
    • Расчёт хранилища и bandwidth
    • Соотношение чтения и записи
    • Как оценка меняет решение
    • Открытое указание допущений

    Лабораторная: Подготовить оценку трафика и хранилища для выбранной системы и записать, на какое решение влияет результат.

  3. 03

    Дизайн API и данных

    Начинаем с шаблонов доступа и строим под них API и модель данных.

    • Дизайн ресурсов и операций
    • Пагинация, идемпотентность и rate limit
    • Нормализация и денормализация
    • Соответствие индексов шаблонам доступа
    • Эволюция схемы

    Лабораторная: Составить контракт API и схему таблиц для заданной системы и объяснить, как выполняются ключевые запросы.

  4. 04

    Кэширование и очереди

    Оцениваем пользу и риск двух главных инструментов снижения задержки и сглаживания нагрузки.

    • Cache-aside, write-through, write-behind
    • Инвалидация и устаревшие данные
    • Cache stampede и защита
    • Развязка нагрузки очередями и backpressure
    • Dead letter и повторные попытки

    Лабораторная: Добавить кэш в сервис с преобладанием чтения и смоделировать сценарии устаревших данных и stampede.

  5. 05

    Выбор хранилища и масштабирование

    Выбираем хранилище под нагрузку и сравниваем варианты масштабирования чтения и записи.

    • Relational, key-value, document, search и object storage
    • Read replica и задержка репликации
    • Ключ sharding и сложность re-sharding
    • Проблема hot key
    • Практический смысл CAP и PACELC

    Лабораторная: Написать краткий документ решения, сравнивающий два варианта хранилища для одной и той же нагрузки.

  6. 06

    Согласованность и режимы отказа

    Заранее продумываем, где и как система сломается.

    • Strong, eventual и causal consistency
    • Поиск single point of failure
    • Timeout, retry и идемпотентность
    • Частичный отказ и стратегия деградации
    • Основы disaster recovery: RPO и RTO

    Лабораторная: Подготовить таблицу режимов отказа для спроектированной системы с ответом и оценкой ущерба для каждого.

  7. 07

    Case study I: URL shortener, rate limiter, уведомления

    Применяем метод к трём классическим задачам с относительно узким scope.

    • URL shortener: генерация ID, нагрузка на редирект, аналитика
    • Rate limiter: token bucket, sliding window, распределённые счётчики
    • Система уведомлений: каналы, приоритеты, повторные попытки
    • Оценка и анализ компромиссов для каждой

    Лабораторная: Выбрать две из трёх задач и подготовить полный письменный документ дизайна с анализом компромиссов.

  8. 08

    Case study II: payments ledger, feed, поиск

    Разбираем три задачи, более сложные по согласованности, масштабу и поиску.

    • Payments ledger: двойная запись, идемпотентность, аудит
    • Feed: fan-out on write и on read, горячие пользователи
    • Поиск: инвертированный индекс, задержка индексации, релевантность
    • Анализ согласованности и отказов для каждой

    Лабораторная: Выбрать одну из трёх задач, написать документ дизайна и переработать его после peer review.

Вернуться на страницу программыЗадать вопрос о плане