К основному содержимому
Всё обучение
ВШЭ / проект программы

Распределённые системы

Научиться проектировать системы, в которых сеть ненадёжна, данные живут на нескольких узлах, а сбой — часть нормальной работы.

Один сервис, несколько независимых узловА что, если узел упадёт?клиентAPIсостояниеочередьобработчикизадержки · повторы · отказы
месяцев
06
лекций
10
лабораторные
04
сквозной проект
01

Проект полугодовой программы. Календарные даты, расписание и правила оценивания будут уточнены перед запуском.

01 / траектория

От модели отказа до работающего сервиса

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

  1. 01 / Месяц

    Модели

    Отказы и время

    Лекции 01–02

  2. 02 / Месяц

    Связь

    Сеть и реплики

    Лекции 03–04 · лаба 01

  3. 03 / Месяц

    Координация

    Консенсус и данные

    Лекции 05–06 · лаба 02

  4. 04 / Месяц

    Взаимодействие

    Транзакции и события

    Лекции 07–08 · лаба 03

  5. 05 / Месяц

    Надёжность

    Проверки и архитектура

    Лекции 09–10

  6. 06 / Месяц

    Сборка

    Эксперименты и защита

    Лаба 04 · итоговый проект

02 / теория

10 лекций. Одна связная система.

У каждой темы — инженерный вопрос и конкретный результат. Раскройте лекцию, чтобы увидеть содержание.

01Система начинается с отказаМесяц 1

Модели отказов, задержки сети, частичные сбои и инварианты.

После лекции: Описать, что сервис обязан сохранять при сбое узла.

02Время и порядок событийМесяц 1

Физические и логические часы, причинность, часы Лэмпорта и векторные часы.

После лекции: Восстановить причинный порядок по журналам нескольких узлов.

03Сеть как часть приложенияМесяц 2

RPC, тайм-ауты, повторные запросы, идемпотентность и обратное давление.

После лекции: Спроектировать API, устойчивый к потерянному ответу и повторной доставке.

04Репликация и согласованностьМесяц 2

Лидер и реплики, кворумы, модели согласованности, CAP и PACELC.

После лекции: Объяснить компромисс между доступностью, задержкой и согласованностью.

05Консенсус и координацияМесяц 3

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

После лекции: Разобрать смену лидера и поведение меньшинства при разделении сети.

06Разделение данных и нагрузкаМесяц 3

Шардинг, выбор ключа, согласованное хеширование, горячие ключи и ребалансировка.

После лекции: Выбрать схему разделения данных и найти её узкие места.

07Транзакции между сервисамиМесяц 4

Изоляция, двухфазная фиксация, саги, компенсации и шаблон outbox.

После лекции: Сохранить бизнес-инвариант без общей транзакции между сервисами.

08События, очереди и потокиМесяц 4

Порядок сообщений, гарантии доставки, дедупликация и повторное чтение журнала.

После лекции: Спроектировать обработчик, безопасный при повторной доставке событий.

09Эксплуатация и проверка отказовМесяц 5

SLI/SLO, трассировка, нагрузочные эксперименты, инъекция отказов и восстановление.

После лекции: Проверить инварианты и измерить восстановление после сбоя.

10Архитектура как набор решенийМесяц 5

Сборка системы целиком: требования, бюджет задержки, ограничения и цена надёжности.

После лекции: Защитить архитектуру сервиса на основе измерений и явных компромиссов.

03 / практика

Четыре лабораторные — один проект

Разрабатываем распределённый сервис задач: API принимает запросы, хранилище сохраняет состояние, очередь передаёт работу обработчикам. Каждая лабораторная добавляет новый слой и сценарий отказа.

СобратьСобратьСломатьСломатьИзмеритьИзмерить
Учебный цикл каждой лабораторной: собрать, сломать, измерить. Выводы эксперимента → следующая версия системы.
LAB 01Месяц 2 · после лекции 4

Сеть ненадёжна

Постройте API сервиса задач. Добавьте тайм-ауты, повторные запросы и ключи идемпотентности. Смоделируйте потерю ответа.

Что проверяем

Повтор запроса не создаёт вторую задачу; тест воспроизводит потерянный ответ.

Что сдаём: API + тесты отказов

LAB 02Месяц 3 · после лекции 6

Один узел — ещё не система

Подключите реплицируемое хранилище с готовой реализацией консенсуса. Остановите лидера и разделите сеть.

Что проверяем

Зафиксируйте доступность чтения и записи, сохранность подтверждённых данных и время восстановления.

Что сдаём: Кластер + протокол эксперимента

LAB 03Месяц 4 · после лекции 8

Событие придёт дважды

Добавьте очередь и обработчики задач. Реализуйте outbox и дедупликацию, проверьте сбой между записью результата и подтверждением сообщения.

Что проверяем

Повторная доставка не дублирует бизнес-эффект; незавершённая задача продолжает выполняться после перезапуска.

Что сдаём: Обработчики + проверка инвариантов

LAB 04Месяц 6 · после лекции 10

Система выдерживает проверку

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

Что проверяем

Воспроизводимый запуск, измеренные задержки и восстановление, документированные ограничения системы.

Что сдаём: Сервис + отчёт + защита

04 / результат

Архитектуру нужно уметь доказать

К концу курса у студента будет работающий сервис и набор экспериментов, которые показывают его гарантии и ограничения.

  • Формулировать инварианты и выбирать модель согласованности под задачу.
  • Объяснять поведение системы при задержках, повторах и частичных отказах.
  • Проверять решения экспериментами и защищать архитектурные компромиссы.

Кому подойдёт

Студентам, которые уже умеют писать приложения и хотят разобраться, что меняется при переходе от одного процесса к нескольким узлам.

Что знать до старта

Один язык программирования, основы HTTP и баз данных, Git и базовая работа с контейнерами. Специальный опыт распределённых систем не требуется.