Read in English · Leer en español · Auf Deutsch lesen
Section 4.3 sur 4.8 · Intermédiaire · 20 min de lecture
Le modèle C4 : contexte, conteneurs, composants et code
Leçon vidéo
5 min · narré en anglais, avec sous-titresÉcouter seulement (audio)
Lire la transcription
Demandez à une équipe de dessiner son architecture, et vous obtiendrez souvent des formes inexpliquées, des lignes sans libellé et des niveaux de détail mélangés. Dans cette leçon, vous découvrirez la réponse de Simon Brown : le modèle C4.
Pensez à une carte en ligne. En vue éloignée, vous voyez un pays entier et les autoroutes entre les villes. Zoomez, et vous voyez les quartiers d’une ville, puis les rues d’un quartier, puis un seul bâtiment. Chaque niveau de zoom est utile à des personnes différentes. Et vous savez toujours quel niveau vous regardez. C4 fait de même pour le logiciel. Ce n’est pas une nouvelle notation, mais un petit ensemble d’abstractions et une hiérarchie de diagrammes.
Le niveau un, le diagramme de contexte système, montre votre système sous forme d’une seule boîte, avec les personnes qui l’utilisent et les autres systèmes logiciels auxquels il est connecté. Il s’adresse à tout le monde, technique ou non. Le niveau deux, le diagramme de conteneurs, montre les applications et les stockages de données à l’intérieur du système. C4 recommande ces deux premiers niveaux pour toutes les équipes. Le niveau trois, le diagramme de composants, zoome sur un conteneur. Ne le dessinez que là où il apporte de la valeur, pour les parties complexes ou risquées. Le niveau quatre montre le code lui-même. Il vaut rarement la peine d’être dessiné à la main, car la plupart des outils peuvent le générer à la demande.
Le mot conteneur demande de la prudence. Dans C4, un conteneur est une unité exécutable ou déployable séparément qui exécute du code ou stocke des données : une application web, une application mobile, un service, un schéma de base de données ou un topic de messages. Ce n’est pas la même chose qu’un conteneur Docker. Une application mobile sur un téléphone est un conteneur C4, et pourtant elle ne tourne pas dans Docker. Le nombre de copies d’un conteneur en cours d’exécution, et leur emplacement, relèvent d’un diagramme de déploiement.
Voici le niveau un pour la plateforme de livraison de repas. Les clients, le personnel des restaurants et les livreurs ont chacun une flèche avec un libellé qui dit ce qu’ils font avec la plateforme, représentée par une seule boîte. En dessous figurent les systèmes externes dont elle dépend : un prestataire de paiement, un service de cartographie et des services de notifications push. Voir d’emblée que ces services sont achetés à l’extérieur est architecturalement significatif.
Zoomons maintenant sur le niveau deux. Pour la plupart des équipes, ce diagramme de conteneurs est le diagramme le plus précieux dont elles disposent. En haut, chaque type d’utilisateur a une app, et chaque app indique sa technologie. Chaque app appelle l’interface de programmation d’application de la plateforme, ou API, par l’intermédiaire d’une API gateway, qui authentifie les utilisateurs et route les requêtes. Remarquez le protocole sur chaque flèche. Le service des commandes passe les commandes et encaisse le paiement. Il lit et écrit dans la base des commandes. Il publie aussi des événements de commande dans un topic Kafka, dessiné comme un conteneur à part entière. Les services d’affectation et de notifications consomment depuis ce topic. Ces flèches sont en pointillés parce qu’elles sont asynchrones, et la légende le précise. En dehors de la frontière se trouvent les trois systèmes externes, et en bas, la légende. Le nombre de copies de chaque service en cours d’exécution est laissé à un diagramme de déploiement.
C4 n’impose ni formes ni couleurs, mais il impose ce que chaque diagramme doit dire. Chacun a besoin d’un titre indiquant son type et sa portée, et d’une légende qui explique chaque forme et chaque style de ligne. Chaque élément a un nom, un type, une description d’une phrase et, pour les conteneurs et les composants, sa technologie. Chaque relation est une seule flèche, dans un seul sens, avec un libellé qui dit ce qu’elle fait. Jamais simplement « utilise ». Entre conteneurs, ajoutez le protocole, et indiquez si la relation est synchrone ou asynchrone. Restez à un seul niveau d’abstraction : pas de classes sur un diagramme de conteneurs. Et n’utilisez la couleur qu’en complément, car les diagrammes sont imprimés en noir et blanc et lus par des personnes daltoniennes.
Appliquons ces règles. Une équipe partage un diagramme de tableau blanc : cinq boîtes, dont App, Backend et BD, des lignes sans pointe de flèche, une boîte verte, et ni titre ni légende. D’abord, décidez de ce que c’est. Il mélange une app, un service et une base de données : c’est donc un diagramme de conteneurs, et il reçoit un titre qui le dit. Chaque boîte reçoit un nom, un type et une technologie. App devient l’app client, et BD devient la base des commandes. Chaque ligne simple devient une seule flèche avec un libellé et un protocole. L’équipe découvre qu’une ligne signifiait deux choses différentes, un appel dans un sens et un webhook dans l’autre, et elle devient donc deux flèches. Le fait de libeller les flèches révèle aussi un topic Kafka que personne n’avait dessiné. Et la boîte verte s’avère signifier « détenu par notre équipe », ce qui va dans la légende. Le résultat contient davantage d’éléments, mais demande moins d’explications, car il répond à toutes les questions qu’un lecteur se poserait. L’essentiel de la valeur est venu du libellé des flèches.
La section complète ajoute le diagramme de composants, les diagrammes complémentaires et les outils de modélisation. Ensuite, dans la section quatre point quatre, nous verrons les parties du langage de modélisation unifié, ou UML, que les architectes utilisent encore. À très vite.
Ce qu’il faut savoir
- Le modèle C4, créé par Simon Brown, décrit le logiciel au moyen d’une hiérarchie de quatre diagrammes (contexte système, conteneurs, composants et code) reposant sur les abstractions personne, système logiciel, conteneur et composant.
- Un conteneur C4 est une unité exécutable ou déployable séparément qui exécute du code ou stocke des données, comme une application web, une application mobile, un service, un schéma de base de données ou un topic de messages ; ce n’est pas la même chose qu’un conteneur Docker.
- Les diagrammes de contexte système et de conteneurs sont recommandés pour toutes les équipes ; les diagrammes de composants seulement là où ils apportent de la valeur, et les diagrammes de code rarement, de préférence générés à partir du code.
- Les diagrammes complémentaires sont le paysage système (tous les systèmes d’une organisation), le diagramme dynamique (la collaboration à l’exécution pour un scénario) et le diagramme de déploiement (les conteneurs placés sur l’infrastructure, un par environnement).
- Chaque diagramme a besoin d’un titre indiquant son type et sa portée, et d’une légende ; chaque élément, d’un nom, d’un type, d’une description et (pour les conteneurs et les composants) d’une technologie ; chaque relation, d’un sens unique, d’un libellé précis et, entre conteneurs, d’un protocole.
- Les outils de modélisation comme Structurizr génèrent de nombreux diagrammes cohérents à partir d’un seul modèle, tandis que les outils de dessin produisent des images indépendantes qui divergent peu à peu.
Des cartes de votre code
Le modèle C4 est une approche de la représentation de l’architecture logicielle en diagrammes, créée par Simon Brown. Il est issu des formations en architecture logicielle qu’il donnait depuis 2006 environ : selon le site du C4, ses origines remontent à une période située entre 2006 et 2009, les types de diagrammes ont été nommés début 2010 et le nom « C4 » a été employé pour la première fois début 2011. Brown avait remarqué que les équipes à qui l’on demandait de dessiner leur architecture produisaient des diagrammes difficiles à comprendre : des formes et des couleurs inexpliquées, des boîtes qui pouvaient représenter n’importe quoi, d’une classe à un centre de données, des lignes sans libellé et plusieurs niveaux de détail mélangés sur une même page. UML, qui aurait pu résoudre le problème, était en grande partie sorti de l’usage quotidien.
Sa réponse n’a pas été une nouvelle notation, mais un petit ensemble d’abstractions et une hiérarchie de diagrammes construite sur elles, qu’il compare aux niveaux de zoom d’une carte en ligne. Vous commencez par le pays entier, zoomez sur une ville, puis sur un quartier, puis sur une rue. Chaque niveau montre une quantité de détail différente dans un but différent, et vous savez toujours quel niveau vous regardez. C4 est délibérément indépendant de toute notation et de tout outil : vous pouvez le dessiner sur un tableau blanc, dans un outil de dessin ou avec un outil de modélisation, à condition de suivre quelques règles.
C4 est devenu l’une des approches les plus répandues pour les diagrammes d’architecture, parce qu’il est facile à apprendre, qu’il s’accorde naturellement avec la réflexion à plusieurs vues de la section 4.2 et qu’il produit des diagrammes que les développeurs comme les lecteurs non techniques peuvent suivre. Dans les termes de 42010, chaque type de diagramme C4 est un point de vue doté de son propre type de modèle ; C4 se contente de garder cet ensemble restreint.
Les abstractions : personnes, systèmes logiciels, conteneurs, composants
C4 repose sur quatre abstractions, plus le code. Une personne est un utilisateur humain du système : un client, un livreur, un agent du support. Un système logiciel est le niveau d’abstraction le plus élevé, quelque chose qui apporte de la valeur à ses utilisateurs et qui est généralement détenu et construit par une seule équipe ou organisation ; la plateforme de livraison de repas en est un, tout comme le prestataire de paiement et le service de cartographie dont elle dépend.
Un conteneur est quelque chose qui doit être en cours d’exécution pour que le système fonctionne : selon les mots de Brown, il s’agit essentiellement d’une frontière d’exécution autour d’un code qui est exécuté ou de données qui sont stockées. Par exemple : une application web côté serveur, une application monopage qui s’exécute dans un navigateur, une application mobile, une application de bureau, une fonction serverless, un schéma de base de données, un stockage de fichiers ou un topic de messages. Chacun est déployable ou exécutable séparément, et les conteneurs communiquent entre eux au-delà des frontières de processus, généralement par un réseau.
Un composant est un regroupement de fonctionnalités liées derrière une interface bien définie, qui vit à l’intérieur d’un conteneur et s’exécute dans le même processus que les autres composants de ce conteneur. Dans un service Java, ce peut être un ensemble de classes derrière une interface ; dans un service Node.js, un module. Les composants ne sont pas déployables séparément ; le conteneur est l’unité de déploiement. Enfin, le code désigne les classes, les fonctions et les tables qui implémentent un composant.
Les quatre diagrammes principaux
| Niveau | Portée | Montre | Public principal | Recommandé ? |
|---|---|---|---|---|
| 1. Contexte système | Un système logiciel | Le système sous forme d’une seule boîte, les personnes qui l’utilisent et les autres systèmes logiciels avec lesquels il interagit | Tout le monde, technique ou non, au sein de l’équipe comme à l’extérieur | Oui, pour toutes les équipes |
| 2. Conteneurs | Un système logiciel | Les conteneurs (applications, services, stockages de données, topics) qu’il contient, leurs responsabilités, leurs technologies et leur façon de communiquer | Architectes, développeurs, équipes d’exploitation et de support | Oui, pour toutes les équipes |
| 3. Composants | Un conteneur | Les composants qu’il contient, leurs responsabilités et technologies, et leurs relations | Architectes et développeurs | Seulement là où il apporte de la valeur ; le générer s’il doit être conservé longtemps |
| 4. Code | Un composant | Classes, interfaces, fonctions ou tables, généralement sous forme de diagramme de classes UML ou de diagramme entité-association | Développeurs | Rarement ; le générer à la demande à partir du code pour les parties les plus complexes |
Niveau 1 : le diagramme de contexte système
Le diagramme de contexte système est le point de départ. Il place le système que vous décrivez au centre, sous forme d’une seule boîte, et l’entoure des personnes qui l’utilisent et des systèmes logiciels dont il dépend ou qui dépendent de lui. Il masque délibérément tout détail interne, y compris les technologies, les protocoles et les services internes. Il répond aux questions que posent en premier tout nouvel arrivant, tout chef de produit et toute personne chargée de la revue de sécurité : qu’est-ce que ce système, qui l’utilise et à quoi est-il connecté ?
Parce qu’il masque l’intérieur, le diagramme de contexte est aussi le bon diagramme pour les discussions avec les parties prenantes non techniques et pour délimiter le périmètre : où s’arrête notre responsabilité ? Dans l’exemple de livraison de repas ci-dessous, il montre immédiatement que le paiement par carte, le calcul d’itinéraires et l’envoi des notifications push sont achetés à l’extérieur, ce qui est architecturalement significatif (chacun est une dépendance externe, avec sa propre disponibilité, son propre coût et son propre contrat) et invisible dans la plupart des vues au niveau du code.
Plateforme de livraison de repas : contexte système
Niveau 2 : le diagramme de conteneurs
Le diagramme de conteneurs zoome sur la boîte du système et montre les conteneurs qu’elle contient : les applications et les stockages de données qui composent le système, la responsabilité de chacun, la technologie que chacun utilise et la façon dont ils communiquent. Pour la plupart des équipes, c’est le diagramme le plus précieux dont elles disposent. Il montre les grandes décisions structurelles (combien d’unités déployables, lesquelles communiquent de façon synchrone et lesquelles par messagerie, lesquelles possèdent des données) et il est suffisamment concret pour les développeurs et les équipes d’exploitation, tout en tenant sur une seule page.
Remarquez deux choix dans le diagramme ci-dessous. Le topic de messages des événements de commande est dessiné comme un conteneur à part entière, car c’est un stockage dans lequel les producteurs écrivent et que les consommateurs lisent ; les recommandations C4 proposent ce style explicite ou, à défaut, d’omettre le topic et d’écrire « via le topic des événements de commande » sur les flèches. Le dessiner montre clairement le couplage qui passe par le topic. Par ailleurs, les relations asynchrones utilisent une ligne en pointillés, que la légende explique. Le diagramme de conteneurs ne dit rien du nombre de copies de chaque service en cours d’exécution, de leur région ni de l’équilibreur de charge derrière lequel elles se trouvent ; cela relève d’un diagramme de déploiement.
Plateforme de livraison de repas : conteneurs
Niveau 3 : le diagramme de composants
Le diagramme de composants zoome sur un conteneur et montre les composants qu’il contient. Il s’adresse aux architectes et aux développeurs qui travaillent sur ce conteneur, et c’est là que la structure interne d’un service devient visible : quelle partie traite les requêtes entrantes, où vivent les règles métier, quelle partie communique avec la base de données, comment les événements sortent du service.
Les recommandations C4 consistent à ne dessiner des diagrammes de composants que là où ils apportent de la valeur, généralement pour les conteneurs complexes, risqués ou modifiés par de nombreuses personnes, et à les générer automatiquement s’ils doivent être conservés longtemps, car la structure des composants change aussi souvent que le code. Pour la plateforme de livraison de repas, le service des commandes remplit ces conditions : il manipule de l’argent, communique avec un prestataire externe et doit publier des événements de façon fiable. Le diagramme ci-dessous montre une structure typique, y compris un composant outbox qui écrit les événements dans la base de données au sein de la même transaction que la commande, puis les relaie vers Kafka (le patron outbox est traité au chapitre 6).
Service des commandes : composants
Niveau 4 : le code, et les diagrammes complémentaires
Le niveau du code zoome sur un composant et montre ses classes, ses interfaces ou ses tables, généralement sous forme de diagramme de classes UML ou de diagramme entité-association. Les recommandations C4 le considèrent comme facultatif et comme ne valant généralement pas la peine d’être dessiné à la main : la plupart des environnements de développement peuvent le générer à la demande, et une copie dessinée à la main est périmée dès que quelqu’un refactorise. Ne le dessinez que pour les parties les plus importantes ou les plus complexes, comme un modèle de domaine au cœur du métier (la section 4.4 montre un tel diagramme de classes).
Trois diagrammes complémentaires comblent les lacunes laissées par la hiérarchie. Un diagramme de paysage système est un diagramme de contexte sans système unique au centre : il montre tous les systèmes logiciels et toutes les personnes d’une organisation ou d’un domaine, ce qui est utile aux architectes d’entreprise et de plateforme. Un diagramme dynamique montre comment les éléments collaborent à l’exécution pour un scénario, sous forme d’interactions numérotées sur un diagramme de conteneurs ou de composants (ou sous forme de diagramme de séquence UML) ; c’est l’équivalent C4 des scénarios du modèle 4+1. Un diagramme de déploiement montre comment les conteneurs sont placés sur l’infrastructure dans un environnement : des nœuds de déploiement comme des régions cloud, des clusters Kubernetes, des machines virtuelles, des services de base de données managés et des appareils, avec le nombre d’instances. C4 recommande un diagramme de déploiement par environnement important, généralement la production et éventuellement le staging.
Des règles de notation qui rendent les diagrammes lisibles
C4 n’impose ni formes ni couleurs, mais il impose ce que chaque diagramme doit dire. Ces règles, condensées à partir des recommandations de notation C4, sont ce qui rend les diagrammes ci-dessus lisibles sans réunion pour les expliquer.
Liste de contrôle : un diagramme C4 qui s’explique de lui-même
- Un titre indiquant le type et la portéePar exemple « Diagramme de conteneurs de la plateforme de livraison de repas », pour que les lecteurs sachent tout de suite à quel niveau de zoom ils se trouvent.
- Une légendeExpliquez chaque forme, couleur, style de bordure, style de ligne et pointe de flèche utilisés, même si la notation semble évidente. Les lecteurs d’autres équipes ne partagent pas vos conventions.
- Chaque élément a un nom, un type et une descriptionLe type entre crochets (Personne, Système logiciel, Conteneur, Composant) lève toute ambiguïté ; une courte phrase de responsabilité dit à quoi sert l’élément.
- Une technologie sur chaque conteneur et chaque composant« Conteneur : Java », « Conteneur : PostgreSQL ». Les choix technologiques font partie de l’architecture, et les lecteurs en ont besoin.
- Chaque relation va dans un seul sens et porte un libelléUtilisez une flèche par relation, avec un libellé qui dit ce qu’elle fait dans le sens de la flèche (« Publie les événements de commande dans »), jamais simplement « utilise » ni une flèche à double pointe.
- Des protocoles sur les relations entre conteneursJSON/HTTPS, SQL/TCP, Kafka. Le caractère synchrone ou asynchrone est l’une des informations les plus importantes du diagramme.
- Des acronymes expliquésÉcrivez-les en toutes lettres ou définissez-les dans la légende ou le glossaire.
- Un seul niveau d’abstraction par diagrammePas de classes sur un diagramme de conteneurs, pas de serveurs sur un diagramme de composants.
- La couleur en complément, pas comme seul signalLes diagrammes sont imprimés en noir et blanc et lus par des personnes daltoniennes ; utilisez aussi le style de ligne et les libellés, et gardez le même sens aux couleurs d’un diagramme à l’autre.
Exemple commenté
Exemple commenté : améliorer un diagramme d’équipe typique
Une équipe de l’entreprise de livraison de repas partage cette description du diagramme dessiné sur son tableau blanc : cinq boîtes libellées « App », « Backend », « Commandes », « BD » et « Stripe » ; des lignes entre elles sans pointe de flèche ; la boîte Commandes est verte et les autres sont bleues ; il n’y a ni titre ni légende. Appliquons les règles C4 pas à pas :
| Titre et niveau | Décidez ce qu’est le diagramme. Il mélange une application mobile, un service et une base de données : c’est donc un diagramme de conteneurs. Donnez-lui le titre « Diagramme de conteneurs de la plateforme de livraison de repas ». |
|---|---|
| Nom, type, description | « App » devient « App client [Conteneur : Kotlin, Swift] App iOS et Android pour commander des repas ». « Backend » s’avère être l’API gateway (passerelle d’API) ; « BD » devient « Base des commandes [Conteneur : PostgreSQL] ». |
| Systèmes externes | « Stripe » est un nom de produit qui désigne un système externe. Représentez-le sous la forme « Prestataire de paiement [Système logiciel] » en dehors de la frontière du système, en nommant le fournisseur dans la description si cela compte pour les lecteurs. |
| Relations | Remplacez chaque ligne simple par une seule flèche avec un libellé : « Appelle [JSON/HTTPS] », « Lit et écrit dans [SQL/TCP] », « Autorise les paiements par carte via [HTTPS] ». L’équipe découvre qu’une même ligne signifiait deux choses différentes (un appel dans un sens et un webhook dans l’autre) : elle devient donc deux flèches. |
| Éléments manquants | Le fait de libeller les flèches révèle que les événements de commande parviennent au service d’affectation par un topic Kafka qui n’était pas dessiné. Ajoutez le topic comme conteneur, avec des flèches asynchrones en pointillés. |
| Légende et couleur | La boîte verte s’avère signifier « détenu par notre équipe ». Ajoutez-le dans une légende, ou remplacez la couleur par une frontière en pointillés portant le nom de l’équipe. |
| Résultat | Le diagramme a gagné un titre, une légende, trois éléments et deux fois plus de flèches, mais il demande moins d’explications, car chaque question qu’un lecteur se poserait trouve sa réponse sur la page. |
L’essentiel de la valeur est venu du libellé des flèches : les lignes sans libellé cachent les informations architecturales les plus importantes (le sens, le protocole, le caractère synchrone ou asynchrone).
Le diagramme amélioré a révélé une dépendance (le topic) que l’équipe elle-même avait oubliée, ce qui est un effet secondaire typique de l’application des règles.
Outils : dessin ou modélisation
Les diagrammes C4 peuvent être produits avec n’importe quel outil de dessin, et de nombreuses équipes commencent par un tableau blanc ou une application générique de création de diagrammes. Le site du C4 distingue deux familles d’outils. Les outils de diagrammes dessinent des boîtes et des lignes ; ils sont souples et familiers, mais les diagrammes sont des images indépendantes : renommer un élément oblige à modifier chaque diagramme qui le montre, et rien ne vérifie que les diagrammes concordent. Les outils de modélisation contiennent un modèle unique des personnes, des systèmes, des conteneurs, des composants et des relations, et génèrent chaque diagramme comme une vue de ce modèle ; le renommage se fait une seule fois, les diagrammes restent cohérents et le modèle peut être interrogé et validé.
Structurizr, créé par Simon Brown, est l’outil de modélisation de référence pour C4. Son langage textuel, le Structurizr DSL, décrit le modèle et les vues dans un fichier qui vit dans le système de gestion de versions, à côté du code. Parmi les autres options figurent C4-PlantUML (des formes C4 pour PlantUML), la prise en charge des diagrammes C4 par Mermaid et divers outils de modélisation commerciaux ; la section 4.7, Diagrammes en tant que code, en montre des exemples. Le choix compte moins que l’habitude : gardez la source des diagrammes là où l’équipe travaille, et mettez-la à jour dans la même pull request que le changement qu’elle décrit.
Questions fréquentes
C4 remplace-t-il UML ?
Pas exactement. C4 définit des abstractions et des types de diagrammes, pas une notation, et il ne dit rien de nombreux aspects qu’UML peut exprimer précisément, comme les machines à états ou les séquences de messages détaillées. Beaucoup d’équipes utilisent C4 pour la structure et empruntent à UML les diagrammes de séquence, d’états-transitions et de déploiement là où la précision est nécessaire (section 4.4).
Comment les fonctions serverless s’intègrent-elles dans C4 ?
Chaque fonction, ou chaque groupe de fonctions déployées ensemble, est un conteneur : une unité déployable séparément qui exécute du code. Les stockages de données et les files partagés qu’elles utilisent sont aussi des conteneurs.
Notre système est un monolithe déployé d’un seul bloc. Le diagramme de conteneurs est-il inutile ?
Non. Un monolithe a généralement quand même un client web ou mobile, l’application serveur, une base de données et peut-être un stockage de fichiers et une tâche planifiée, chacun étant un conteneur. Le diagramme de composants du monolithe devient alors la vue la plus intéressante de ses modules internes.
Vérifiez votre compréhension
Qu’est-ce qu’un conteneur dans le modèle C4 ? Donnez deux exemples qui ne font pas intervenir Docker.
Une unité exécutable ou déployable séparément qui exécute du code ou stocke des données. Exemples : une application mobile sur un téléphone, une application monopage dans un navigateur, un schéma de base de données, une fonction serverless.
Quels sont les deux diagrammes C4 que les recommandations C4 conseillent à toutes les équipes ?
Le diagramme de contexte système et le diagramme de conteneurs.
Où faut-il indiquer le nombre de réplicas, les régions et les équilibreurs de charge ?
Sur un diagramme de déploiement, un par environnement, et non sur le diagramme de conteneurs.
Pourquoi C4 exige-t-il des flèches à sens unique et avec un libellé ?
Les lignes sans libellé ou à double sens cachent la nature de la relation (appel, flux de données, événement), son sens et le protocole qu’elle utilise, qui font partie des informations architecturales les plus importantes du diagramme.
Sources et lectures complémentaires
Une question sur cette section ? ArchitectBot, l’assistant d’étude IA du cours, répond d’abord à partir du cours.
Demander : « Chacun de nos microservices doit-il être un conteneur ou un système logiciel distinct dans nos diagrammes C4 ? »