269 lines
7.6 KiB
Markdown
269 lines
7.6 KiB
Markdown
# MVP Platform Services
|
|
|
|
## Overview
|
|
|
|
MVP Platform Services are **independent microservices** that provide shared capabilities to multiple applications. These services are completely separate from the MotoVaultPro application and can be deployed, scaled, and maintained independently.
|
|
|
|
## Architecture Pattern
|
|
|
|
Each platform service follows a **3-container microservice pattern**:
|
|
- **Database Container**: Dedicated PostgreSQL instance
|
|
- **API Container**: FastAPI service exposing REST endpoints
|
|
- **ETL Container**: Data processing and transformation (where applicable)
|
|
|
|
## Platform Services
|
|
|
|
### 1. MVP Platform Vehicles Service
|
|
|
|
The primary platform service providing comprehensive vehicle data through hierarchical APIs.
|
|
|
|
#### Architecture Components
|
|
- **API Service**: Python FastAPI on port 8000
|
|
- **Database**: PostgreSQL on port 5433 with normalized VPIC schema
|
|
- **Cache**: Dedicated Redis instance on port 6380
|
|
- **ETL Pipeline**: MSSQL → PostgreSQL data transformation
|
|
|
|
#### API Endpoints
|
|
|
|
**Hierarchical Vehicle Data API**:
|
|
```
|
|
GET /vehicles/makes?year={year}
|
|
GET /vehicles/models?year={year}&make_id={make_id}
|
|
GET /vehicles/trims?year={year}&make_id={make_id}&model_id={model_id}
|
|
GET /vehicles/engines?year={year}&make_id={make_id}&model_id={model_id}
|
|
GET /vehicles/transmissions?year={year}&make_id={make_id}&model_id={model_id}
|
|
```
|
|
|
|
**VIN Decoding**:
|
|
```
|
|
POST /vehicles/vindecode
|
|
```
|
|
|
|
**Health and Documentation**:
|
|
```
|
|
GET /health
|
|
GET /docs # Swagger UI
|
|
```
|
|
|
|
#### Data Source and ETL
|
|
|
|
**Source**: NHTSA VPIC database (MSSQL format)
|
|
**ETL Schedule**: Weekly data refresh
|
|
**Data Pipeline**:
|
|
1. Extract from NHTSA MSSQL database
|
|
2. Transform and normalize vehicle specifications
|
|
3. Load into PostgreSQL with optimized schema
|
|
4. Build hierarchical cache structure
|
|
|
|
#### Caching Strategy
|
|
|
|
**Year-based Hierarchical Caching**:
|
|
- Cache vehicle makes by year (1 week TTL)
|
|
- Cache models by year+make (1 week TTL)
|
|
- Cache trims/engines/transmissions by year+make+model (1 week TTL)
|
|
- VIN decode results cached by VIN (permanent)
|
|
|
|
#### Authentication
|
|
|
|
**Service-to-Service Authentication**:
|
|
- API Key: `PLATFORM_VEHICLES_API_KEY`
|
|
- Header: `X-API-Key: {api_key}`
|
|
- No user authentication (service-level access only)
|
|
|
|
### 2. MVP Platform Tenants Service
|
|
|
|
Multi-tenant management service for platform-wide tenant operations.
|
|
|
|
#### Architecture Components
|
|
- **API Service**: Python FastAPI on port 8000
|
|
- **Database**: Dedicated PostgreSQL on port 5434
|
|
- **Cache**: Dedicated Redis instance on port 6381
|
|
|
|
#### Capabilities
|
|
- Tenant provisioning and management
|
|
- Cross-service tenant validation
|
|
- Tenant-specific configuration management
|
|
|
|
### 3. MVP Platform Landing Service
|
|
|
|
Marketing and landing page service.
|
|
|
|
#### Architecture Components
|
|
- **Frontend**: Vite-based static site served via nginx
|
|
- **URL**: `https://motovaultpro.com`
|
|
|
|
## Service Communication
|
|
|
|
### Inter-Service Communication
|
|
Platform services have **no direct communication** between each other, but share some infrastructure resources:
|
|
|
|
**Shared Resources**:
|
|
- Configuration files (`./config/shared/production.yml`)
|
|
- Secret management infrastructure (`./secrets/platform/` directory structure)
|
|
- Docker network (`platform` network for internal communication)
|
|
|
|
**Independence Level**: Services can be deployed independently but rely on shared configuration and secrets infrastructure.
|
|
|
|
### Application → Platform Communication
|
|
- **Protocol**: HTTP REST APIs
|
|
- **Authentication**: Service API keys
|
|
- **Circuit Breaker**: Application implements circuit breaker pattern for resilience
|
|
- **Fallback**: Application has fallback mechanisms when platform services unavailable
|
|
|
|
### Service Discovery
|
|
- **Docker Networking**: Services communicate via container names
|
|
- **Environment Variables**: Service URLs configured via environment
|
|
- **Health Checks**: Each service exposes `/health` endpoint
|
|
|
|
## Development Workflow
|
|
|
|
### Local Development
|
|
|
|
**Start All Platform Services**:
|
|
```bash
|
|
make start # Starts platform + application services
|
|
```
|
|
|
|
**Platform Service Logs**:
|
|
```bash
|
|
make logs # All service logs
|
|
docker logs mvp-platform-vehicles-api
|
|
docker logs mvp-platform-tenants
|
|
```
|
|
|
|
**Platform Service Shell Access**:
|
|
```bash
|
|
docker exec -it mvp-platform-vehicles-api bash
|
|
docker exec -it mvp-platform-tenants bash
|
|
```
|
|
|
|
### Service-Specific Development
|
|
|
|
**MVP Platform Vehicles Development**:
|
|
```bash
|
|
# Access vehicles service
|
|
cd mvp-platform-services/vehicles
|
|
|
|
# Run ETL manually
|
|
make etl-load-manual
|
|
|
|
# Validate ETL data
|
|
make etl-validate-json
|
|
|
|
# Service shell access
|
|
make etl-shell
|
|
```
|
|
|
|
### Database Management
|
|
|
|
**Platform Service Databases**:
|
|
- **Platform PostgreSQL** (port 5434): Shared platform data
|
|
- **Platform Redis** (port 6381): Shared platform cache
|
|
- **MVP Platform Vehicles DB** (port 5433): Vehicle-specific data
|
|
- **MVP Platform Vehicles Redis** (port 6380): Vehicle-specific cache
|
|
|
|
**Database Access**:
|
|
```bash
|
|
# Platform PostgreSQL
|
|
docker exec -it platform-postgres psql -U postgres
|
|
|
|
# Vehicles Database
|
|
docker exec -it mvp-platform-vehicles-db psql -U postgres
|
|
```
|
|
|
|
## Deployment Strategy
|
|
|
|
### Independent Deployment
|
|
Each platform service can be deployed independently:
|
|
- Own CI/CD pipeline
|
|
- Independent scaling
|
|
- Isolated database and cache
|
|
- Zero-downtime deployments
|
|
|
|
### Service Dependencies
|
|
**Deployment Order**: Platform services have no dependencies on each other
|
|
**Rolling Updates**: Services can be updated independently
|
|
**Rollback**: Each service can rollback independently
|
|
|
|
### Production Considerations
|
|
|
|
**Scaling**:
|
|
- Each service scales independently based on load
|
|
- Database and cache scale with service
|
|
- API containers can be horizontally scaled
|
|
|
|
**Monitoring**:
|
|
- Each service exposes health endpoints
|
|
- Independent logging and metrics
|
|
- Service-specific alerting
|
|
|
|
**Security**:
|
|
- API key authentication between services
|
|
- Network isolation via Docker networking
|
|
- Service-specific security policies
|
|
|
|
## Integration Patterns
|
|
|
|
### Circuit Breaker Pattern
|
|
Application services implement circuit breaker when calling platform services:
|
|
```javascript
|
|
// Example from vehicles feature
|
|
const circuit = new CircuitBreaker(platformVehiclesCall, {
|
|
timeout: 3000,
|
|
errorThresholdPercentage: 50,
|
|
resetTimeout: 30000
|
|
});
|
|
```
|
|
|
|
### Fallback Strategies
|
|
Application features have fallback mechanisms:
|
|
- Cache previous responses
|
|
- Degrade gracefully to external APIs
|
|
- Queue operations for later retry
|
|
|
|
### Data Synchronization
|
|
Platform services are source of truth:
|
|
- Application caches platform data with TTL
|
|
- Application invalidates cache on platform updates
|
|
- Eventual consistency model acceptable
|
|
|
|
## Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
**Service Discovery Problems**:
|
|
- Verify Docker networking: `docker network ls`
|
|
- Check container connectivity: `docker exec -it container ping service`
|
|
|
|
**API Authentication Failures**:
|
|
- Verify `PLATFORM_VEHICLES_API_KEY` environment variable
|
|
- Check API key in service logs
|
|
|
|
**Database Connection Issues**:
|
|
- Verify database containers are healthy
|
|
- Check port mappings and network connectivity
|
|
|
|
### Health Checks
|
|
|
|
**Verify All Platform Services**:
|
|
```bash
|
|
curl http://localhost:8000/health # Platform Vehicles
|
|
curl http://localhost:8000/health # Platform Tenants (same port as vehicles)
|
|
curl https://motovaultpro.com # Platform Landing
|
|
```
|
|
|
|
**Note**: Both platform services (Vehicles and Tenants APIs) run on port 8000. They are differentiated by routing rules in Traefik based on the request path.
|
|
|
|
### Logs and Debugging
|
|
|
|
**Service Logs**:
|
|
```bash
|
|
docker logs mvp-platform-vehicles-api --tail=100 -f
|
|
docker logs mvp-platform-tenants --tail=100 -f
|
|
```
|
|
|
|
**Database Logs**:
|
|
```bash
|
|
docker logs mvp-platform-vehicles-db --tail=100 -f
|
|
docker logs platform-postgres --tail=100 -f
|
|
``` |