Самопрезентация микросервисной архитектуры нового поколения
Это production-ready микросервисная платформа, демонстрирующая современные подходы к разработке и развертыванию распределенных систем. Весь код хранится в репозитории, автоматически подгружается через CI/CD и разворачивается на сервере с полной автоматизацией процессов.
Платформа построена на принципах Domain-Driven Design и Hexagonal Architecture, обеспечивая чистую архитектуру, тестируемость и возможность независимого масштабирования каждого сервиса.
Полностью автоматизированный процесс разработки и развертывания:
Код хранится в репозитории, автоматически собирается и разворачивается при каждом коммите в main ветку
Мультистейдж сборка образов, независимое масштабирование API, миграций и consumers
Let's Encrypt сертификаты получаются и обновляются автоматически каждые 12 часов
Nginx выступает единой точкой входа для всех сервисов, обеспечивая:
Платформа построена на современных архитектурных паттернах, обеспечивающих чистоту кода, тестируемость и возможность независимого развития каждого сервиса.
Разделение на domain (бизнес-логика), application (use cases) и infrastructure (адаптеры). Domain не зависит от внешних библиотек, что обеспечивает чистоту бизнес-логики и простоту тестирования.
Преимущества: Изоляция бизнес-логики, легкая замена адаптеров (БД, HTTP, message broker), возможность тестирования без внешних зависимостей.
Структура кода отражает доменную модель: Entities (сущности), Value Objects (значения), Domain Events (события), Repositories (хранилища). Каждый сервис имеет четко определенную границу контекста.
Преимущества: Понятная структура кода, соответствие бизнес-логике, легкость добавления новых функций, лучшая коммуникация между разработчиками и бизнесом.
Использование библиотеки dishka для управления зависимостями. Все зависимости инжектируются через конструкторы, что упрощает тестирование и делает зависимости явными.
Преимущества: Легкое мокирование в тестах, явные зависимости, автоматическое управление жизненным циклом объектов, поддержка async/await.
Сервисы общаются через события, публикуемые в RabbitMQ. Это обеспечивает слабую связанность и возможность асинхронной обработки задач.
Преимущества: Слабая связанность сервисов, масштабируемость, отказоустойчивость (события сохраняются в очереди), возможность обработки в фоне.
Платформа построена из 12 независимых микросервисов, каждый из которых:
Каждый сервис может масштабироваться независимо: API, миграции и consumers запускаются отдельными контейнерами
Архитектура позволяет добавлять новые сервисы без изменения существующих. Просто создайте новый сервис и добавьте его в docker-compose
Каждый сервис изолирован и может разрабатываться, тестироваться и развертываться независимо
Auth - аутентификация (OTP, JWT), Notification - уведомления (Email/SMS), Payment - платежи и инвойсы, Referral - реферальные программы
User - профили пользователей, Product - продукты и склад, Order - заказы, Support - тикеты поддержки
Все операции выполняются асинхронно через AsyncIO, обеспечивая высокую производительность и возможность обработки тысяч одновременных запросов. База данных и внешние API вызываются без блокировки основного потока.
Единый Dockerfile для каждого сервиса с отдельными стадиями (base, api, migrations, tests, consumer). Это позволяет оптимизировать размер образов, использовать кэширование слоев и запускать разные части сервиса независимо.
Преимущества: Меньший размер образов, быстрая сборка за счет кэширования, изоляция зависимостей для разных целей (API, тесты, миграции).
Сервисы общаются через события, публикуемые в RabbitMQ. Это обеспечивает слабую связанность, возможность асинхронной обработки и масштабирования consumers независимо от API.
Примеры: AccountCreatedEvent → User Service создает профиль, InvoicePaidEvent → Order Service подтверждает оплату.
Для синхронных операций сервисы используют HTTP клиенты (httpx) с retry логикой и exponential backoff. Это обеспечивает надежность межсервисного взаимодействия.
Примеры: Order Service → Payment Service (создание инвойса), Order Service → Product Service (проверка наличия товаров).
Каждый микросервис самодостаточен и включает в себя: автоматические метрики Prometheus (prometheus-fastapi-instrumentator), структурированное логирование (structlog), health checks, error handling (DomainException) и интеграцию с dishka для DI.
Преимущества: Независимость сервисов, отсутствие общей библиотеки, автоматическая настройка мониторинга и логирования, Outbox pattern для надежной публикации событий.
Все изменения схемы БД управляются через Alembic миграции. Каждый сервис имеет свою базу данных, что обеспечивает изоляцию данных и возможность независимого масштабирования.
Преимущества: Версионирование схемы БД, возможность отката изменений, автоматическое применение миграций при деплое.
Платформа использует современные технологии, обеспечивающие высокую производительность, надежность и удобство разработки:
Полноценная система мониторинга и метрик:
Каждый сервис экспортирует метрики производительности, ошибок и бизнес-логики
Централизованные health endpoints для проверки состояния всех сервисов
Все логи содержат correlation_id для отслеживания запросов через всю систему
Возможность отследить запрос от начала до конца через все сервисы
Неограниченное расширение
Легко добавлять новые сервисы без изменения существующих
Высокая производительность
Асинхронная архитектура обрабатывает тысячи запросов одновременно
Тестируемость
Hexagonal Architecture позволяет тестировать бизнес-логику изолированно
Горизонтальное масштабирование
Каждый сервис масштабируется независимо
Production-ready
Полная готовность к продакшену с мониторингом, логированием и health checks
Независимое развертывание
Каждый сервис может обновляться без остановки других
Отказоустойчивость
Сбой одного сервиса не влияет на работу остальных
Командная разработка
Разные команды могут работать над разными сервисами параллельно