Architecture multitenant pour SaaS ERP/CRM avec assistant IA : comment la concevoir
13/05/2026
architecture multitenant pour SaaS ERP/CRM avec assistant IA : guide technique
Dans cet article technique destiné aux CTO, lead devs et architectes, nous expliquons comment concevoir une architecture multitenant pour un SaaS ERP/CRM qui intègre un assistant IA (RAG / moteur de dialogue / agents). Vous trouverez les modèles de données, les options d'isolation, exemples concrets (Postgres RLS, routage de tenant, vector DB), règles de sécurité et contraintes coûts/ops pour déployer à l'échelle.
Pourquoi c'est critique pour un ERP/CRM avec assistant IA
Un ERP/CRM manipule des données sensibles et volumineuses. Ajouter un assistant IA implique indexation de documents, vecteurs et logs de conversation. La mauvaise conception multitenant entraîne fuite de données, coûts non maîtrisés (vector DB, embeddings), migrations compliquées et limits de performance. L'objectif : isoler correctement les données, garder la scalabilité et maîtriser les coûts.
Choix d'isolation des données : 3 patterns et leurs conséquences
-
Séparation totale (une base / cluster / index par tenant)
Avantages : isolation maximale, sauvegarde/restauration par tenant, conformité simple. Inconvénients : coût élevé, overhead ops (création/destroy), complexité CI/CD.
-
Schéma par tenant (Postgres schema)
Avantages : isolation logique, moins de clusters, plus facile pour backups par schéma. Inconvénients : limites du SGBD selon le nombre de schémas, complexité des migrations.
-
Schéma partagé avec colonne tenant_id + row-level security (RLS)
Avantages : meilleur usage ressource, simple à scaler, migrations centralisées. Inconvénients : risque d’erreur d'implémentation côté application, attention aux requêtes non filtrées.
Recommandation pragmatique
Pour un ERP/CRM ciblant PME/startups : commencer avec le modèle schéma partagé + tenant_id + RLS. Passer à schémas séparés ou clusters dédiés pour top clients (entreprise) ou si contraintes réglementaires l’exigent. Pour l'index de vecteurs (RAG), privilégier un modèle hybride : index partagé avec namespace par tenant, ou index séparé pour clients top-tier.
Exemple concret : Postgres + RLS (snippet)
Exemple minimal pour forcer l'isolation via RLS. Adaptez selon votre ORM / framework.
-- création de la table
CREATE TABLE invoices (
id uuid PRIMARY KEY,
tenant_id uuid NOT NULL,
amount numeric,
data jsonb
);
-- activer RLS
ALTER TABLE invoices ENABLE ROW LEVEL SECURITY;
-- politique par défaut
CREATE POLICY tenant_isolation ON invoices
USING (tenant_id = current_setting('app.current_tenant')::uuid);
-- côté application (au début de chaque connexion)
-- SET LOCAL app.current_tenant = '...';
Avec cette approche, toute requête sans override héritera de la contrainte. Attention : vérifiez les mises à jour massives, les BACKUP/restore et les jobs batch (ils doivent s'exécuter avec un rôle système ou en définissant explicitement le tenant).
Routage des requêtes et résolution du tenant
- Résolution par domaine (tenant1.example.com) → idéal pour isolation auth et cookies.
- Résolution par header / JWT (claim tenant_id) → utile pour APIs et agents IA.
- Résolution par path (/t/{tenant}/...) → simple mais moins propre pour cookies/SSO.
Implémentez un middleware central qui : valide le JWT/SSO, résout le tenant, injecte le contexte (tenant_id) et impose les limites (rate limiting, quotas). Exemple technique : middleware Express / NestJS qui set la variable de session DB avant chaque transaction.
Indexation pour RAG et vector DB : stratégie multitenant
Options :
- Index partagé + namespace par tenant : bonne densité d'utilisation et coûts contrôlés. Assurez-vous de taguer chaque vecteur par tenant_id et d'appliquer ACL au niveau recherche.
- Index séparé par tenant : parfait pour top clients ou exigences légales. Coût linéaire en index.
Bonnes pratiques :
- Chunking des documents cohérent (taille de chunk adaptée au modèle d'embeddings).
- Chiffrement des embeddings si PII sensible (chiffrement côté application avant stockage).
- Expiration / TTL pour logs et vecteurs temporaires (conserver ce qui est nécessaire uniquement).
Sécurité et conformité
- Chiffrement en transit et au repos (TLS + chiffrement disque). Pour des recommandations officielles, suivez la documentation de votre fournisseur de cloud.
- Audit et contrôle d'accès : logs d'accès, redaction des prompts, masquage PII avant envoi à un LLM externe.
- Consentement et retention : politiques claires pour la conservation des conversations et données métier.
- Test d'injection prompt et validation des sorties du modèle avant exécution d'actions critiques (ex : modification de commandes).
Scalabilité opérationnelle
Points concrets :
- Mesurez latence des requêtes IA en p50/p95/p99 et ciblez des SLO (ex. p95 < 300 ms pour embeddings; p99 dépend du fournisseur). Ajustez la parallélisation des embeddings et le batching.
- Autoscaling pour compute inference + workers d'indexation. Exemple : Kubernetes HPA pour workers d'ingestion, with limits pour éviter spikes de coût.
- Migrations de schéma : utilisez des scripts idempotents et tests preview sur clones de production. Pour schémas partagés, testez des migrations sur gros volumes avant roll-out.
Coûts & dimensionnement (pragmatique)
Facteurs qui impactent le coût : nombre de tenants, taille des index vectoriels, fréquence des embeddings, stockage des logs, taux de requêtes en temps réel. Pour maîtriser les coûts :
- Batcher les embeddings pour réduire appels API externes.
- Compresser / dédupliquer les documents avant indexation.
- Offrir des plans différenciés : plan de base avec index partagé, plan enterprise avec index dédié.
Observabilité et monitoring
Instrumentez :
- Tracing distribué (ex : OpenTelemetry) pour suivre la chaîne requête → embedding → recherche → LLM.
- Métriques par tenant (erreurs, latence, coûts) et alerting pour dépassement quotas.
- Dashboards pour consommation d'API IA et coût par tenant.
Erreurs fréquentes et tips
- Oublier d'appliquer tenant_id dans les requêtes batch : risque de fuite. Tip : blocker les migrations qui contiennent requêtes sans WHERE tenant_id pendant code review.
- Envoyer PII non filtré à un fournisseur LLM : mettez en place un proxy qui redige / anonymise.
- Indexer documents non nettoyés → vecteurs bruyants. Tip : normalisez et déduplique avant indexation.
- Ne pas prévoir stratégie de purge des vecteurs : coût et latence augmentent. Mettez en place TTLs et policies par plan.
Cas d'architecture proposée (schéma simplifié)
- API Gateway (routage tenant) → Services backend (stateless) → Postgres (shared schema + RLS) → Vector DB (namespaced) → LLM provider / local inference.
- Workers d'ingestion en background pour transformer documents → embeddings → index.
- Monitoring + billing service pour calcul du coût IA par tenant.
Exemples techniques & outils utiles
- Postgres RLS pour isolation logique.
- Vector DBs (utiliser namespace/collections pour tenants).
- Kubernetes pour scalabilité des workers et du service IA.
- Instrumenter avec OpenTelemetry et exporter vers Prometheus/Grafana.
Conclusion et checklist de mise en œuvre
Checklist rapide avant production :
- Choix d'isolation validé (shared vs schema vs dedicated) et plan de migration.
- RLS ou équivalent implémenté et testé.
- Routage tenant sécurisé (SSO, JWT) et middleware central.
- Stratégie RAG définie : namespace vs index dédié + chiffrement PII.
- Monitoring, alerting et facturation par tenant en place.
- Plan de scaling et budgets IA alignés avec offres commerciales.
Pour aller plus loin, si vous développez votre SaaS avec Node.js ou Next.js, nos guides techniques et services peuvent aider à implémenter tout le pipeline avec bonnes pratiques : nodejs, nextjs. Pour l'architecture SaaS complète et les offres IA, consultez nos pages services SaaS et intelligence artificielle.
Si vous souhaitez qu’on revoie votre architecture multitenant et un plan de migration concret, contactez-nous pour une première évaluation.

