Архитектура программных систем
Уроки с примерами кода; тему можно сразу закрепить вопросами в тренажёре.
Материалы открываются после регистрации на Free.
Уроки по модулям
Модульная архитектура
3 урокаИз чего складывается хорошая граница в системе: связанность и связность как две силы, способы организовать код (по слоям или по фичам) и модульный монолит как разумная стартовая архитектура. Модуль показывает, что архитектура — это в первую очередь решение о границах, и что чёткие границы внутри одного процесса дешевле распределённой системы.
- Связанность и связность: критерий границы
- Организация кода: по слоям или по фичам
- Модульный монолит как стартовая архитектура
Очереди и интеграция
4 урокаКак сервисы обмениваются данными, не завися друг от друга во времени: синхронный вызов против асинхронного сообщения, брокеры RabbitMQ и Kafka и их разные модели, гарантии доставки и идемпотентность потребителя, паттерн outbox против проблемы двойной записи. Модуль строит модель надёжной интеграции, в которой отказ или задержка одного сервиса не валит остальные.
- Синхронная и асинхронная интеграция
- Брокеры: RabbitMQ против Kafka
- Гарантии доставки и идемпотентность
- Проблема двойной записи и паттерн outbox
Проектирование систем
5 уроковКак система держит нагрузку: масштабирование вверх и вширь и почему без отсутствия состояния второе невозможно, балансировка нагрузки, слои кэширования и реплики на чтение, компромиссы согласованности из теоремы CAP и разбиение данных по узлам. Модуль связывает backend-навыки с проектированием системы целиком и её цены под ростом запросов.
- Масштабирование и отсутствие состояния
- Балансировка нагрузки
- Кэш и реплики на чтение
- Теорема CAP и согласованность
- Разбиение и шардирование данных
Микросервисы
5 уроковРазбиение системы на отдельно разворачиваемые сервисы: когда и по какому принципу делить, как сервисы общаются (REST против gRPC, синхронно против асинхронно), кто координирует многошаговый процесс и как держать данные согласованными без общей транзакции через паттерн Saga. Модуль показывает, что микросервисы решают проблему масштаба команд ценой распределённости.
- От монолита к микросервисам: когда и зачем
- Межсервисное общение: REST и gRPC
- Оркестрация против хореографии
- Распределённые транзакции и Saga
- База данных на сервис
DDD и CQRS
4 урокаДоменно-ориентированное проектирование как способ держать сложную предметную область под контролем: единый язык, сущности и объекты-значения, агрегаты как границы согласованности и ограниченные контексты; и CQRS — разделение моделей чтения и записи. Модуль показывает мощные приёмы для сложных доменов и честно — почему как архитектура по умолчанию они вредят.
- Строительные блоки DDD
- Агрегаты и границы согласованности
- CQRS: разделение чтения и записи
- Введение в event sourcing
О курсе
Как проектируют серверные системы независимо от языка и фреймворка: что делает границу модуля хорошей, когда монолит разумнее микросервисов и как делить систему на сервисы; синхронная и асинхронная интеграция через очереди и брокеры, гарантии доставки и паттерн outbox; масштабирование, балансировка нагрузки и компромиссы согласованности из теоремы CAP; доменно-ориентированное проектирование и разделение чтения и записи. Цель — модель решений и их цены, на которую ложится реализация на любом стеке. Примеры на C#, принципы нейтральны.