Архитектура программных систем

Уроки с примерами кода; тему можно сразу закрепить вопросами в тренажёре.

Материалы открываются после регистрации на Free.

Уроки по модулям

  1. Модульная архитектура

    3 урока

    Из чего складывается хорошая граница в системе: связанность и связность как две силы, способы организовать код (по слоям или по фичам) и модульный монолит как разумная стартовая архитектура. Модуль показывает, что архитектура — это в первую очередь решение о границах, и что чёткие границы внутри одного процесса дешевле распределённой системы.

    1. Связанность и связность: критерий границы
    2. Организация кода: по слоям или по фичам
    3. Модульный монолит как стартовая архитектура
  2. Очереди и интеграция

    4 урока

    Как сервисы обмениваются данными, не завися друг от друга во времени: синхронный вызов против асинхронного сообщения, брокеры RabbitMQ и Kafka и их разные модели, гарантии доставки и идемпотентность потребителя, паттерн outbox против проблемы двойной записи. Модуль строит модель надёжной интеграции, в которой отказ или задержка одного сервиса не валит остальные.

    1. Синхронная и асинхронная интеграция
    2. Брокеры: RabbitMQ против Kafka
    3. Гарантии доставки и идемпотентность
    4. Проблема двойной записи и паттерн outbox
  3. Проектирование систем

    5 уроков

    Как система держит нагрузку: масштабирование вверх и вширь и почему без отсутствия состояния второе невозможно, балансировка нагрузки, слои кэширования и реплики на чтение, компромиссы согласованности из теоремы CAP и разбиение данных по узлам. Модуль связывает backend-навыки с проектированием системы целиком и её цены под ростом запросов.

    1. Масштабирование и отсутствие состояния
    2. Балансировка нагрузки
    3. Кэш и реплики на чтение
    4. Теорема CAP и согласованность
    5. Разбиение и шардирование данных
  4. Микросервисы

    5 уроков

    Разбиение системы на отдельно разворачиваемые сервисы: когда и по какому принципу делить, как сервисы общаются (REST против gRPC, синхронно против асинхронно), кто координирует многошаговый процесс и как держать данные согласованными без общей транзакции через паттерн Saga. Модуль показывает, что микросервисы решают проблему масштаба команд ценой распределённости.

    1. От монолита к микросервисам: когда и зачем
    2. Межсервисное общение: REST и gRPC
    3. Оркестрация против хореографии
    4. Распределённые транзакции и Saga
    5. База данных на сервис
  5. DDD и CQRS

    4 урока

    Доменно-ориентированное проектирование как способ держать сложную предметную область под контролем: единый язык, сущности и объекты-значения, агрегаты как границы согласованности и ограниченные контексты; и CQRS — разделение моделей чтения и записи. Модуль показывает мощные приёмы для сложных доменов и честно — почему как архитектура по умолчанию они вредят.

    1. Строительные блоки DDD
    2. Агрегаты и границы согласованности
    3. CQRS: разделение чтения и записи
    4. Введение в event sourcing

О курсе

Как проектируют серверные системы независимо от языка и фреймворка: что делает границу модуля хорошей, когда монолит разумнее микросервисов и как делить систему на сервисы; синхронная и асинхронная интеграция через очереди и брокеры, гарантии доставки и паттерн outbox; масштабирование, балансировка нагрузки и компромиссы согласованности из теоремы CAP; доменно-ориентированное проектирование и разделение чтения и записи. Цель — модель решений и их цены, на которую ложится реализация на любом стеке. Примеры на C#, принципы нейтральны.

Дальше по теме

Пройдите курс и проверьте темы вслух