Architecture
Huit services Axum indépendants, un réseau unifié via NATS, un schéma Postgres dédié par projet. Comprenez comment Aurabase route une requête de bout en bout, pourquoi chaque projet est physiquement isolé, et comment scaler horizontalement sans coordination.
Aurabase est un monorepo Rust organisé en 8 binaires Axum indépendants. Chacun écoute sur son propre port, expose ses routes HTTP /v1/<service>/…, et communique avec les autres via NATS request/reply.
Un service peut redémarrer, crash ou être déployé indépendamment. Le gateway observe la santé de chacun via un circuit breaker — après 5 échecs consécutifs sur un service, il ouvre le disjoncteur et répond 503 pendant 30 secondes, laissant le service récupérer.
aurabase/aurabase sur GitHub, chaque crate dans services/aura-*.Chaque service a une responsabilité unique, un binaire séparé, des migrations SQL propres et un port par défaut. En production cloud, les ports internes sont masqués derrière le gateway.
aura-core (types communs, erreurs, JWT claims), aura-crypto (bcrypt, Argon2, tokens), aura-db-adapters (trait unifié Postgres/MongoDB).Chaque projet Aurabase reçoit quatre sous-schémas Postgres isolés. L'isolation est physique : aucune requête ne peut traverser les frontières sans consentement explicite. Le gateway injecte le search_path de connexion à partir du JWT du client.
Trois garanties
- Séparation physique — pas de voisin bruyant, pas de fuite cross-tenant, pas de pool partagé.
- Migrations indépendantes — chaque projet évolue à son rythme ; un rollback n'affecte que lui.
- Export trivial —
pg_dump --schema=project_*rend toute votre base, extensions et policies incluses.
aura_console est partagé. Il contient la table projectset les sessions Studio globales. Aucune donnée applicative n'y transite.Le gateway valide chaque requête entrante avant de la router. Voici le chemin complet d'un GET /v1/db/{projectId}/rows?table=devices depuis un client REST.
tracing + EnvFilter. Les logs JSON sont corrélés par request_id et peuvent être exportés vers Datadog, Honeycomb ou votre SIEM via webhook.Les services sont sans état. Ajouter un réplica signifie démarrer un nouveau binaire et le connecter à NATS — il se rejoint le cluster automatiquement et commence à servir dès qu'il est prêt. Aucun leader, aucune élection, aucune coordination distribuée.