À l’époque du cloud-native, faire évoluer une architecture conduit fréquemment à un système massif et hautement interconnecté, où une seule défaillance peut provoquer une indisponibilité globale. L’Architecture Cellulaire (Cellular Architecture) résout ce problème en décomposant le système en domaines indépendants et isolés de défaillance, appelés cellules.
Dans ce tutoriel, vous allez bâtir une architecture hautement résiliente et orientée événements en utilisant le motif cellulaire combiné à un flux asynchrone basé sur :
-
DynamoDB Streams
-
AWS Lambda
-
Amazon SNS
-
Amazon SQS
Au lieu d’opérer avec un seul plan de données monolithique, vous déployerez plusieurs copies identiques de l’infrastructure (cellules). Une couche de routage légère en périphérie examinera les requêtes entrantes et les dirigera vers la cellule appropriée en s’appuyant sur une clé de partition, comme l’identifiant du locataire.
Si un événement problématique (poison pill) ou une dégradation localisée affecte une cellule spécifique, l’impact restera confiné uniquement à cette cellule, garantissant une disponibilité maximale pour les autres locataires du système.
Cette approche crée une barrière d’isolement des pannes stricte pour les systèmes distribués critiques.
2. Pré-requis
Pour mettre en œuvre cette architecture, vous aurez besoin de :
-
Un compte AWS actif avec des permissions administratives.
-
Terraform en version 1.3.0 ou supérieure installée.
-
AWS CLI configuré avec vos identifiants.
-
Des connaissances sur :
-
Plan de contrôle vs Plan de données
-
Conception pilotée par le domaine (DDD)
-
Architectures orientées événements
-
DynamoDB, Lambda, SNS et SQS
-
3. Étapes
Étape 1 : Définir le module cellule du Data Plane
Ce qu’il faut faire
Créez un module réutilisable dans Terraform encapsulant l’intégralité du pipeline orienté événements :
-
DynamoDB
-
SNS
-
SQS
-
Lambdas
Ce module représente une cellule isolée et autonome.
Pourquoi c’est important
Le fondement principal de l’architecture cellulaire est la répétabilité.
En transformant le plan de données en un module, chaque cellule devient une copie identique et déterministe de l’infrastructure.
Cela garantit que :
-
Une file SQS surchargée dans la cellule Alpha n’impacte pas la Beta.
-
Un throttling sur DynamoDB d’une cellule n’affecte pas les autres.
-
L’isolation structurelle demeure intacte.
Exemple Terraform
description = « Identifiant unique de la cellule »
type = string
}
resource « aws_dynamodb_table » « cell_table » {
name = « app-data-cell-${var.cell_id} »
billing_mode = « PAY_PER_REQUEST »
hash_key = « id »
attribute {
name = « id »
type = « S »
}
stream_enabled = true
stream_view_type = « NEW_AND_OLD_IMAGES »
}
resource « aws_sns_topic » « cell_topic » {
name = « processing-topic-cell-${var.cell_id} »
}
resource « aws_sqs_queue » « cell_queue » {
name = « processing-queue-cell-${var.cell_id} »
}
Étape 2 : Déployer des cellules indépendantes
Ce qu’il faut faire
Dans le Terraform principal, déployez plusieurs cellules indépendantes.
Pourquoi cela importe
Ici, vous créez les limites physiques d’isolement.
Exemple :
-
Les clients d’entreprise peuvent posséder des cellules dédiées.
-
Les problèmes de « noisier neighbor » n’existent plus.
-
Vous préparez l’environnement pour une expansion multi-cloud active à l’avenir.
Exemple
module "cell_alpha" {
source = "./modules/event_driven_cell"
cell_id = "alpha"
}
module "cell_beta" {
source = "./modules/event_driven_cell"
cell_id = "beta"
}
module "cell_gamma" {
source = "./modules/event_driven_cell"
cell_id = "gamma"
}Étape 3 : Création du Control Plane
Ce qu’il faut faire
Créez une table globale dans DynamoDB chargée de cartographier :
-
Identifiant du locataire
-
Identifiant de la cellule
Pourquoi cela compte
La couche de routage doit découvrir dynamiquement vers quelle cellule envoyer chaque requête.
Cette cartographie ne peut pas être codée en dur.
Exemple
resource "aws_dynamodb_table" "tenant_routing_map" {
name = "global-tenant-cell-mapping"
billing_mode = "PAY_PER_REQUEST"
hash_key = "tenant_id"
attribute {
name = "tenant_id"
type = "S"
}
}Étape 4 : Mise en place du Cell Router
Ce qu’il faut faire
Créez :
-
Amazon API Gateway
-
Routeur Lambda
Ce Lambda va :
-
Extraire l’identifiant du locataire à partir de la requête
-
Consulter la table globale de routage
-
Découvrir la cellule correcte
-
Insérer les données dans le DynamoDB de cette cellule
Pourquoi cela compte
Le routeur doit être extrêmement fin (thin router).
Il ne doit pas contenir de règles métiers.
Toute la logique doit rester au sein des cellules.
Après le routage initial, le pipeline asynchrone prend le relais :
DynamoDB Streams
→ Lambda producteur
→ SNS
→ SQS
→ Lambda consommateurExemple Terraform
resource "aws_lambda_function" "cell_router" {
function_name = "global-edge-router"
handler = "router.handler"
runtime = "nodejs20.x"
}Problèmes courants
Dépendances entre cellules
L’erreur la plus grave consiste à autoriser le partage des ressources entre cellules.
Exemple incorrect :
-
Une cellule qui interroge directement les données d’une autre
-
Partager une base RDS centralisée
-
Partager des buckets critiques
Cela rompt complètement l’isolement.
Chaque cellule doit posséder ses propres données.
Goulot d’étranglement dans le Control Plane
Si le routeur interroge DynamoDB à chaque requête :
-
La latence augmente
-
DynamoDB subit du throttling
Solution :
-
Mettre en place un cache en mémoire dans le Lambda Router.
Poison Pills et défaillances asynchrones
Si une charge utile invalide casse le Lambda consommateur :
-
Le message restera en circulation dans la file SQS.
L’avantage de l’architecture cellulaire est que cela n’affecte qu’une seule cellule.
La solution adaptée consiste à utiliser :
-
Dead Letter Queue (DLQ)
5. Conclusion
En combinant l’architecture cellulaire avec des systèmes orientés événements, vous créez une plateforme extrêmement résiliente et avec un rayon d’action maîtrisé.
La séparation entre :
-
Plan de contrôle global
-
Plans de données isolés
garantit que les défaillances restent mathématiquement contenues.
Avec des modules Terraform, vous pouvez :
-
Normalisation
-
Évolutivité linéaire
-
Reproductibilité
-
Isolement des pannes
À mesure que l’architecture évolue, vous pouvez intégrer :
-
Amazon Route 53 ARC
-
Stratégies de reprise après sinistre
-
Déplacement automatique des cellules
-
Architectures multi-cloud actives
Le résultat est une infrastructure prête pour des applications distribuées critiques en mission à grande échelle.




