Read in English · Leer en español · Auf Deutsch lesen
Section 5.1 sur 5.8 · Intermédiaire · 22 min de lecture
Styles architecturaux, patrons et tactiques
Leçon vidéo
5 min · narré en anglais, avec sous-titresÉcouter seulement (audio)
Lire la transcription
Dans cette leçon, vous allez découvrir le vocabulaire sur lequel s’appuient les chapitres cinq et six : ce qu’est un style, en quoi il diffère d’un patron et d’une tactique, et comment compter les parties réellement indépendantes d’un système.
Pensez aux types de maisons : une maison mitoyenne, un plain-pied, une tour d’habitation. Chaque nom en dit long à un constructeur avant même qu’un plan existe : combien d’étages, comment les pièces communiquent, ce que cela coûte, et où cela fonctionne bien. Le logiciel a ses propres formes nommées, appelées styles architecturaux : une application en couches, un ensemble de modules dans un seul programme, une chaîne d’étapes de traitement, un groupe de services séparés. Les connaître, et savoir ce à quoi chacun est bon ou mauvais, permet à une équipe de choisir rapidement une forme raisonnable et de la décrire en quelques mots.
David Garlan et Mary Shaw ont décrit un style architectural comme un vocabulaire de types de composants et de connecteurs, accompagné de contraintes sur la façon dont ils peuvent être combinés. Le style tubes et filtres, par exemple, interdit aux filtres de partager un état ou de connaître leurs voisins. Respectez cette règle, et vous obtenez des filtres qui peuvent être testés, réutilisés et réarrangés de façon indépendante. Ce n’est pas de la chance ; c’est une conséquence de la règle. Un style n’est donc pas une image à copier. C’est un ensemble de règles qui procurent des qualités précises, moyennant un prix. Adoptez le vocabulaire sans les règles, et vous payez le prix sans obtenir les avantages.
Quatre termes apparentés sont souvent employés de façon approximative. Un style décrit la forme globale : quelles parties et quelles connexions sont autorisées, et selon quelles règles. Un patron est une solution éprouvée à un problème structurel récurrent dans un contexte donné, comme Courtier ou Modèle-Vue-Contrôleur. Une tactique est plus petite : une seule décision de conception qui fait évoluer un attribut de qualité, comme un cache pour réduire la latence. Les patrons regroupent généralement plusieurs tactiques. Et une architecture de référence est un modèle pour tout un domaine, comme AUTOSAR pour l’électronique des voitures. Les experts ne s’accordent pas sur l’endroit où finit le style et où commence le patron ; consacrez plutôt votre énergie aux contraintes.
La première grande décision est la façon de découper le système au niveau supérieur. Le partitionnement technique regroupe le code selon le rôle technique : présentation, logique métier et persistance. Supposons qu’une entreprise de livraison de repas permette aux clients de laisser un pourboire au livreur. Il faut un nouveau champ sur un écran, une nouvelle règle et une nouvelle colonne dans la base de données. Un seul changement touche chaque couche. Le partitionnement par domaine regroupe plutôt le code par capacité métier : commandes, paiement, livraison et cartes, chacun avec sa propre interface, sa logique et ses données. Ici, le même changement se concentre presque entièrement dans le module de livraison. La plupart des changements métier sont formulés en termes de domaine, si bien que le partitionnement par domaine tend à les garder au même endroit. Le partitionnement technique est plus simple, et convient aux petits systèmes construits par une seule équipe.
La seconde distinction est le déploiement. Un monolithe est déployé comme une seule unité. Un système distribué se compose de plusieurs unités qui coopèrent à travers un réseau, avec tous les coûts du réseau. Une idée plus précise est le quantum d’architecture. Un quantum est une partie qui peut être déployée indépendamment, qui accomplit une seule tâche métier cohérente et qui inclut tout ce dont elle a besoin, en particulier sa base de données. Un monolithe est, par définition, un seul quantum. Trois services qui partagent une seule base de données forment toujours un seul quantum. Aucun ne peut changer le schéma ni être restauré seul, si bien qu’ils tiennent ou tombent ensemble. Ce n’est que lorsque chaque service possède ses données, et qu’ils échangent des événements, que vous obtenez trois quanta. Cela compte, car les caractéristiques d’architecture s’appliquent par quantum. Des parties aux besoins très différents doivent former des quanta séparés.
Classons quatre conceptions pour la plateforme de livraison de repas. La conception un est une application unique avec des dossiers pour les vues, les services et les modèles. Partitionnement technique, une unité, un quantum. Chaque fonctionnalité traverse les trois dossiers. La conception deux a des paquets pour les commandes, les paiements, la livraison et les cartes, chacun avec ses propres tables. Toujours un seul quantum, mais les changements restent locaux, et les modules pourraient être séparés plus tard. La conception trois en fait quatre services qui partagent les mêmes tables. Quatre unités de déploiement, mais un seul quantum : un changement de schéma ou une panne de la base de données touche les quatre. Tous les coûts de la distribution, peu de ses avantages. La conception quatre donne à chaque service sa propre base de données. Il y a maintenant quatre quanta, chacun mis en production seul, au prix de pannes réseau et d’une cohérence à terme.
Retenez trois points. Monolithe décrit le déploiement, pas la qualité. Découpez une grosse boule de boue en services et vous obtenez une boule de boue distribuée, ce qui est pire. Les systèmes réels sont hybrides. Un monolithe modulaire peut être organisé en couches à l’intérieur de chaque module, et exécuter une tâche nocturne en tubes et filtres. Et un style n’est pas une fin en soi. Partez de vos exigences architecturalement significatives, choisissez le style le plus simple qui les satisfait, consignez ce choix, et faites respecter ses règles.
La section complète présente un tableau de tous les styles des chapitres cinq et six, et en dit plus sur les quanta. Ensuite, dans la section cinq point deux, nous examinons le style le plus familier de tous : l’architecture en couches. À très vite.
Ce qu’il faut savoir
- Un style architectural est un ensemble nommé de types d’éléments, de types de connecteurs et de contraintes sur leur combinaison (Garlan et Shaw) ; ce sont les contraintes qui donnent à un style ses qualités prévisibles.
- Un patron architectural, dans la tradition de Pattern-Oriented Software Architecture (Buschmann et al., 1996), est une solution éprouvée à un problème structurel récurrent dans un contexte donné ; une tactique est une décision de conception unique visant un attribut de qualité ; une architecture de référence est un modèle pour un domaine.
- Le partitionnement technique découpe un système selon le rôle technique (présentation, logique, données) ; le partitionnement par domaine le découpe par capacité métier (commandes, paiements, livraison). Ce choix détermine jusqu’où se propage une modification typique d’une fonctionnalité et comment les équipes peuvent être organisées.
- Un style monolithique est déployé comme une seule unité ; un style distribué est déployé comme plusieurs unités qui coopèrent à travers un réseau et hérite de tous les coûts du réseau.
- Un quantum d’architecture est une partie déployable indépendamment, dotée d’une forte cohésion fonctionnelle, données comprises ; un seul ensemble de caractéristiques d’architecture s’applique par quantum, si bien que des parties aux besoins très différents doivent former des quanta séparés.
- Chaque style est un compromis, avec des forces et des faiblesses caractéristiques ; les systèmes réels combinent des styles, et les évaluations de ce cours sont des jugements relatifs pour des mises en œuvre typiques, pas des lois.
Pourquoi les architectes nomment des formes
La plupart des systèmes ne sont pas conçus à partir de rien. Les architectes expérimentés reconnaissent qu’un nouveau problème ressemble à un problème déjà rencontré et se tournent vers une forme dont on sait qu’elle fonctionne : quelques couches pour une application métier simple, une chaîne d’étapes de traitement pour un flux de données, un noyau avec des plug-ins pour un produit que les clients étendent. Nommer ces formes donne à une équipe un vocabulaire commun. Dire c’est un monolithe modulaire avec une communication par événements entre les modules
transmet en une phrase ce qui demanderait sinon une page de diagrammes, et cela apporte avec soi tout un savoir sur ce qui tend à bien ou mal se passer.
David Garlan et Mary Shaw ont donné une base solide à cette démarche dans An Introduction to Software Architecture (rapport technique de Carnegie Mellon, 1994) et dans leur livre Software Architecture: Perspectives on an Emerging Discipline (1996). Ils ont décrit un style architectural comme un vocabulaire de types de composants et de connecteurs, accompagné d’un ensemble de contraintes sur la façon dont ils peuvent être combinés. Le style tubes et filtres, par exemple, a une seule sorte de composant (un filtre qui transforme des données) et une seule sorte de connecteur (un tube qui les transporte dans un seul sens), et il impose aux filtres de ne pas partager d’état et de ne pas savoir qui sont leurs voisins. Roy Fielding, dont la thèse (2000) a défini REST comme un style, a formulé la même idée plus nettement : un style est un ensemble coordonné de contraintes, et ce sont les contraintes qui produisent les propriétés. Interdisez aux filtres de partager un état et vous obtenez des filtres qui peuvent être testés, réutilisés et réarrangés indépendamment ; ce n’est pas de la chance, c’est une conséquence de la règle.
C’est la façon la plus utile de lire chaque style de ce chapitre et du suivant. Un style n’est pas une image à copier. C’est un ensemble de règles que vous acceptez de suivre, choisies parce que les suivre procure des caractéristiques d’architecture précises, les attributs de qualité du chapitre 2, moyennant un prix. Une équipe qui adopte le vocabulaire d’un style mais pas ses règles paie le prix sans obtenir les avantages.
Styles, patrons, tactiques et architectures de référence
Quatre termes apparentés sont utilisés, souvent de façon approximative, pour désigner un savoir de conception réutilisable. Ils diffèrent surtout par leur portée et par leur degré de prescription.
Un patron architectural décrit une solution éprouvée à un problème structurel récurrent dans un contexte donné. L’idée de patron vient de l’architecte du bâtiment Christopher Alexander et est entrée dans le logiciel avec les patrons de conception de Gamma, Helm, Johnson et Vlissides (1994), qui opèrent à l’échelle de quelques classes. Pattern-Oriented Software Architecture, Volume 1: A System of Patterns, de Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad et Michael Stal (1996), qu’on appelle généralement POSA, a catalogué des patrons à l’échelle de systèmes entiers : Couches (Layers), Tubes et filtres (Pipes and Filters) et Tableau noir (Blackboard) (regroupés sous le thème « de la boue à la structure »), Courtier (Broker) pour les systèmes distribués, Modèle-Vue-Contrôleur et Présentation-Abstraction-Contrôle pour les systèmes interactifs, et Micronoyau (Microkernel) et Réflexion (Reflection) pour les systèmes adaptables. Chaque patron de POSA est rédigé sous la forme contexte, problème, forces et solution, avec ses conséquences, ce qui rend les compromis explicites.
Une tactique, au sens où l’entendent Len Bass, Paul Clements et Rick Kazman dans Software Architecture in Practice, est plus petite : une seule décision de conception qui influe sur une réponse d’un attribut de qualité, comme ajouter un heartbeat pour détecter un serveur défaillant ou un cache pour réduire la latence. La section 2.6 a utilisé des tactiques de modifiabilité comme l’encapsulation et le recours à un intermédiaire. Les patrons regroupent plusieurs tactiques : le patron Couches combine l’encapsulation, la restriction des dépendances et le recours à un intermédiaire.
Une architecture de référence est un modèle pour tout un domaine ou toute une plateforme : elle nomme les blocs de construction typiques et la façon dont ils se connectent, afin que les projets l’adaptent plutôt que de partir d’une page blanche. AUTOSAR, l’architecture logicielle en couches utilisée pour les calculateurs électroniques des voitures, en est un exemple bien connu ; les centres d’architecture publiés par les fournisseurs de cloud en offrent beaucoup de plus petites. Une architecture de référence est généralement construite à partir de plusieurs styles et patrons à la fois.
Les praticiens ne s’accordent pas sur l’endroit où passe la frontière entre style et patron. POSA appelle Couches un patron ; Garlan et Shaw appellent les systèmes en couches un style ; Mark Richards et Neal Ford, dans Fundamentals of Software Architecture, réservent le mot style
à la topologie globale d’un système et le mot patron
aux structures réutilisables de plus bas niveau qui peuvent apparaître à l’intérieur de nombreux styles. Ce cours suit l’usage courant : style pour la forme globale d’un système ou d’une grande partie de celui-ci, patron pour une solution réutilisable qui peut se situer à n’importe quel niveau. Ne dépensez pas d’énergie sur la frontière ; consacrez-la aux contraintes et à leurs conséquences.
Quatre sortes de savoir de conception réutilisable
| Terme | Portée | Exemple | Question à laquelle il répond |
|---|---|---|---|
| Style architectural | Le système entier ou une grande partie | En couches, tubes et filtres, microservices | Quelles sortes de parties et de connexions sont autorisées, et selon quelles règles ? |
| Patron architectural | N’importe quel niveau structurel | Courtier (Broker), Modèle-Vue-Contrôleur, Micronoyau (Microkernel) | Quelle est une solution éprouvée à ce problème structurel récurrent, et que coûte-t-elle ? |
| Tactique | Une seule décision de conception | Heartbeat, cache, encapsulation, nouvelle tentative avec backoff | Quelle décision unique fait évoluer cet attribut de qualité dans le sens dont nous avons besoin ? |
| Architecture de référence | Un domaine ou une plateforme | AUTOSAR pour l’électronique automobile ; les architectures publiées par les fournisseurs de cloud | Que contiennent habituellement les systèmes de ce type, et comment sont-ils habituellement organisés ? |
Deux façons de découper un système : partitionnement technique ou par domaine
La première décision structurelle de tout style est la façon de découper le système au niveau supérieur. Il existe deux réponses de base. Le partitionnement technique regroupe le code selon le rôle technique : tout ce qui concerne l’interface utilisateur à un endroit, toutes les règles métier à un autre, tout l’accès à la base de données à un troisième. Le partitionnement par domaine regroupe le code par capacité métier : tout ce qui concerne les commandes à un endroit, les paiements à un autre, la livraison à un troisième, chacun contenant l’interface utilisateur, la logique et l’accès aux données dont il a besoin.
La différence apparaît dès qu’une fonctionnalité change. Supposons qu’une entreprise de livraison de repas permette aux clients d’ajouter un pourboire pour le livreur. Dans un système partitionné techniquement, ce changement demande un nouveau champ sur un écran (présentation), une nouvelle règle pour les plafonds de pourboire et les versements (logique métier) ainsi qu’une nouvelle colonne et une nouvelle requête (persistance) : trois parties, souvent prises en charge par trois personnes ou équipes différentes. Dans un système partitionné par domaine, le même changement se concentre presque entièrement dans le module de livraison. La plupart des demandes de changement métier sont formulées en termes de domaine, si bien que le partitionnement par domaine tend à garder un changement au même endroit. Le partitionnement technique garde au même endroit un changement technique, comme le remplacement de la bibliothèque d’accès à la base de données, mais ces changements sont plus rares.
Ce choix façonne aussi l’organisation. Selon la loi de Conway, un système partitionné techniquement tend à être construit par une équipe frontend, une équipe backend et une équipe base de données, et chaque fonctionnalité exige un passage de relais entre elles. Un système partitionné par domaine peut être construit par des équipes qui prennent chacune en charge une capacité métier de bout en bout. Martin Fowler a formulé la même recommandation en 2015 : les couches présentation, domaine et données sont une bonne façon d’organiser un petit logiciel, mais le niveau supérieur d’un système plus grand doit être découpé en modules orientés domaine, chacun organisé en couches à l’intérieur si cela aide.
Aucune des deux n’est mauvaise. Le partitionnement technique est simple, familier et pris en charge par la structure de dossiers par défaut de presque tous les frameworks web, et il convient aux petits systèmes où une seule équipe fait tout. Le partitionnement par domaine demande davantage de réflexion en amont, car il faut trouver de bonnes frontières de domaine (le sujet de la section 5.7), mais il s’adapte mieux à la taille du système et au nombre d’équipes.
La même fonctionnalité selon deux partitionnements
Styles monolithiques et distribués
La seconde distinction de premier niveau concerne le déploiement. Une unité de déploiement est ce qui est construit, mis en production et démarré d’un seul tenant : un exécutable unique, une image de conteneur, une archive web. Dans une architecture monolithique, l’application entière est une seule unité de déploiement, généralement avec une seule base de données. Elle peut tourner en de nombreuses copies identiques derrière un équilibreur de charge, mais chaque copie contient tout le code, et mettre en production le moindre changement signifie tout mettre en production. Dans une architecture distribuée, le système se compose de plusieurs unités de déploiement qui coopèrent en échangeant des messages à travers un réseau, et chacune peut être mise en production et passer à l’échelle séparément.
Deux précisions évitent bien des confusions. D’abord, monolithe
décrit le déploiement, pas la qualité. Un monolithe peut être magnifiquement modulaire ou être une grosse boule de boue (le nom donné par Brian Foote et Joseph Yoder à un système sans structure discernable), et il en va de même d’un système distribué : bien des équipes ont appris que découper une boule de boue en services donne une boule de boue distribuée, ce qui est pire. Ensuite, être distribué n’est pas une amélioration gratuite. Chaque appel qui traverse un réseau peut être lent, échouer à mi-chemin ou arriver deux fois, les données ne peuvent plus être modifiées dans une seule transaction locale, et le système exige une supervision, une automatisation du déploiement et des compétences d’astreinte dont un monolithe peut se passer. Le chapitre 6 détaille ces coûts. Ce chapitre traite des styles qui les évitent : tout tourne dans une seule unité de déploiement, et l’architecture réside dans la façon dont le code y est organisé.
Le quantum d’architecture
L’opposition entre monolithique et distribué est un premier découpage utile, mais trop grossier pour les décisions réelles. Neal Ford, Rebecca Parsons et Patrick Kua ont introduit une idée plus précise dans Building Evolutionary Architectures (2017), affinée par Ford, Richards, Sadalage et Dehghani dans Software Architecture: The Hard Parts (2021) : le quantum d’architecture. Un quantum est une partie du système qui peut être déployée indépendamment, qui présente une forte cohésion fonctionnelle (elle accomplit une seule tâche cohérente pour le métier) et qui inclut tout ce dont elle a besoin pour fonctionner, en particulier sa base de données. La définition ultérieure ajoute que les parties d’un quantum sont couplées statiquement (elles partagent du code, des schémas ou une infrastructure qui doivent être déployés ensemble) et que les appels synchrones lient les quanta entre eux sur le plan opérationnel tant que dure l’appel.
Pourquoi est-ce important ? Parce que les caractéristiques d’architecture s’appliquent par quantum. Un quantum passe à l’échelle, est déployé, sécurisé et rétabli comme un tout : il a donc un seul niveau de scalabilité, un seul niveau de disponibilité, une seule cadence de mise en production. Si deux parties d’un système ont besoin de caractéristiques très différentes, par exemple un flux de positions des livreurs qui doit absorber des milliers de mises à jour par seconde et une tâche mensuelle de facturation des restaurants, elles ne peuvent les obtenir qu’en se trouvant dans des quanta différents. À l’inverse, découper du code en plusieurs services ne crée pas plusieurs quanta s’ils partagent toujours une seule base de données : aucun d’eux ne peut changer le schéma ni être restauré seul, si bien qu’ils tiennent ou tombent ensemble. Un monolithe est, par définition, un seul quantum.
Compter les quanta
Exemple commenté
Exemple commenté : classer quatre conceptions
Une entreprise de livraison de repas examine quatre conceptions candidates pour sa plateforme. Pour chacune, l’architecte pose trois questions : comment le niveau supérieur est-il partitionné, combien y a-t-il d’unités de déploiement, et combien de quanta ?
Conception 1 : une application Django avec les dossiers views, services et models, une base de données PostgreSQL | Partitionnement technique ; une unité de déploiement ; un quantum. Simple, mais chaque fonctionnalité traverse les trois dossiers. |
|---|---|
Conception 2 : une application avec les paquets orders, payments, delivery et menus, chacun avec ses propres tables, un serveur de base de données | Partitionnement par domaine ; une unité de déploiement ; un quantum. Les changements restent locaux, et les modules pourraient être séparés plus tard. |
| Conception 3 : quatre services (commandes, paiements, livraison, cartes) qui lisent et écrivent tous dans les mêmes tables de la base de données | Partitionnement par domaine de nom seulement ; quatre unités de déploiement mais un seul quantum, car un changement de schéma ou une panne de la base de données touche les quatre. Tous les coûts de la distribution, peu de ses avantages. |
| Conception 4 : les mêmes quatre services, chacun avec sa propre base de données, qui échangent des événements par l’intermédiaire d’un courtier de messages (message broker) | Partitionnement par domaine ; quatre unités de déploiement ; quatre quanta. Chacun peut passer à l’échelle et être mis en production indépendamment, au prix de pannes réseau et d’une cohérence à terme entre eux. |
Les conceptions 1 et 2 coûtent autant à exploiter, mais la conception 2 rend les changements typiques moins coûteux et préserve les options futures.
La conception 3 est le cas d’alerte : le nombre d’unités de déploiement dit peu de chose ; le nombre de quanta, qui dépend des données et du couplage, dit ce qui peut réellement évoluer indépendamment.
Comment lire les sections de styles qui suivent
Les sections 5.2 à 5.5 et la majeure partie du chapitre 6 décrivent chacune un style, toujours dans le même ordre, afin que les styles puissent être comparés : une définition et l’origine du style ; un diagramme ; son fonctionnement ; un exemple concret de système ; un tableau qui évalue ses principales caractéristiques ; quand l’utiliser et quand l’éviter ; les anti-patrons courants ; et la manière de le faire respecter dans le code, car un style qui n’est pas vérifié s’érode, comme l’a décrit la section 1.7.
Les évaluations des caractéristiques (Bas, Moyen, Élevé, chacune avec une justification) suivent l’approche des comparaisons de styles de Richards et Ford, mais ce sont les jugements propres à ce cours. Lisez-les comme relatives et typiques : elles comparent les styles tels qu’ils sont habituellement construits, par une équipe compétente, pour un système métier typique. Une équipe disciplinée peut réaliser un monolithe en couches qui se déploie plusieurs fois par jour, et une équipe négligente peut construire des microservices impossibles à déployer. Les évaluations vous indiquent où le style vous aide et où vous devrez lutter contre lui.
Deux sections de ce chapitre ne portent pas sur des styles de déploiement. Les architectures hexagonale, en oignon et Clean Architecture (section 5.6) décrivent comment organiser l’intérieur d’une application ou d’un service pour que la logique métier ne dépende pas de la technologie. La conception pilotée par le domaine (section 5.7) est une façon de trouver les frontières de domaine sur lesquelles s’appuient les monolithes modulaires et les microservices. Les deux s’appliquent aussi bien à l’intérieur d’un monolithe que d’un système distribué.
Les styles des chapitres 5 et 6 en un coup d’œil
| Style | Partitionnement principal | Déploiement | Usage typique |
|---|---|---|---|
| En couches (5.2) | Technique | Monolithique | Applications métier petites à moyennes construites par une seule équipe |
| Monolithe modulaire (5.3) | Domaine | Monolithique | Produits en croissance, avec plusieurs équipes qui veulent un seul déploiement |
| Tubes et filtres (5.4) | Technique (étapes de traitement) | Monolithique ou distribué | Traitement de données : ETL, multimédia, journaux, compilateurs |
| Micronoyau (5.5) | Noyau technique, plug-ins souvent par domaine | Généralement monolithique | Produits étendus par des clients ou des tiers ; moteurs de règles |
| Hexagonale, en oignon, Clean (5.6) | Structure interne : le domaine au centre | L’un ou l’autre | Toute application dont la logique doit survivre à ses frameworks |
| À base de services (6.2) | Domaine | Distribué, quelques services à gros grain | Une étape pragmatique au-delà d’un monolithe, partageant souvent une base de données |
| Architecture orientée services (6.2) | Technique (orchestration, services d’entreprise) | Distribué | Intégration d’entreprise, aujourd’hui largement historique |
| Microservices (6.3) | Domaine | Distribué, nombreux services à grain fin | De nombreuses équipes qui doivent mettre en production indépendamment, à grande échelle |
| Pilotée par les événements (6.4) | Technique (traitement des événements) | Distribué | Réactions rapides et découplées aux événements métier |
| Serverless et basée sur l’espace (6.8) | Variable | Distribué | Charge en pics ou extrême ; charges de travail payées à l’usage |
Les styles se combinent, et ce ne sont pas des objectifs
Les systèmes réels sont hybrides. Un monolithe modulaire peut être organisé en couches à l’intérieur de chaque module ; l’un de ses modules peut exécuter une tâche nocturne en tubes et filtres ; un microservice peut être construit en style hexagonal ; un système piloté par les événements peut utiliser un micronoyau pour permettre aux clients d’ajouter leurs propres règles. Nommer le style de chaque partie reste utile, car chaque partie hérite alors d’un ensemble connu de règles et de compromis.
L’erreur courante consiste à traiter un style comme une fin en soi : nous passons aux microservices
comme stratégie, plutôt que comme moyen d’atteindre une qualité énoncée, par exemple le déploiement indépendant pour douze équipes. Partez des exigences architecturalement significatives du chapitre 2, choisissez le style le plus simple dont les caractéristiques les satisfont, consignez ce choix dans un enregistrement de décision et faites respecter ses règles. La section 5.8 propose un guide de décision pour les styles de ce chapitre.
Vérifiez votre compréhension
Selon Garlan et Shaw, quels sont les deux éléments qui définissent un style architectural ?
Un vocabulaire de types de composants et de connecteurs, et un ensemble de contraintes sur la façon dont ils peuvent être combinés. Ce sont les contraintes qui produisent les qualités caractéristiques du style.
Quelle est la différence entre une tactique et un patron ?
Une tactique est une seule décision de conception visant une réponse d’un attribut de qualité, comme un heartbeat ou un cache. Un patron est une solution documentée plus vaste, qui combine généralement plusieurs tactiques.
Pourquoi quatre services qui partagent une seule base de données pourraient-ils compter comme un seul quantum d’architecture ?
Parce qu’aucun d’eux ne peut changer le schéma partagé, être restauré ou passer à l’échelle au niveau des données sans affecter les autres ; en pratique, ils sont déployés et tombent en panne ensemble, si bien qu’ils partagent un seul ensemble de caractéristiques opérationnelles.
Quelle sorte de changement le partitionnement technique garde-t-il au même endroit ?
Un changement technique, comme le remplacement de la bibliothèque d’accès à la base de données ou du framework d’interface utilisateur. Les changements métier typiques, en revanche, traversent toutes les couches techniques.
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 : « Nos quatre services utilisent tous la même base de données PostgreSQL. Est-ce vraiment un problème, ou seulement un problème théorique ? »