Éditeurs de logiciels SaaS B2B
Architecture de référence : SaaS multi-tenant sur AWS
Cette architecture de référence décrit une solution type que nous mettons en œuvre. Elle ne correspond pas à un client identifié.
Contexte
Cette architecture de référence n'est pas un projet client : c'est le socle que nous utilisons comme point de départ lorsqu'un éditeur nous confie la conception d'un SaaS B2B. Elle est maintenue comme un projet démonstratif et sert de base de discussion sur les choix techniques.
Le cas modélisé est celui d'un logiciel de gestion vendu par abonnement à des entreprises, où chaque entreprise cliente (tenant) dispose de ses propres utilisateurs, données et paramètres, tout en partageant la même infrastructure.
L'objectif est de montrer une manière éprouvée de répondre aux questions que tout éditeur SaaS se pose : comment isoler les données, comment gérer les abonnements, comment déployer sans interruption et comment garder la maîtrise des coûts.
Problème
Un SaaS multi-tenant doit garantir qu'aucun client ne peut voir les données d'un autre, tout en mutualisant les serveurs, la base de données et les déploiements. Les erreurs d'isolation sont les plus graves et les plus difficiles à détecter a posteriori.
Il doit aussi relier la facturation aux droits d'accès (essai, formule, quotas, suspension) et pouvoir être livré plusieurs fois par semaine sans interrompre le service pour l'ensemble des clients.
Contraintes
- Isolation stricte des données entre tenants, vérifiable par des tests automatisés.
- Une seule base de code et une seule infrastructure pour tous les clients, afin de limiter les coûts d'exploitation.
- Déploiements sans interruption de service et retour arrière simple.
- Infrastructure entièrement décrite en code et reproductible dans plusieurs environnements.
- Abstraction du prestataire de facturation pour ne pas coupler le domaine métier à Stripe.
Architecture
Le front est une application Next.js servie derrière un CDN, avec rendu côté serveur pour les pages publiques et application React pour l'espace client.
L'API est développée en Java avec Spring Boot ; chaque requête porte l'identifiant du tenant extrait du jeton d'authentification, propagé jusqu'à la couche de données.
PostgreSQL sur Amazon RDS héberge toutes les données dans une base partagée ; la sécurité au niveau des lignes (row-level security) applique un filtre par tenant directement dans la base, en plus des vérifications applicatives.
Redis sert de cache, de stockage de sessions et de file pour les tâches asynchrones (envoi de courriels, exports, webhooks).
Les conteneurs Docker de l'API et du front sont déployés sur Amazon ECS ; l'ensemble (réseau, ECS, RDS, Redis, secrets, journaux) est décrit en Terraform.
GitHub Actions construit les images, exécute les tests (y compris les tests d'isolation entre tenants), applique les migrations et déploie en blue/green.
Solution
L'identifiant de tenant est la colonne vertébrale de l'architecture. Il est fixé à l'authentification, transmis dans le contexte de chaque requête et positionné comme variable de session PostgreSQL ; les politiques de sécurité au niveau des lignes refusent toute lecture ou écriture qui ne correspond pas. Une requête qui oublierait le filtre côté application ne renvoie donc rien, plutôt que les données d'un autre client.
La facturation est modélisée dans le domaine métier (formules, abonnements, périodes d'essai, quotas) et un adaptateur traduit ces notions vers Stripe. Les webhooks de paiement sont traités de manière idempotente et mettent à jour les droits d'accès du tenant ; changer de prestataire revient à écrire un autre adaptateur.
Les migrations de base de données sont écrites pour rester compatibles avec la version précédente de l'API, ce qui permet un déploiement blue/green : la nouvelle version est démarrée à côté de l'ancienne, vérifiée, puis reçoit le trafic. Le retour arrière consiste à rebasculer le trafic.
L'observabilité est intégrée dès le départ : journaux structurés portant l'identifiant du tenant, métriques par tenant, traces distribuées et alertes sur les erreurs et la latence. Les coûts AWS sont étiquetés par composant pour être suivis.
Résultat
- L'isolation des données est garantie par la base et par l'application, et vérifiée par une suite de tests automatisés qui tente délibérément d'accéder aux données d'un autre tenant.
- Les déploiements deviennent reproductibles : chaque environnement est créé à partir du même code Terraform et chaque version passe par le même pipeline.
- Les mises en production se font sans interruption grâce au déploiement blue/green et aux migrations rétrocompatibles.
- Les règles de facturation vivent dans le code métier et sont testées indépendamment du prestataire de paiement.
- Les journaux et métriques par tenant permettent de diagnostiquer un problème signalé par un client sans fouiller l'ensemble du trafic.
Améliorations obtenues
- Proposer un mode base dédiée pour les clients exigeant une isolation physique, en conservant la même base de code.
- Ajouter le SSO SAML/OpenID Connect par tenant pour les grands comptes.
- Mettre en place des déploiements progressifs par tenant (canary) en complément du blue/green.
- Automatiser les tests de charge dans le pipeline pour détecter les régressions de performance.
- Ajouter l'export des données d'un tenant et sa suppression complète pour répondre aux demandes RGPD et aux résiliations.
Captures d'écran
Les captures d'écran seront ajoutées lorsque le projet sera publié.
Services associés
Plateforme SaaS
Plateformes SaaS multi-tenant avec abonnements, facturation et infrastructure prête à monter en charge.
Voir ce serviceJava Spring Boot
Applications d'entreprise, microservices et API robustes avec Java et Spring Boot.
Voir ce serviceServices AWS
Conception, déploiement et optimisation de votre infrastructure AWS : calcul, données, stockage, coûts.
Voir ce servicePipelines CI/CD
Pipelines GitHub Actions ou GitLab CI : tests, construction, déploiements automatisés et rollbacks.
Voir ce serviceExpertise PostgreSQL
Conception de schéma, optimisation, réplication, montées de version et migration vers PostgreSQL.
Voir ce serviceParlez-nous de votre projet
Décrivez votre besoin en quelques lignes : nous revenons vers vous avec une première analyse et les prochaines étapes.