Skip to content

Arseny802/yarch02

 
 

Repository files navigation

Архитектура микросервисов CinemaAbyss

Обзор.

В проекте реализована следующая функциональность:

  • Извлечение микросервисов с использованием паттерна Strangler Fig
  • Развертывание в Kubernetes для оркестрации и масштабирования
  • API Gateway для унифицированного доступа к сервисам
  • Архитектура, управляемая событиями, с использованием Kafka
  • CI/CD Pipeline с GitHub Actions

Компоненты

Монолит

Исходное монолитное приложение обрабатывает:

  • Управление пользователями
  • Метаданные фильмов
  • Платежи
  • Подписки

Сервис расположен в src/monolith/.

Микросервисы

Movies Service

Извлечен из монолита, обрабатывает всю функциональность, связанную с фильмами:

  • Метаданные фильмов
  • Рейтинги
  • Жанры

Расположен в src/microservices/movies/.

Events Service

Обрабатывает коммуникацию между сервисами на основе событий с использованием Kafka:

  • События фильмов (просмотр, оценка, добавление)
  • События пользователей (регистрация, вход)
  • События платежей (успешные, неудачные)

Расположен в src/microservices/events/.

Proxy Service (API Gateway)

Реализует функционал для постепенного перехода от монолита к микросервисам:

  • Маршрутизация запросов между монолитом и микросервисами
  • Поддержка постепенного перехода с процентной маршрутизацией
  • Действует как фасад для всей системы

Расположен в src/microservices/proxy/.

Инфраструктура

Kubernetes

Манифесты Kubernetes для развертывания всех компонентов расположены в src/kubernetes/.

Helm Charts

Charts Helm для упрощения развертывания и управления:

Расположены в src/kubernetes/helm/cinemaabyss/.

Kafka

Расположено в src/kubernetes/kafka/.

CI/CD Pipeline

GitHub Actions для непрерывной интеграции и развертывания:

  • Сборка и тестирование микросервисов
  • Сборка и выгрузка Docker-образов

Расположены в .github/workflows/.

Детали реализации

Паттерн Strangler Fig

Реализован через proxy-сервис, который выступает в роли фасада перед монолитом и микросервисами. Он маршрутизирует трафик на основе конфигурации:

  • При включенном фиче-флаге маршрутизирует определенный процент трафика в микросервис
  • При отключенном маршрутизирует весь трафик для определенного домена в соответствующий микросервис

Это позволяет осуществлять контролируемый постепенный переход без нарушения работы пользователей.

Deployment Instructions

Local Development with Docker Compose

  1. Необходимо, чтобы был установлен docker и docker-compose

  2. Запускаем сервисы с помощью Docker Compose:

    docker-compose up -d

После запуска сервисы доступны:

  1. Останавливаем сервисы:

    docker-compose down -v
  2. После внесения изменений рестартим:

    docker-compose build
    docker-compose up -d

Kubernetes Deployment

Требования

  • Kubernetes cluster (v1.19+)
  • Helm (v3.2.0+)
  • kubectl

Развертывание

  1. Создайте namespace:
kubectl apply -f src/kubernetes/namespace.yaml
  1. Разверните Kafka:
kubectl apply -f src/kubernetes/kafka/kafka.yaml
  1. Разверните базу данных:
kubectl apply -f src/kubernetes/postgres.yaml
  1. Разверните монолит:
kubectl apply -f src/kubernetes/monolith.yaml

5.Разверните микросервисы:

kubectl apply -f src/kubernetes/movies-service.yaml
kubectl apply -f src/kubernetes/events-service.yaml
  1. Разверните прокси-сервис:
kubectl apply -f src/kubernetes/proxy-service.yaml

Развертывание через CI/CD

Проект включает GitHub Actions для CI/CD:

  • Сборка и тестирование: Автоматически собирает и тестирует код при пуше или пул-реквесте.
  • Сборка Docker и выгрузка: Создает Docker-образы и выгружает их в GitHub Container Registry.

Чтобы использовать пайплайн CI/CD:

  1. Создайте форк или клонируйте этот репозиторий в свой аккаунт GitHub.
  2. Отправьте изменения в основную ветку для запуска пайплайна CI/CD.
  3. Выполните ручное или автоматическое развертывание (Helm) в локальной среде

Тестирование API с Postman

Проект включает комплексный набор тестов Postman, которые можно запускать из командной строки с помощью Newman.

Тесты проверяют базовую функциональность всех сервисов в архитектуре.

Покрытие тестами

  • сервис: Пользователи, Фильмы, Платежи, Подписки
  • Микросервис фильмов: Проверка работоспособности, Операции с фильмами
  • Микросервис событий: Проверка работоспособности, Публикация событий
  • Прокси-сервис: Проверка работоспособности, Проксирование запросов

Запуск тестов

Предварительные требования

  • Node.js (v14 или выше)
  • npm (v6 или выше)
  • Newman (установлен через npm)

Установка

  1. Перейдите в директорию тестов
cd tests/postman
  1. Установите зависимости
npm install
  1. Запуск тестов локально
npm run test:local

или

npm run test:docker
  1. Запуск тестов с помощью shell-скрипта

  2. Сделайте скрипт исполняемым chmod +x run-tests.sh

  3. Запустите все тесты

./run-tests.sh -e local

или

./run-tests.sh -d -e docker

Тестирование деплоя руками

  1. Тестирование с Docker Compose

    Отправьте запросы к API Gateway:

    curl http://localhost:8000/api/movies
  2. Протестируйте постепенный переход, изменив переменную окружения MOVIES_MIGRATION_PERCENT в файле docker-compose.yml.

  3. Проверьте топики Kafka и сообщения через Kafka UI по адресу http://localhost:8090

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C++ 37.7%
  • Go 31.8%
  • Dockerfile 9.1%
  • JavaScript 6.3%
  • Shell 6.1%
  • CMake 5.4%
  • Smarty 3.6%