Программа обучения: проектирование систем

  • 📌 Формат: теория + видео лекция + практика с тестами
  • /
  • ⏱️ Время на блок: ~5 часов
0 неделя: Введение в проектирование систем
  • 📌 Формат: теория + видео лекция + практика с тестами
  • ⏱️ Время на блок: ~5 часов

Почему это важно

Спроектируем твою первую систему вместе!

Термины, термины, термины

В проектировании все пестрит словами, которые ты мог до этого не знать. Разложим по полочкам все MAU/DAU/RPS/NFR и много чего еще. Чтобы дальше ты уверенно понимал любой design doc

Масштабирование системы

Мы не будем ограничиваться одним серверов и посмотрим, как наша система будет работать в рамках распределенности

Расчеты — база для проектирования

Не умеешь считать нагрузку на чтение и запись? Или же не уверен, а что вообще нужно считать еще? Разберем все по полочкам, чтобы не упускать особенности системы

Спроектируем твою первую систему вместе!

  • 📌 Формат: теория + практика с тестами
  • /
  • ⏱️ Время на блок: ~2 часа
0 неделя: Мини-курс по Kafka
  • 📌 Формат: теория + практика с тестами
  • ⏱️ Время на блок: ~2 часа

Почему это важно

Kafka — самый популярный message broker современности. Им пользуются PayPal, LinkedIn и многие другие BigTech. Разберем на примере из практики пошаговое внедрение и улучшение

Одна Kafka в поле не воин

А вместе с паттернами микросервисов очень даже. Изучим, как их применять вместе для создания системы с нагрузкой 10k RPS/write

Kafka + DB = много проблем

Покажу, как незнание особенностей БД может привести к проблемам при росте нагрузке и как этого избежать

Вездесущая кросс-кластерная синхронизация

Все Big Tech компании держат системы в разных кластерах. Посмотрим, как данные перетекают из одного в кластера в другой и как здесь участвует Kafka

Kafka — самый популярный message broker современности. Им пользуются PayPal, LinkedIn и многие другие BigTech.

  • 📌 Формат: теория + видео лекция + практика с тестами
  • /
  • 👏🏼 Практика: пример социальной сети
  • /
  • ⏱️ Время на блок: ~8 часов
1 неделя: Путь от клиента до нашей системы
  • 📌 Формат: теория + видео лекция + практика с тестами
  • 👏🏼 Практика: пример социальной сети
  • ⏱️ Время на блок: ~8 часов

Почему это важно

Без понимания данного процесса невозможно выстроить масштабируемую систему. Именно здесь будут наши первые шаги, чтобы выстроить надежную систему, которая будет справляться с нагрузкой и адаптироваться под разные формы нагрузки

Разберемся в сетях

Многие считают, что сети ушли в прошлое. Но без этого знания ты не сможешь построить систему, которая работает на несколько континентов. Также сети лежат в основе балансировки. А еще нам нужно понимать, что важнее: скорость (UDP) и надежность (TCP)

Выбираешь правильный способ балансировки — где-то важнее скорость, а где-то умное распределение

Именно от правильной балансировки будет зависеть распределение нагрузки на твой backend. А еще благодаря autoscaling ты сможешь учитывать увеличение реплик приложения

Учитываешь возможные скачки нагрузки

Бывает, что нагрузка на систему выше, чем мы закладывали. Именно тогда вступает в силу rate limiting и load shedding

Без понимания данного процесса невозможно выстроить масштабируемую систему.

  • 📌 Формат: теория + видео лекция + практика с тестами
  • /
  • 👏🏼 Практика: пример мессенджера
  • /
  • ⏱️ Время на блок: ~9 часов
2 неделя: Разберем микросервисную архитектуру и основные паттерны
  • 📌 Формат: теория + видео лекция + практика с тестами
  • 👏🏼 Практика: пример мессенджера
  • ⏱️ Время на блок: ~9 часов

Почему это важно

Микросервисы — они везде. Без понимания, как их строить, когда они нужны, а когда нет — невозможно представить современного senior разработчика

Разберем CAP теорему и модели консистентности

При разработке распределенных систем важно понимать правила, по которым они работают. Нормально ли, что часть системы будет содержать неактуальные данные. А стоит ли нам закрывать систему на запись, если произошла авария в ДЦ

Виды интеграций

В реалиях современной разработки обычный REST over HTTP далеко не всегда подходит. Разберем с тобой другие формы коммуникации, а также посмотрим на их сильные и слабые стороны, так как не бывает ультимативного оружия

Микросервисы — они везде. Без понимания, как их строить, когда они нужны, а когда нет — невозможно представить современного senior разработчика

  • 📌 Формат: теория + видео лекция + практика с тестами
  • /
  • 👏🏼 Практика: пример ленты социальной сети
  • /
  • ⏱️ Время на блок: ~7 часов
3 неделя: Поговорим про системы хранения данных и как можно их оптимизировать
  • 📌 Формат: теория + видео лекция + практика с тестами
  • 👏🏼 Практика: пример ленты социальной сети
  • ⏱️ Время на блок: ~7 часов

Почему это важно

Без хранения данных невозможно представить практически никакую систему. И здесь кроются детали: как выбрать наиболее правильный формат, как работа с индексами может помочь нам. А еще есть кеширование, которое позволит оптимизировать IO нагрузку на систему

Будешь понимать, что БД — не черный ящик

БД это такой же сервис, который делится на слои. Для отладки и тонкой настройки нам нужно понимать, где и как происходят процессы внутри этой системы

Оптимизация работы БД

Ненастроенная БД без всяких настроек может и вывезет MVP, но при высоких нагрузках нам нужно применять дополнительные подходы: индексирование, пулы соединений, партицирование и шардирование — все это разберем, чтобы ты мог проектировать системы от 10k RPS

Кеширование как база в современных системах

Большинство систем, которыми ты пользуешься, под капотом держат кеш для оптимизации работы. Но недостаточно поставить кеш и забыть. Нужно продумать политику очистки кеша, ограничить его объем

Без хранения данных невозможно представить практически никакую систему.

  • 📌 Формат: теория + видео лекция + практика с тестами
  • /
  • ⏱️ Время на блок: ~6 часов
4 неделя: Событийная архитектура и основные паттерны
  • 📌 Формат: теория + видео лекция + практика с тестами
  • ⏱️ Время на блок: ~6 часов

Почему это важно

Событийная архитектура идет рука об руку с микросервисами. Большая часть паттернов и подходов связана именно с ней

EDA или event driven architecture

Для работы с "событийкой" нам необходимо понять элементы системы. Также у данного подхода огромное число особенностей, не зная которых можно сделать некачественную систему

CQRS, event sourcing, transactional outbox — лишь вершина айсберга

Посмотрим с тобой, как устроены паттерны поверх базовой "событийки". А также как их стоит сочетать с остальной архитектурой

SAGA — те же транзакции, только для микросервисов

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

Событийная архитектура идет рука об руку с микросервисами. Большая часть паттернов и подходов связана именно с ней

  • 📌 Формат: теория + видео лекция + практика с тестами
  • /
  • 👏🏼 Практика: написание Design Doc
  • /
  • ⏱️ Время на блок: ~10 часов
5 неделя: Все вокруг надежности и мониторинга нашей системы
  • 📌 Формат: теория + видео лекция + практика с тестами
  • 👏🏼 Практика: написание Design Doc
  • ⏱️ Время на блок: ~10 часов

Почему это важно

Надежность и прозрачность текущего состояния системы — must-have. Без это тебя не пустят в production.

SRE — 3 буквы, за которыми стоит uptime систем

Работа с надежностью и здоровьем системы — обязанность каждого разработчика. Мы вооружимся всем необходимым для этого: SLO, postmortem, RED и много чего еще

Security не только в ИБ

Нужно понимать базовые принципы обеспечения безопасности системы. А также какие механизмы существуют

CDN или как улучшить UX клиента

Netflix разработал собственный CDN для хранения контента. Это необходимый механизм, без которого Spotify, Pinterest не смогли бы работать

Надежность и прозрачность текущего состояния системы — must-have. Без это тебя не пустят в production.