6.9 KiB
6.9 KiB
Архитектура Cubenet Backend
📐 Схема взаимодействия
┌─────────────┐
│ Клиент │
└──────┬──────┘
│ REST API
▼
┌─────────────────────────────────┐
│ API Gateway (8000) │
│ - REST endpoints │
│ - Swagger UI (/swagger-ui) │
└──────────┬──────────────────────┘
│ gRPC
▼
┌──────────────────┐
│ API (8001) │
│ - gRPC Client │
└────────┬─────────┘
│ gRPC
▼
┌──────────────────────────────────────┐
│ Microservices (13000-14000) │
├──────────────────────────────────────┤
│ - User Service (13001) │
│ - Template Service (13000+) │
│ - [Ваши сервисы] │
└──────────────────────────────────────┘
🔌 Протоколы коммуникации
REST API (Client ↔ API Gateway)
- Порт: 8000
- Описание: REST endpoints для клиентов
- Документация: Swagger UI на
/swagger-ui/ - Endpoints:
GET /api/health- проверка здоровьяGET /api/users- получить список пользователейPOST /api/users- создать пользователя
gRPC (API Gateway ↔ API)
- Порт: 9000 (зарезервирован)
- Описание: Internal communication
gRPC (API ↔ Microservices)
- Порты: 13000-14000
- Диапазон: Для каждого микросервиса свой порт
- Примеры:
- User Service: 13001
- Другие сервисы: 13002-14000
📁 Структура каталогов
cubenet_backend/
├── api_gateway/
│ ├── Cargo.toml
│ └── src/
│ └── main.rs # REST endpoints + Swagger
│
├── api/
│ ├── Cargo.toml
│ └── src/
│ └── main.rs # gRPC клиент + REST
│
├── microservices/
│ ├── user_service/ # gRPC сервис пользователей
│ │ ├── Cargo.toml
│ │ └── src/main.rs
│ │
│ └── template_service/ # Шаблон для новых сервисов
│ ├── Cargo.toml
│ └── src/main.rs
│
├── shared_proto/ # Proto определения
│ ├── Cargo.toml
│ ├── build.rs
│ ├── src/lib.rs
│ └── proto/
│ ├── user.proto
│ └── api.proto
│
└── Cargo.toml # Workspace конфигурация
🚀 Запуск проекта
Всё сразу (требует 3 терминала)
Терминал 1 - User Service (gRPC, порт 13001):
cargo run -p user_service
Терминал 2 - API (gRPC клиент, порт 8001):
cargo run -p api
Терминал 3 - API Gateway (REST + Swagger, порт 8000):
cargo run -p api_gateway
📚 Swagger Documentation
После запуска API Gateway, откройте браузер:
http://localhost:8000/swagger-ui/
Здесь вы сможете:
- Просмотреть все доступные endpoints
- Тестировать API requests
- Изучать схему данных
🔧 Создание нового микросервиса
Шаг 1: Скопировать шаблон
cp -r microservices/template_service microservices/my_service
Шаг 2: Обновить Cargo.toml
[package]
name = "my_service"
Шаг 3: Добавить в workspace (корневой Cargo.toml)
[workspace]
members = ["api_gateway", "api", "microservices/user_service", "microservices/my_service"]
Шаг 4: Определить proto файл
# Добавить my_service.proto в shared_proto/proto/
# Обновить shared_proto/src/lib.rs
Шаг 5: Реализовать сервис
# Редактировать microservices/my_service/src/main.rs
Шаг 6: Выбрать порт
Используйте порты из диапазона 13000-14000:
- 13001 - User Service
- 13002-14000 - Ваши сервисы
🔐 Порты и выделение
| Компонент | Порт | Протокол | Тип |
|---|---|---|---|
| API Gateway | 8000 | HTTP/REST | Public |
| API | 8001 | HTTP/REST | Internal |
| User Service | 13001 | gRPC | Internal |
| Микросервисы | 13000-14000 | gRPC | Internal |
📦 Зависимости
- axum - Веб-фреймворк (REST)
- tonic - gRPC framework
- tokio - Async runtime
- serde - Сериализация
- utoipa - OpenAPI/Swagger генератор
- prost - Protocol Buffers
🧪 Тестирование
Проверить REST endpoints
# Health check
curl http://localhost:8000/api/health
# Получить пользователей
curl http://localhost:8000/api/users
# Создать пользователя
curl -X POST http://localhost:8000/api/users \
-H "Content-Type: application/json" \
-d '{"name":"John","email":"john@example.com"}'
Проверить gRPC сервисы
# Использовать grpcurl или подобные инструменты
grpcurl -plaintext localhost:13001 list
⚙️ Конфигурация
Основные конфигурационные параметры:
api_gatewayадрес:127.0.0.1:8000apiадрес:127.0.0.1:8001user_servicegRPC:127.0.0.1:13001template_servicegRPC:127.0.0.1:13000(по умолчанию)
🐛 Отладка
Включить подробное логирование:
RUST_LOG=debug cargo run -p api_gateway
RUST_LOG=trace cargo run -p api
📝 Лучшие практики
- Модульность: Каждый микросервис в отдельной папке
- Proto files: Все определения в
shared_proto/proto/ - Порты: 13000-14000 зарезервированы для микросервисов
- Логирование: Используйте
tracingдля логирования - Ошибки: Пробрасывайте gRPC Status коды вместо паники