Контейнеры и микросервисы #
Документ посвящён необходимым знаниям, относящимся к контейнерам и микросервисам.
Docker #
Docker - основная технология контейнеризации, ежедневно используемая большинством backend разработчиков.
Преимущества и удобства:
- Локальная разработка - развернуть копию проекта, запустить одной командой конкретную версию нужной базы данных
- Деплой - единожды собранный образ работает одинаково и локально, и на удалённом сервисе
Что нужно знать:
- Отличие контейнеров от виртуальных машин - https://www.youtube.com/watch?v=cjXI-yxqGTI
- Базовые идеи и понятия - контейнеры, образы, Docker layers, volumes
- Поиск образов нужных приложений на Docker Hub и их локальный запуск
- Работа с Docker CLI - сборка образов, запуск контейнеров, доступ к терминалу контейнера и логам
- Dockerfile - написание сценариев сборки образа
- Docker Compose - запуск стека из нескольких взаимодействующих друг с другом контейнеров
- Docker в контексте Spring Boot - Dockerfile для сборки и запуска приложения
Избранные курсы и учебные ресурсы #
- Курс “Docker Mastery” (English)
- “Docker - Полный курс” от Богдана Стащука
- Практика:
- Проект #6 “Облачное хранилище” - написание Docker Compose стека с базами данных (SQL, MinIO, Redis), деплой
- Проект #7 “Планировщик задач” - упаковка Spring Boot приложения в Docker образ, написание своего Docker Compose стека (Spring Boot сервисы, хранилища), сборка образов в CI/CD пайплайне, деплой
Что дальше (уровень middle и выше):
- Kubernetes
- Облачные технологии
Микросервисы #
Микросервисы - актуальный подход к проектированию систем, основанный на разбиении системы на небольшие независимые сервисы, каждый из которых решает свою задачу. Идеи микросервисного подхода можно почерпнуть из первой главы книги “Building Microservices: Designing Fine-Grained Systems”.
На уровне Junior, как правило, не приходится заниматься проектированием, поэтому для начала важно сконцентрироваться на прикладных аспектах разработки микросервисов:
- Подходы кросс-сервисного взаимодействия - REST, RPC, брокеры очередей
- Docker Compose для локальной разработки стека из микросервисов
- Организация микросервисных проектов, монорепозиторий (один репозиторий для всех сервисов) против отдельного репозитория для каждого сервиса - Mono vs Multi Repos - Pick Your Poison
Избранные курсы и учебные ресурсы #
- Введение в тему - “O’Reilly - Software Architecture Patterns” - главы Event-driver Architecture, Microservices Architecture
- “Building Microservices: Designing Fine-Grained Systems” by Sam Newman
- Kafka:
- Документация модуля Spring Kafka - https://docs.spring.io/spring-kafka/reference/index.html
- Практика:
- Проект #7 “Планировщик задач” - разработка проекта в миросервисном стиле (3 сервиса на Spring Boot и 1 сервис для фронтенда), кросс-сервисное общение через брокер сообщений Kafka
Что дальше (уровень middle и выше):
- Проектирование микросервисных систем, микросервисные паттерны
- Мониторинг
- Отказоустойчивость и масштабирование
- Нагрузочное тестирование