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.
Un backend, huit services, un réseau
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-*.Responsabilités et ports
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).Un projet, quatre schémas cloisonnés
Chaque projet Aurabase reçoit quatre sous-schémas Postgres. Le cloisonnement est logique, appliqué par PostgreSQL lui-même : chaque projet possède son propre rôle de connexion, membre de ses seuls rôles, et les droits sur ses schémas ne sont accordés qu'à ceux-là — jamais à PUBLIC. Le gateway injecte le search_path de connexion à partir du JWT du client, et les tables applicatives sont protégées par RLS.
Sur les offres pro et enterprise, chaque projet dispose en plus de sa propre instance PostgreSQL : le cloisonnement y est alors assuré par la séparation des instances, pas seulement par les permissions.
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 projects et les sessions Studio globales. Aucune donnée applicative n'y transite.De curl à Postgres, en sept étapes
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.Ajouter de la capacité, pas de la coordination
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.