Orovai is built as a collection of independent, stateless microservices behind a centralized API gateway. This page explains how the pieces fit together.
Client → HTTPS/TLS → NGINX → API Gateway → Service → Response
Every API request follows the same path:
X-API-Key header/v1/* to the API gatewayEach microservice is a standalone Spring Boot application that handles exactly one concern. Services have no shared state between instances — all persistence goes to PostgreSQL, all caching goes to Redis. This means any service can be restarted, scaled, or replaced without affecting others.
| Property | Detail |
|---|---|
| Framework | Spring Boot 3.4 (Java 21) |
| Database | PostgreSQL 16 (per-service databases, no shared schemas between services) |
| Cache / Rate Limiting | Redis 7 with Lua scripts for atomic counter operations |
| Reverse Proxy | NGINX with TLS termination and mkcert certificates |
| API Gateway | Custom Spring Boot gateway with JWT auth, key validation, rate limiting, usage tracking |
The gateway is the single entry point for all API traffic. It handles:
/v1/dns/check) to internal service endpoints (dns-checker:8095/api/v1/dns/check).status, data, meta) and rate limit headers.Services support blue-green deployment for zero-downtime updates:
Every service exposes /actuator/health (or /management/health for JHipster services). The deployment pipeline checks health before switching traffic. External monitoring can poll these endpoints for uptime tracking.
Each service that requires persistence has its own PostgreSQL database. No service can read or write another service's data. This prevents cascading failures and simplifies schema evolution.
Related: Security • Rate Limits • Authentication • Integration Patterns