Перейти к основному содержимому
DevScallix

Microservices и Distributed Systems: Модули

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

  1. 01

    Границы сервисов

    Учимся делить сервисы по бизнес-возможностям, а не по техническим слоям.

    • Bounded context и основы domain-driven design
    • Признаки границы: частота изменений и владение командой
    • Виды связности и ловушка распределённого монолита
    • Постепенное разделение подходом strangler
    • Модульный монолит как альтернатива

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

  2. 02

    Владение данными

    Отвечаем на вопрос, как строить запросы и отчёты, когда каждый сервис владеет своими данными.

    • База данных на сервис и риски общей базы
    • Дублирование данных и read model
    • API composition и введение в CQRS
    • Жизнь без ссылочной целостности между сервисами
    • Миграция данных и владение схемой

    Лабораторная: Разделить два сервиса, использующих общую таблицу: провести границу владения и написать поэтапный план переноса данных.

  3. 03

    Синхронное и асинхронное взаимодействие

    Сравниваем последствия выбора REST, gRPC или обмена сообщениями.

    • REST и gRPC: различия контракта и производительности
    • Обмен сообщениями и взаимодействие через события
    • Временная связность и расчёт доступности
    • Контрактные тесты (consumer-driven contract)
    • Роль API gateway и BFF

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

  4. 04

    Работа со сбоями

    Сеть ненадёжна; проектируем систему так, чтобы она правильно на это реагировала.

    • Бюджет timeout и каскадный сбой
    • Retry, exponential backoff и jitter
    • Circuit breaker, bulkhead и load shedding
    • Ключи идемпотентности
    • Введение в chaos-эксперименты

    Лабораторная: Внедрить сбои в сервис и сравнить поведение системы без timeout и circuit breaker и с ними.

  5. 05

    Saga и модели согласованности

    Работаем с компенсирующими потоками и eventual consistency вместо распределённых транзакций.

    • Strong и eventual consistency
    • Saga: choreography и orchestration
    • Компенсирующие действия и необратимые шаги
    • Transactional outbox
    • Как показывать пользователю частичное состояние

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

  6. 06

    Distributed tracing и наблюдаемость

    Делаем видимым, что происходит, когда один запрос проходит через несколько сервисов.

    • Trace, span и propagation контекста
    • Инструментирование через OpenTelemetry
    • Correlation ID между сервисами
    • Карта сервисов и анализ зависимостей
    • Алертинг на основе SLO

    Лабораторная: Настроить OpenTelemetry в потоке из трёх сервисов и найти по трейсу источник замедления.

  7. 07

    Развёртывание: контейнеры и концепции Kubernetes

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

    • Слои Docker image и компактные image
    • Концепции Deployment, Service и ConfigMap
    • Liveness и readiness probe
    • Resource request/limit и согласование памяти JVM
    • Rolling update и откат

    Лабораторная: Контейнеризировать сервис, написать манифест deployment и понаблюдать последствия неверно настроенных probe.

  8. 08

    Когда модульный монолит лучше

    Честно оцениваем реальную цену выбора микросервисов и альтернативы.

    • Цена операционной сложности
    • Размер команды и закон Конвея
    • Дисциплина границ внутри модульного монолита
    • Запись архитектурного решения (ADR)

    Лабораторная: Для заданного сценария компании сравнить монолит, модульный монолит и микросервисы в формате ADR и записать решение.

Вернуться на страницу программыЗадать вопрос о плане