В проекте реализована следующая функциональность:
- Извлечение микросервисов с использованием паттерна Strangler Fig
- Развертывание в Kubernetes для оркестрации и масштабирования
- API Gateway для унифицированного доступа к сервисам
- Архитектура, управляемая событиями, с использованием Kafka
- CI/CD Pipeline с GitHub Actions
Исходное монолитное приложение обрабатывает:
- Управление пользователями
- Метаданные фильмов
- Платежи
- Подписки
Сервис расположен в src/monolith/.
Извлечен из монолита, обрабатывает всю функциональность, связанную с фильмами:
- Метаданные фильмов
- Рейтинги
- Жанры
Расположен в src/microservices/movies/.
Обрабатывает коммуникацию между сервисами на основе событий с использованием Kafka:
- События фильмов (просмотр, оценка, добавление)
- События пользователей (регистрация, вход)
- События платежей (успешные, неудачные)
Расположен в src/microservices/events/.
Реализует функционал для постепенного перехода от монолита к микросервисам:
- Маршрутизация запросов между монолитом и микросервисами
- Поддержка постепенного перехода с процентной маршрутизацией
- Действует как фасад для всей системы
Расположен в src/microservices/proxy/.
Манифесты Kubernetes для развертывания всех компонентов расположены в src/kubernetes/.
Charts Helm для упрощения развертывания и управления:
Расположены в src/kubernetes/helm/cinemaabyss/.
Расположено в src/kubernetes/kafka/.
GitHub Actions для непрерывной интеграции и развертывания:
- Сборка и тестирование микросервисов
- Сборка и выгрузка Docker-образов
Расположены в .github/workflows/.
Реализован через proxy-сервис, который выступает в роли фасада перед монолитом и микросервисами. Он маршрутизирует трафик на основе конфигурации:
- При включенном фиче-флаге маршрутизирует определенный процент трафика в микросервис
- При отключенном маршрутизирует весь трафик для определенного домена в соответствующий микросервис
Это позволяет осуществлять контролируемый постепенный переход без нарушения работы пользователей.
-
Необходимо, чтобы был установлен docker и docker-compose
-
Запускаем сервисы с помощью Docker Compose:
docker-compose up -d
После запуска сервисы доступны:
- Monolith: http://localhost:8080
- Movies Service: http://localhost:8081
- Events Service: http://localhost:8082
- API Gateway (Proxy): http://localhost:8000
- Kafka UI: http://localhost:8090
-
Останавливаем сервисы:
docker-compose down -v
-
После внесения изменений рестартим:
docker-compose build docker-compose up -d
- Kubernetes cluster (v1.19+)
- Helm (v3.2.0+)
- kubectl
- Создайте namespace:
kubectl apply -f src/kubernetes/namespace.yaml- Разверните Kafka:
kubectl apply -f src/kubernetes/kafka/kafka.yaml- Разверните базу данных:
kubectl apply -f src/kubernetes/postgres.yaml- Разверните монолит:
kubectl apply -f src/kubernetes/monolith.yaml5.Разверните микросервисы:
kubectl apply -f src/kubernetes/movies-service.yaml
kubectl apply -f src/kubernetes/events-service.yaml- Разверните прокси-сервис:
kubectl apply -f src/kubernetes/proxy-service.yamlПроект включает GitHub Actions для CI/CD:
- Сборка и тестирование: Автоматически собирает и тестирует код при пуше или пул-реквесте.
- Сборка Docker и выгрузка: Создает Docker-образы и выгружает их в GitHub Container Registry.
Чтобы использовать пайплайн CI/CD:
- Создайте форк или клонируйте этот репозиторий в свой аккаунт GitHub.
- Отправьте изменения в основную ветку для запуска пайплайна CI/CD.
- Выполните ручное или автоматическое развертывание (Helm) в локальной среде
Проект включает комплексный набор тестов Postman, которые можно запускать из командной строки с помощью Newman.
Тесты проверяют базовую функциональность всех сервисов в архитектуре.
Покрытие тестами
- сервис: Пользователи, Фильмы, Платежи, Подписки
- Микросервис фильмов: Проверка работоспособности, Операции с фильмами
- Микросервис событий: Проверка работоспособности, Публикация событий
- Прокси-сервис: Проверка работоспособности, Проксирование запросов
- Node.js (v14 или выше)
- npm (v6 или выше)
- Newman (установлен через npm)
- Перейдите в директорию тестов
cd tests/postman- Установите зависимости
npm install- Запуск тестов локально
npm run test:localили
npm run test:docker-
Запуск тестов с помощью shell-скрипта
-
Сделайте скрипт исполняемым chmod +x run-tests.sh
-
Запустите все тесты
./run-tests.sh -e localили
./run-tests.sh -d -e docker-
Тестирование с Docker Compose
Отправьте запросы к API Gateway:
curl http://localhost:8000/api/movies
-
Протестируйте постепенный переход, изменив переменную окружения MOVIES_MIGRATION_PERCENT в файле docker-compose.yml.
-
Проверьте топики Kafka и сообщения через Kafka UI по адресу http://localhost:8090