cubenet_backend/ARCHITECTURE.md

218 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Архитектура 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):**
```bash
cargo run -p user_service
```
**Терминал 2 - API (gRPC клиент, порт 8001):**
```bash
cargo run -p api
```
**Терминал 3 - API Gateway (REST + Swagger, порт 8000):**
```bash
cargo run -p api_gateway
```
## 📚 Swagger Documentation
После запуска API Gateway, откройте браузер:
```
http://localhost:8000/swagger-ui/
```
Здесь вы сможете:
- Просмотреть все доступные endpoints
- Тестировать API requests
- Изучать схему данных
## 🔧 Создание нового микросервиса
### Шаг 1: Скопировать шаблон
```bash
cp -r microservices/template_service microservices/my_service
```
### Шаг 2: Обновить Cargo.toml
```toml
[package]
name = "my_service"
```
### Шаг 3: Добавить в workspace (корневой Cargo.toml)
```toml
[workspace]
members = ["api_gateway", "api", "microservices/user_service", "microservices/my_service"]
```
### Шаг 4: Определить proto файл
```bash
# Добавить my_service.proto в shared_proto/proto/
# Обновить shared_proto/src/lib.rs
```
### Шаг 5: Реализовать сервис
```bash
# Редактировать 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
```bash
# 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 сервисы
```bash
# Использовать grpcurl или подобные инструменты
grpcurl -plaintext localhost:13001 list
```
## ⚙️ Конфигурация
Основные конфигурационные параметры:
- `api_gateway` адрес: `127.0.0.1:8000`
- `api` адрес: `127.0.0.1:8001`
- `user_service` gRPC: `127.0.0.1:13001`
- `template_service` gRPC: `127.0.0.1:13000` (по умолчанию)
## 🐛 Отладка
Включить подробное логирование:
```bash
RUST_LOG=debug cargo run -p api_gateway
RUST_LOG=trace cargo run -p api
```
## 📝 Лучшие практики
1. **Модульность**: Каждый микросервис в отдельной папке
2. **Proto files**: Все определения в `shared_proto/proto/`
3. **Порты**: 13000-14000 зарезервированы для микросервисов
4. **Логирование**: Используйте `tracing` для логирования
5. **Ошибки**: Пробрасывайте gRPC Status коды вместо паники