2026 г.
Распределённые системы: курс
Проект ЦИТадель
Курс систематически излагает теорию и практику распределённых систем: от фундаментальных ограничений (ненадёжная сеть, отсутствие общего времени, частичные отказы) через алгоритмы консенсуса и репликации — к масштабированию и инженерной практике. Каждая глава рассчитана на одну лекцию и завершается упражнениями с ответами; пять лабораторных работ выполняются на реальных системах (PostgreSQL, etcd, Kafka) — всё необходимое поднимается в Docker на одной машине. Предварительные требования: уверенное программирование, базовые знания сетей и СУБД.
Вводная статья к курсу — «Распределённые системы: обзор»; практическое приложение — «Надёжность поверх ненадёжной сети».
Стенды лабораторных: PostgreSQL (compose, инициализация, реплика, команды), etcd (compose, команды), Kafka (compose, команды).
Часть I. Основания
- Модель системы — процессы, сообщения и виды отказов; синхронная и асинхронная модели; заблуждения распределённых вычислений — теперь строго.
- Время и порядок — часы Лэмпорта и векторные часы; отношение «произошло раньше»; согласованные снимки (алгоритм Чанди–Лэмпорта).
- Невозможности — теорема FLP с идеей доказательства; детекторы отказов; CAP и PACELC формально. Глава о том, чего в распределённых системах не может быть.
Часть II. Согласованность и консенсус
- Модели согласованности — линеаризуемость строго; причинная и итоговая согласованность; клиентские гарантии (читай-свои-записи, монотонные чтения).
- Репликация — лидерская, кворумная (N/W/R), мульти-лидер; конфликты и CRDT. Лабораторная 1: потоковая репликация PostgreSQL — failover своими руками и потеря асинхронных записей.
- Консенсус — Raft во всех деталях: термы, выборы лидера, реплицируемый журнал, смена состава кластера; Paxos обзорно. Центральная глава курса. Лабораторная 2: кластер etcd из трёх узлов — убить лидера, наблюдать выборы, попытаться устроить split brain.
- Византийские отказы — когда узлы не падают, а лгут: постановка задачи, BFT-протоколы, связь с блокчейнами.
Часть III. Масштаб
- Шардирование — разбиение по диапазону и по хешу; согласованное хеширование; ребалансировка. Лабораторная 3: согласованное хеширование на Python — измерить перераспределение ключей.
- Распределённые транзакции — двухфазная фиксация и её блокирующая природа; саги; как распределённые СУБД нового поколения (Spanner, CockroachDB, YDB) вернули ACID.
- Журналы событий — Kafka как реплицируемый журнал; семантики доставки честно; идемпотентный потребитель. Лабораторная 4: отказ брокера Kafka, дубликаты и борьба с ними.
Часть IV. Инженерия
- Тестирование распределённых систем — инварианты и их проверка; порча сети (tc netem); подход Jepsen. Лабораторная 5 (итоговая): найти нарушение согласованности в системе из лабораторных 1–2 под испорченной сетью.
- Проектирование — глава-семинар: три системы с нуля (счётчик, платежи, чат) через явный выбор компромиссов; когда не распределяться.