Проект микросервисной архитектуры с использованием FastAPI, RabbitMQ и развёртыванием в Яндекс.Облаке.
miar/
├── services/ # Микросервисы
│ ├── auth-service/ # Сервис аутентификации
│ ├── customers-service/ # Сервис управления клиентами
│ ├── accounts-service/ # Сервис управления счетами ✨ (с CI/CD)
│ ├── payments-service/ # Сервис платежей
│ ├── cards-service/ # Сервис управления картами
│ ├── loans-service/ # Сервис кредитов
│ ├── notifications-service/ # Сервис уведомлений
│ └── audit-service/ # Сервис аудита ✨ (с CI/CD)
├── common/ # Общие модули
├── tests/ # Тесты
│ ├── component/ # Компонентные тесты
│ ├── integration/ # Интеграционные тесты
│ └── unit/ # Юнит-тесты
├── docker/ # Docker конфигурации
├── scripts/ # Скрипты для деплоя и тестирования
└── docs/ # Документация
Сервис для управления счетами и создания платежных инструкций.
Особенности:
- Автоматическая CI/CD через GitHub Actions
- Развёртывание в Яндекс.Облако Serverless Containers
- Автоматическое масштабирование
- REST API для управления платежами
- Интеграция с RabbitMQ
Endpoints:
POST /accounts/{account_id}/payments- Создание платежной инструкции
Документация:
Сервис для сбора и хранения событий аудита от других сервисов.
Особенности:
- Автоматическая CI/CD через GitHub Actions
- Развёртывание в Яндекс.Облако Serverless Containers
- Автоматическое масштабирование
- Сбор событий через RabbitMQ
Документация:
- Python 3.11+
- Docker и Docker Compose
- RabbitMQ (запускается через Docker Compose)
# Создать виртуальное окружение
python -m venv venv
source venv/bin/activate # Linux/macOS
# или
.\venv\Scripts\activate # Windows
# Установить зависимости
pip install -r requirements-test.txt# Запустить все сервисы через Docker Compose
docker-compose up -d
# Проверить статус
docker-compose ps
# Просмотр логов
docker-compose logs -f audit-service- RabbitMQ Management: http://localhost:15672 (admin/admin)
- Auth Service: http://localhost:8001
- Customers Service: http://localhost:8002
- Accounts Service: http://localhost:8003
- Payments Service: http://localhost:8004
- Cards Service: http://localhost:8005
- Loans Service: http://localhost:8006
- Notifications Service: http://localhost:8007
- Audit Service: http://localhost:8008
# Компонентные тесты
pytest tests/component/ -v
# Интеграционные тесты
pytest tests/integration/ -v
# Юнит-тесты
pytest tests/unit/ -v
# Все тесты
pytest -v# Только тесты audit-service
pytest tests/component/test_audit_service.py -v
# С покрытием кода
pytest tests/component/test_audit_service.py --cov=services/audit-service# Проверка работоспособности всех сервисов
python scripts/smoke_test.pyПроект использует GitHub Actions для автоматизации CI/CD процессов.
Триггеры:
- Push в
mainс изменениями вservices/accounts-service/илиcommon/ - Pull Request с изменениями в указанных директориях
- Ручной запуск через GitHub UI
Этапы:
- Test - Запуск компонентных тестов
- Build - Сборка Docker-образа
- Push - Загрузка образа в Yandex Container Registry
- Deploy - Развёртывание в Serverless Containers
- Health Check - Проверка работоспособности
Триггеры:
- Push в
mainс изменениями вservices/audit-service/илиcommon/ - Pull Request с изменениями в указанных директориях
- Ручной запуск через GitHub UI
Этапы:
- Test - Запуск компонентных тестов
- Build - Сборка Docker-образа
- Push - Загрузка образа в Yandex Container Registry
- Deploy - Развёртывание в Serverless Containers
- Health Check - Проверка работоспособности
# Настроить переменные окружения
export YC_REGISTRY_ID="your-registry-id"
export YC_FOLDER_ID="your-folder-id"
export YC_SERVICE_ACCOUNT_ID="your-sa-id"
export RABBITMQ_URL="amqp://user:pass@host:5672/"
# Запустить развёртывание
./scripts/deploy_audit_service.shПодробнее: Документация по развёртыванию
Сервисы взаимодействуют через RabbitMQ используя два типа обмена:
-
Service Events (Direct Exchange)
- Прямая адресация событий конкретным сервисам
- Используется для критичных бизнес-событий
-
Topic Workloads (Topic Exchange)
- Публикация задач по топикам с символами (*, #, -)
- Используется для асинхронной обработки задач
Собирает все события от других сервисов:
- Подписан на очередь сервисных событий
audit - Подписан на топик воркера с символом
- - Хранит последние 200 событий в памяти (deque)
- Предоставляет API для получения статистики
- Backend: FastAPI, Python 3.11+
- Message Broker: RabbitMQ (aio-pika)
- Serialization: orjson
- Testing: pytest, pytest-asyncio
- CI/CD: GitHub Actions
- Cloud: Yandex Cloud Serverless Containers
- Container Registry: Yandex Container Registry
- Containerization: Docker
| Переменная | Описание | По умолчанию |
|---|---|---|
SERVICE_NAME |
Имя сервиса | - |
SERVICE_ROLE |
Роль сервиса | - |
SERVICE_PORT |
Порт сервиса | 8000 |
RABBITMQ_URL |
URL подключения к RabbitMQ | amqp://admin:admin@rabbitmq:5672/ |
| Переменная | Описание | По умолчанию |
|---|---|---|
SLEEP_SYMBOL |
Символ для подписки на топик | - |
- Создайте директорию в
services/ - Добавьте
app/main.pyс FastAPI приложением - Добавьте
requirements.txtс зависимостями - Добавьте сервис в
docker-compose.yml - Создайте тесты в
tests/component/
Используйте audit-service как шаблон:
- Скопируйте
.github/workflows/audit-service-deploy.yml - Измените названия сервиса
- Настройте переменные окружения
- Создайте Dockerfile в директории сервиса
# Форматирование
black services/ common/ tests/
# Линтинг
ruff check services/ common/ tests/
# Проверка типов
mypy services/ common/# Просмотр логов audit-service
yc serverless container revision logs \
--container-name audit-service-container \
--follow
# Логи конкретной ревизии
yc serverless container revision logs \
--revision-id <REVISION_ID>Метрики доступны в Yandex Cloud Console:
- Количество запросов
- Время выполнения
- Ошибки
- Активные инстансы
- Сервисный аккаунт с минимальными привилегиями
- Секреты хранятся в GitHub Secrets
- Docker-образы собираются с непривилегированным пользователем
- Регулярное обновление зависимостей
Примерная стоимость для audit-service:
- Малая нагрузка: ~100-200 ₽/месяц
- Средняя нагрузка: ~500-1000 ₽/месяц
- Высокая нагрузка: ~2000-5000 ₽/месяц
Включает бесплатный Free Tier
- Руководство по развёртыванию Accounts Service
- Руководство по развёртыванию Audit Service
- Быстрый старт развёртывания
MIT
При возникновении вопросов создайте issue в репозитории.