🚀 О платформе

Самопрезентация микросервисной архитектуры нового поколения

💡 Что это за приложение?

Это production-ready микросервисная платформа, демонстрирующая современные подходы к разработке и развертыванию распределенных систем. Весь код хранится в репозитории, автоматически подгружается через CI/CD и разворачивается на сервере с полной автоматизацией процессов.

Платформа построена на принципах Domain-Driven Design и Hexagonal Architecture, обеспечивая чистую архитектуру, тестируемость и возможность независимого масштабирования каждого сервиса.

🔄 CI/CD и автоматизация

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

📦
GitLab CI/CD

Код хранится в репозитории, автоматически собирается и разворачивается при каждом коммите в main ветку

🐳
Docker & Docker Compose

Мультистейдж сборка образов, независимое масштабирование API, миграций и consumers

🔐
Автоматический SSL

Let's Encrypt сертификаты получаются и обновляются автоматически каждые 12 часов

⚖️ Nginx: Reverse Proxy и Load Balancer

Nginx выступает единой точкой входа для всех сервисов, обеспечивая:

  • Reverse Proxy - централизованная маршрутизация всех запросов через единый домен
  • Load Balancing - распределение нагрузки между несколькими экземплярами сервисов
  • SSL Termination - обработка HTTPS соединений и автоматический редирект HTTP → HTTPS
  • Security Headers - современные заголовки безопасности для защиты от атак
  • Модульная конфигурация - легко добавлять новые сервисы без изменения основной конфигурации

🏛️ Архитектурные паттерны

Платформа построена на современных архитектурных паттернах, обеспечивающих чистоту кода, тестируемость и возможность независимого развития каждого сервиса.

🔷
Hexagonal Architecture (Ports & Adapters)

Разделение на domain (бизнес-логика), application (use cases) и infrastructure (адаптеры). Domain не зависит от внешних библиотек, что обеспечивает чистоту бизнес-логики и простоту тестирования.

Преимущества: Изоляция бизнес-логики, легкая замена адаптеров (БД, HTTP, message broker), возможность тестирования без внешних зависимостей.

📐
Domain-Driven Design (DDD)

Структура кода отражает доменную модель: Entities (сущности), Value Objects (значения), Domain Events (события), Repositories (хранилища). Каждый сервис имеет четко определенную границу контекста.

Преимущества: Понятная структура кода, соответствие бизнес-логике, легкость добавления новых функций, лучшая коммуникация между разработчиками и бизнесом.

💉
Dependency Injection (dishka)

Использование библиотеки dishka для управления зависимостями. Все зависимости инжектируются через конструкторы, что упрощает тестирование и делает зависимости явными.

Преимущества: Легкое мокирование в тестах, явные зависимости, автоматическое управление жизненным циклом объектов, поддержка async/await.

📨
Event-Driven Architecture

Сервисы общаются через события, публикуемые в RabbitMQ. Это обеспечивает слабую связанность и возможность асинхронной обработки задач.

Преимущества: Слабая связанность сервисов, масштабируемость, отказоустойчивость (события сохраняются в очереди), возможность обработки в фоне.

🏗️ Микросервисная архитектура

Платформа построена из 12 независимых микросервисов, каждый из которых:

🔌
Независимое масштабирование

Каждый сервис может масштабироваться независимо: API, миграции и consumers запускаются отдельными контейнерами

♾️
Неограниченное расширение

Архитектура позволяет добавлять новые сервисы без изменения существующих. Просто создайте новый сервис и добавьте его в docker-compose

🧩
Модульность

Каждый сервис изолирован и может разрабатываться, тестироваться и развертываться независимо

🔐
BASE_APP Сервисы

Auth - аутентификация (OTP, JWT), Notification - уведомления (Email/SMS), Payment - платежи и инвойсы, Referral - реферальные программы

🚀
AIRA Сервисы

User - профили пользователей, Product - продукты и склад, Order - заказы, Support - тикеты поддержки

⚙️ Ключевые технические решения

Асинхронная архитектура

Все операции выполняются асинхронно через AsyncIO, обеспечивая высокую производительность и возможность обработки тысяч одновременных запросов. База данных и внешние API вызываются без блокировки основного потока.

🐳
Docker Multi-stage Builds

Единый Dockerfile для каждого сервиса с отдельными стадиями (base, api, migrations, tests, consumer). Это позволяет оптимизировать размер образов, использовать кэширование слоев и запускать разные части сервиса независимо.

Преимущества: Меньший размер образов, быстрая сборка за счет кэширования, изоляция зависимостей для разных целей (API, тесты, миграции).

🔄
Event-Driven Communication

Сервисы общаются через события, публикуемые в RabbitMQ. Это обеспечивает слабую связанность, возможность асинхронной обработки и масштабирования consumers независимо от API.

Примеры: AccountCreatedEvent → User Service создает профиль, InvoicePaidEvent → Order Service подтверждает оплату.

🌐
HTTP Inter-Service Communication

Для синхронных операций сервисы используют HTTP клиенты (httpx) с retry логикой и exponential backoff. Это обеспечивает надежность межсервисного взаимодействия.

Примеры: Order Service → Payment Service (создание инвойса), Order Service → Product Service (проверка наличия товаров).

📦
Self-contained микросервисы

Каждый микросервис самодостаточен и включает в себя: автоматические метрики Prometheus (prometheus-fastapi-instrumentator), структурированное логирование (structlog), health checks, error handling (DomainException) и интеграцию с dishka для DI.

Преимущества: Независимость сервисов, отсутствие общей библиотеки, автоматическая настройка мониторинга и логирования, Outbox pattern для надежной публикации событий.

🗄️
Database Migrations (Alembic)

Все изменения схемы БД управляются через Alembic миграции. Каждый сервис имеет свою базу данных, что обеспечивает изоляцию данных и возможность независимого масштабирования.

Преимущества: Версионирование схемы БД, возможность отката изменений, автоматическое применение миграций при деплое.

🛠️ Технологический стек

Платформа использует современные технологии, обеспечивающие высокую производительность, надежность и удобство разработки:

🐘
PostgreSQL 15
Надежная реляционная БД с поддержкой транзакций, ACID и миграций через Alembic. Каждый сервис имеет свою изолированную базу данных.
🐰
RabbitMQ
Message broker для асинхронной коммуникации между сервисами через события. Обеспечивает надежную доставку сообщений и возможность масштабирования consumers.
Redis 7
In-memory кэш для быстрого доступа к данным, сессиям и временному хранению. Используется для оптимизации производительности и снижения нагрузки на БД.
🚀
FastAPI
Высокопроизводительный асинхронный веб-фреймворк с автоматической документацией (OpenAPI/Swagger), валидацией через Pydantic и поддержкой async/await.
🐍
Python 3.12
Современный Python с поддержкой async/await, type hints, dataclasses и улучшенной производительностью. Используется для всех микросервисов.
🐳
Docker Multi-stage
Единый Dockerfile для каждого сервиса с отдельными стадиями для API, migrations, tests и consumers. Оптимизация размера образов и кэширования.
📊
Prometheus
Метрики и мониторинг производительности всех сервисов. Экспорт метрик в формате Prometheus для сбора и анализа через prometheus-fastapi-instrumentator.
📝
Structlog
Структурированное логирование с поддержкой correlation_id для отслеживания запросов через всю систему. JSON формат для удобного парсинга.
🧪
Pytest + pytest-asyncio
Фреймворк для тестирования с поддержкой async тестов. Все сервисы имеют unit тесты, запускаемые автоматически через Docker Compose.

📊 Метрики и мониторинг

Полноценная система мониторинга и метрик:

📈
Prometheus метрики

Каждый сервис экспортирует метрики производительности, ошибок и бизнес-логики

💚
Health Checks

Централизованные health endpoints для проверки состояния всех сервисов

📝
Структурированное логирование

Все логи содержат correlation_id для отслеживания запросов через всю систему

🔍
Трассировка

Возможность отследить запрос от начала до конца через все сервисы

✨ Ключевые преимущества архитектуры

Неограниченное расширение
Легко добавлять новые сервисы без изменения существующих

Высокая производительность
Асинхронная архитектура обрабатывает тысячи запросов одновременно

🧪

Тестируемость
Hexagonal Architecture позволяет тестировать бизнес-логику изолированно

📈

Горизонтальное масштабирование
Каждый сервис масштабируется независимо

🔒

Production-ready
Полная готовность к продакшену с мониторингом, логированием и health checks

🔄

Независимое развертывание
Каждый сервис может обновляться без остановки других

🛡️

Отказоустойчивость
Сбой одного сервиса не влияет на работу остальных

👥

Командная разработка
Разные команды могут работать над разными сервисами параллельно

📊 Статистика проекта

12
Микросервисов
4
Базовых сервисов
4
Бизнес-сервисов
60+
Unit тестов
85%
Готовность к продакшену
100%
Покрытие Docker