Be Software Architecture Wise
Be Wise Apps

Read in English · Leer en español · Auf Deutsch lesen

Section 6.2 sur 6.8 · Intermédiaire · 22 min de lecture

Architecture à base de services et architecture orientée services

Leçon vidéo

6 min · narré en anglais, avec sous-titres
Écouter seulement (audio)
Lire la transcription

De nombreux systèmes réels se situent entre un seul monolithe et de nombreux microservices. Dans cette leçon, vous découvrirez l’architecture à base de services, le juste milieu pragmatique, et l’architecture orientée services, plus ancienne, avec laquelle on la confond souvent.

Pensez à un hôpital devenu trop grand pour un seul bâtiment. Il pourrait se diviser en des centaines de minuscules cliniques, chacune avec son propre accueil et son propre service des dossiers. Ou bien il pourrait s’installer en cinq départements dans des ailes séparées : maternité, chirurgie, consultations externes, pharmacie, et urgences. Chaque aile a son propre personnel, et peut être rénovée sans fermer les autres. Mais elles partagent toujours un service central des dossiers. C’est cela, l’architecture à base de services : quelques grandes parties séparées, chacune chargée de tout un domaine de l’activité, qui partagent souvent encore une même base de données.

L’architecture à base de services découpe un système en quelques services de domaine à gros grain déployés séparément, généralement entre quatre et douze. Chacun couvre tout un domaine d’activité, comme les commandes ou les paiements. Deux choses en découlent. La plupart des workflows s’exécutent à l’intérieur d’un seul service : ils peuvent donc utiliser une transaction de base de données locale ordinaire, avec toutes les garanties ACID, c’est-à-dire atomicité, cohérence, isolation et durabilité. Et les services s’appellent rarement entre eux, ce qui garde les chaînes synchrones courtes.

Voici une plateforme de livraison de repas construite de cette façon. En haut se trouvent quatre interfaces utilisateur : l’application client, la tablette du restaurant, l’application du livreur et un portail des opérations. Elles appellent une couche API facultative, un reverse proxy ou une gateway, qui gère le routage, l’authentification et les limites de débit. Derrière elle se trouvent cinq services de domaine. Chacun est à gros grain, avec tout ce dont son domaine a besoin, de l’API à l’accès aux données, et chacun est confié à une seule équipe. Quatre d’entre eux partagent une même base de données PostgreSQL, avec un schéma chacun, et chaque service ne peut toucher qu’au sien. Le partage rend ce style économique et simple, mais c’est aussi sa principale faiblesse, car les changements de schéma doivent être coordonnés. Paiements garde sa propre base de données, car les données de carte lui en donnent une raison forte, et il peut ainsi être audité séparément. Ne donner à un service son propre stockage que lorsque c’est justifié est une façon de maîtriser la base de données partagée.

Pourquoi choisir cette approche ? Imaginez que l’entreprise soit passée à cinq équipes, soit environ trente-cinq ingénieurs. Son monolithe est bien organisé, mais les mises en production sont devenues une file d’attente, et une faute dans le suivi des livreurs a fait tomber l’étape de paiement à deux reprises. Avec cinq services de domaine, passer une commande s’exécute à l’intérieur du service des commandes dans une seule transaction locale, puis donne lieu à un seul appel aux paiements. Les autres services apprennent l’existence de la commande par un message, et non par une chaîne d’appels. Cela apporte cinq pipelines de mise en production distincts. Une faute dans le suivi n’arrête plus l’étape de paiement, et chaque équipe met en production quand elle est prête. Cela coûte cinq ensembles de déploiements et de tableaux de bord, des délais d’expiration et de l’idempotence sur les appels aux paiements, et des changements de schéma qui doivent toujours être coordonnés. Le pas est volontairement modeste.

L’architecture à base de services est souvent confondue avec l’architecture orientée services, plus ancienne, ou SOA. Son idée centrale était saine : des capacités métier exposées sous forme de services dotés de contrats explicites. Mais ce que la plupart des entreprises ont construit était organisé en couches techniques. En haut, des services métier décrivent des processus, comme passer commande ou ouvrir un compte. Au centre se trouvait un bus de services d’entreprise, ou ESB. Il acheminait les messages, les transformait d’un format à un autre et, au moyen d’un moteur d’orchestration, exécutait lui-même les processus métier. En dessous, des services d’entreprise partagés, comme le client et la tarification, étaient censés être réutilisés partout, et ils enveloppaient à leur tour les systèmes existants. Et chaque message était traduit vers et depuis un modèle de données canonique unique : une définition de chaque entité métier valable pour toute l’entreprise.

Beaucoup de programmes SOA ont déçu. Premièrement, la réutilisation a créé du couplage. Un service client partagé, utilisé par quarante applications, ne pouvait pas changer sans l’accord de quarante consommateurs. Deuxièmement, le bus est devenu le goulet d’étranglement. Presque chaque changement métier avait besoin de la seule équipe qui en était responsable, et il est devenu un point unique de défaillance. Troisièmement, le modèle canonique était trop gros. Une définition unique du client qui convienne aux ventes, à la facturation, au support et à la logistique est soit énorme, soit inadaptée à la plupart d’entre eux. Et les standards de services web étaient complexes, avec un outillage coûteux. Les microservices conservent des contrats explicites mais inversent la plupart de ces choix : smart endpoints and dumb pipes, avec toute la logique dans les services et chaque service propriétaire de ses données.

Alors, quand l’architecture à base de services est-elle le bon choix ? Quand le système compte quelques domaines métier clairs, et que deux à peut-être huit équipes doivent mettre en production indépendamment. Quand la plupart des workflows restent à l’intérieur d’un domaine, et qu’une cohérence forte au sein d’un domaine a de la valeur. C’est aussi une excellente étape pour sortir d’un monolithe : bien moins risquée que de sauter à cinquante microservices, et souvent suffisante pour qu’on s’en tienne là. Prévoyez de la dépasser quand des parties ont besoin d’une mise à l’échelle très différente, quand la base de données partagée limite les écritures, ou quand les services ne cessent de s’appeler entre eux pour des requêtes ordinaires. C’est le signe que les frontières sont mal placées.

La section complète compare côte à côte l’architecture à base de services, la SOA et les microservices. Ensuite, dans la section six point trois, nous nous intéressons aux microservices. À très vite.

Ce qu’il faut savoir

Entre le monolithe et les microservices

Une grande partie des discussions du secteur présente un choix entre un seul monolithe et de nombreux microservices. En pratique, une large part des systèmes réels se situent entre les deux : une poignée de services déployés séparément, chacun couvrant tout un domaine d’activité, qui partagent souvent encore une même base de données. Mark Richards et Neal Ford ont nommé ce style architecture à base de services dans Fundamentals of Software Architecture et soutiennent qu’il s’agit de l’un des styles distribués les plus pragmatiques qui soient. Cette section le décrit, l’oppose à l’architecture orientée services (SOA), plus ancienne, avec laquelle on le confond souvent, et montre en quoi les microservices diffèrent de l’une comme de l’autre.

L’architecture à base de services : la topologie

Un système à base de services comporte trois parties. Une ou plusieurs interfaces utilisateur appellent un ensemble de services de domaine déployés séparément, chacun couvrant un domaine d’activité vaste et cohérent, comme les commandes ou les paiements. Richards et Ford observent que ces systèmes comptent généralement entre 4 et 12 services de domaine, environ 7 en moyenne. Les services partagent le plus souvent une base de données, et une couche API facultative (un reverse proxy ou une gateway) peut s’intercaler entre les interfaces utilisateur et les services pour gérer le routage, l’authentification et la limitation de débit.

Chaque service de domaine est à gros grain : il contient tout ce qu’il faut pour son domaine, de l’API à la logique métier et à l’accès aux données, et il est structuré en interne comme un petit monolithe, souvent en couches ou en modules (chapitre 5). Un service est généralement déployé sous la forme de quelques instances derrière un équilibreur de charge.

Deux conséquences en découlent. Premièrement, la plupart des workflows métier s’exécutent entièrement à l’intérieur d’un seul service : ils peuvent donc utiliser une transaction de base de données locale ordinaire, avec toutes les garanties ACID (chapitre 0). Deuxièmement, les services de domaine ont rarement besoin de s’appeler entre eux : une requête issue de l’interface utilisateur va au seul service propriétaire du domaine. Cela garde les chaînes synchrones courtes, ce qui compte pour les raisons calculées à la section 6.1.

La base de données partagée et comment la maîtriser

Partager une base de données est ce qui rend l’architecture à base de services économique et simple : pas de synchronisation des données entre services, pas de cohérence à terme, des rapports en SQL ordinaire. C’est aussi sa principale faiblesse. Si chaque service lit et écrit les mêmes tables, une modification des colonnes d’une table peut casser plusieurs services, qui doivent alors tous être testés et redéployés ensemble. La définition du chapitre 5 s’applique : des services qui partagent une base de données sont liés en un seul quantum d’architecture, si bien qu’ils partagent un même niveau de disponibilité et un même rythme de publication du schéma.

Les praticiens utilisent trois techniques pour réduire ce couplage. La première est le partitionnement logique : donner à chaque service son propre schéma (ou ensemble de tables) et lui interdire de toucher à ceux des autres, en faisant respecter cette règle par les permissions de la base de données autant que par convention. La deuxième consiste à placer les classes d’entités de la base partagée dans de petites bibliothèques par domaine plutôt que dans une grande bibliothèque partagée, afin qu’une modification des tables des restaurants n’affecte que les services qui les utilisent. La troisième consiste à donner à un service sa propre base de données quand il a une raison forte, comme un périmètre de sécurité, un profil de charge très différent ou un type de stockage de données différent. Les équipes qui appliquent ces techniques de façon systématique constatent qu’un passage ultérieur à des bases de données séparées, s’il devient un jour nécessaire, est bien plus facile.

La plateforme de livraison de repas en cinq services de domaine

La plateforme de livraison de repas en cinq services de domaine à gros grain derrière une couche API ; quatre partagent une base avec un schéma chacun, Paiements a sa propre baseApp clientTablette restoApp livreurPortail opérationsCouche API : reverse proxy ou gateway (routage, authentification, limites de débit)Commandespanier, paiement,état commandeRestaurantscartes,horaires, adhésionLivraisonaffectation, suivilivreursClientscomptes, support,avisPaiementsdébits, rembours.,virementsBase PostgreSQL partagéeorderingrestaurantdeliverycustomerBD Paiementsdistincte,périm. PCI DSSChaque service possède son propre schéma ; seul Paiements a une base distincte
Cinq services à gros grain, chacun confié à une équipe, derrière une couche API ; quatre partagent une base de données avec un schéma chacun, et Paiements garde la sienne.

Exemple commenté

Exemple commenté : la plateforme de livraison de repas en cinq services de domaine

Une entreprise de livraison de repas est passée d’une équipe à cinq, soit environ 35 ingénieurs. Son monolithe Django est bien modularisé, mais les mises en production sont devenues une file d’attente, et une faute dans le suivi des livreurs a fait tomber l’étape de paiement deux fois le trimestre dernier. L’architecte propose une architecture à base de services avec cinq services de domaine, un par module et par équipe existants.

CommandesPanier, paiement, cycle de vie et état des commandes. Propriétaire du schéma ordering. Très sollicité aux heures des repas ; fonctionne avec 6 à 20 instances.
RestaurantsCartes, prix, horaires d’ouverture, inscription des restaurants. Surtout sollicité en lecture ; les cartes sont mises en cache dans la couche API. Fonctionne avec 3 instances.
LivraisonAffectation des livreurs, estimations d’itinéraire, suivi en direct. Reçoit des mises à jour de position toutes les quelques secondes de chaque livreur actif : il est donc mis à l’échelle séparément de tout le reste.
PaiementsAutorisation des cartes via le prestataire de paiement, remboursements, versements aux restaurants et aux livreurs. Possède sa propre base de données, afin que le périmètre de l’évaluation PCI DSS soit un petit service plutôt que toute la plateforme.
ClientsComptes, adresses, tickets de support, avis. Faible charge, mais détient la plupart des données à caractère personnel : les règles d’accès et de conservation y sont donc concentrées.
Déroulement d’un workflowCommander s’exécute à l’intérieur de Commandes dans une seule transaction locale (créer la commande, réserver le créneau du restaurant), puis fait un seul appel à Paiements. Restaurants et Livraison apprennent l’existence de la commande par un message, et non par une chaîne d’appels.
Ce qui est partagéUn seul serveur PostgreSQL avec un schéma par service. Chaque service ne peut lire et écrire que son propre schéma ; quelques vues en lecture seule (les noms des restaurants, par exemple) sont publiées pour les autres.
Ce que cela apporteCinq pipelines de déploiement au lieu d’un ; une faute dans le suivi n’arrête plus l’étape de paiement ; les paiements peuvent être audités séparément ; chaque équipe met en production quand elle est prête.
Ce que cela coûteCinq unités déployables et cinq tableaux de bord au lieu d’un ; des appels réseau entre Commandes et Paiements qui nécessitent délais d’expiration et idempotence ; des changements de schéma toujours coordonnés par l’intermédiaire du serveur de base de données partagé.

Le pas est volontairement modeste. Il fait passer d’un quantum à environ deux (Paiements avec ses propres données, et les quatre services qui partagent la base), et il donne à chaque équipe sa propre mise en production, ce qui était la principale difficulté.

Si le flux de positions de Livraison devient un jour trop important pour la base partagée, ce seul service peut recevoir son propre stockage et être découpé davantage ; les autres peuvent rester tels quels.

L’architecte consigne les règles de frontière sous forme de tests d’architecture : aucun service ne peut interroger le schéma d’un autre, et les services ne peuvent s’appeler entre eux que par des API publiées.

L’architecture orientée services classique

L’architecture orientée services est plus ancienne et plus large. Le terme est entré dans le secteur par un rapport du Gartner de 1996 signé Roy Schulte et Yefim Natis, et à partir du début des années 2000 il est devenu le modèle dominant de l’intégration d’entreprise. Son idée centrale était saine : exposer les capacités métier sous forme de services dotés de contrats explicites et indépendants de la technologie, afin que les applications d’une grande organisation puissent être assemblées à partir d’eux au lieu d’être reconstruites ou intégrées de point à point.

Ce que la plupart des entreprises ont réellement construit, cependant, c’est ce que Richards et Ford appellent la SOA pilotée par l’orchestration. Les services étaient organisés en couches techniques : des services métier décrivant des processus (passer commande, ouvrir un compte), des services d’entreprise partagés fournissant des capacités réutilisables (client, tarification, facture), et des services applicatifs et d’infrastructure enveloppant les systèmes existants et les préoccupations techniques. Au centre se trouvait un bus de services d’entreprise (ESB) : un middleware qui acheminait les messages, les transformait d’un format à un autre, servait d’intermédiaire entre les protocoles et, au moyen d’un moteur d’orchestration, exécutait lui-même les processus métier.

Deux autres idées complétaient le tableau. Un modèle de données canonique définissait une représentation unique, à l’échelle de l’entreprise, de chaque entité métier (un seul Customer, un seul Order), et chaque message était traduit vers ce modèle et depuis ce modèle dans le bus. Et une famille de standards de services web, généralement appelée WS-*, définissait comment les services se décrivaient et s’appelaient : SOAP pour les messages, WSDL pour les descriptions d’interface, UDDI pour les registres, WS-Security, WS-ReliableMessaging et WS-AtomicTransaction pour les qualités, et WS-BPEL (version 2.0 approuvée par OASIS en 2007) pour les définitions de processus exécutables.

La SOA pilotée par l’orchestration

SOA pilotée par l’orchestration : des services métier appellent un bus de services d’entreprise qui orchestre des services d’entreprise partagés, lesquels utilisent des services applicatifs et d’infrastructure, tous parlant un modèle de données canoniqueServices métierCommanderOuvrir comptePayer fourn.Bus de services d’entreprise et moteur d’orchestrationroutage, transformation, orchestration, médiation de protocolesServices entrepriseService ClientService TarifsService FacturesServices applicatifsSystème CRMSystème ERPJournaux, sécuritéChaque message est traduit vers et depuis un modèle de données canonique dans le bus
Dans la SOA classique, le bus portait la logique de routage, de transformation et de processus, et tous les services partageaient un même modèle canonique de l’activité.

Pourquoi la SOA classique est tombée en disgrâce

À la fin des années 2000, beaucoup de programmes SOA avaient déçu. Anne Thomas Manes, du Burton Group, a saisi l’état d’esprit du moment dans un billet très lu de janvier 2009 intitulé SOA is Dead; Long Live Services : l’étiquette était devenue toxique, mais l’idée de services avait survécu. Les raisons méritent d’être connues, car chacune est un piège dans lequel les architectures modernes peuvent retomber.

La réutilisation a créé du couplage. Un service d’entreprise Customer partagé, utilisé par quarante applications, ne pouvait pas changer sans l’accord de quarante consommateurs ; la réutilisation, l’objectif principal, transformait chaque changement en négociation. Le bus est devenu le goulet d’étranglement. Placer la logique de routage, de transformation et de processus dans un ESB central, généralement détenu par une seule équipe d’intégration, signifiait que presque chaque changement métier avait besoin de cette équipe, et le bus est devenu un point unique de défaillance et de retard. Le modèle canonique était trop gros. Une définition unique de Customer qui satisfasse les ventes, la facturation, le support et la logistique est soit énorme, soit inadaptée à la plupart d’entre eux ; les contextes délimités du chapitre 5 expliquent pourquoi un terme peut légitimement signifier des choses différentes dans différentes parties d’une entreprise. Les standards étaient lourds. Les spécifications WS-* étaient complexes, l’outillage coûteux, et les transactions distribuées entre services se sont révélées fragiles. Le partitionnement technique faisait qu’une fonctionnalité simple traversait plusieurs couches de services détenues par des groupes différents.

Les leçons durables sont celles sur lesquelles les microservices ont été bâtis : des contrats de service explicites, des services détenus par ceux qui les construisent, la logique dans les services plutôt que dans le middleware, et des données détenues par un seul service plutôt que partagées dans toute l’entreprise.

En quoi les microservices diffèrent

Les microservices, traités en détail dans la section suivante, conservent l’idée de la SOA de services dotés de contrats explicites et inversent la plupart de ses choix de mise en œuvre. James Lewis et Martin Fowler ont résumé l’un de ces renversements par la formule smart endpoints and dumb pipes (des extrémités intelligentes et des tuyaux simples) : le réseau ne fait que transporter les messages, et toute la logique vit dans les services. Les services s’organisent autour des capacités métier plutôt que de couches techniques, la réutilisation passe délibérément après l’indépendance, chaque service est propriétaire de ses données, et la gouvernance est décentralisée.

Par rapport à l’architecture à base de services, les microservices sont à grain plus fin, bien plus nombreux, et exigent des données séparées. Cela apporte davantage d’indépendance, une mise à l’échelle plus ciblée et une meilleure isolation des pannes, et cela coûte beaucoup plus en exploitation, en cohérence et en coordination. L’architecture à base de services peut être vue comme le point du spectre où arrivent la plupart des avantages liés au déploiement et aux équipes, pour une fraction du coût.

Architecture à base de services, SOA classique et microservices comparées

AspectÀ base de servicesSOA classique (pilotée par l’orchestration)Microservices
Objectif principalModularité pragmatique et déploiement indépendant de quelques domainesRéutilisation de services partagés à l’échelle de l’entrepriseChangement et déploiement indépendants par de nombreuses équipes autonomes
PartitionnementPar domaine : un service par grand domaine d’activitéTechnique : couches métier, entreprise, application et infrastructurePar domaine : un service par contexte délimité, ou plus petit
Nombre typiqueEnviron 4 à 12 par systèmeDes dizaines à des centaines dans une entrepriseDes dizaines à des centaines par système
GranularitéGros grain : tout un domaine, par exemple l’ensemble des commandesVariable ; les services d’entreprise partagés sont souvent à grain finGrain fin à moyen : une capacité cohérente
DonnéesSouvent une base de données partagée, idéalement partitionnée par schémaSystèmes de référence partagés derrière des services d’entrepriseChaque service est propriétaire de ses données ; aucune table partagée
CommunicationSurtout de l’interface utilisateur vers un service ; peu d’appels entre servicesVia le bus de services d’entreprise, généralement en SOAP ou en messagerie XMLHTTP léger, gRPC ou messagerie ; smart endpoints, dumb pipes
Où vit la logiqueDans les services de domaineEn grande partie dans le bus : routage, transformation, orchestrationDans les services ; le réseau ne fait que transporter
TransactionsTransactions ACID locales au sein d’un service de domaineTransactions distribuées tentées (WS-AtomicTransaction, XA)Pas de transactions distribuées ; sagas et cohérence à terme
GouvernanceLégère ; une seule équipe d’architecture suffitCentrale et lourde : modèle canonique, registre de services, comité des standardsDécentralisée ; plateforme partagée et chemins balisés (paved roads)
Coût d’exploitationModéréÉlevé, plus des licences de middleware coûteusesÉlevé : de nombreuses unités déployables, pipelines et tours d’astreinte

Caractéristiques de l’architecture à base de services

CaractéristiqueÉvaluationRaison
DéployabilitéMoyenne à élevéeChaque service de domaine est déployé séparément : une modification des cartes ne redéploie donc pas les paiements ; un changement de schéma partagé nécessite toujours une coordination.
Tolérance aux pannesMoyenne à élevéeUn plantage du service de livraison laisse les commandes et les paiements fonctionner ; une base de données partagée reste un point de défaillance commun.
ScalabilitéMoyenneLes services se mettent à l’échelle séparément, mais chacun est à gros grain, et la base de données partagée limite la mise à l’échelle des écritures.
ÉlasticitéFaible à moyenneLes gros services démarrent lentement et se mettent à l’échelle par grands paliers : les pics soudains sont donc absorbés moins gracieusement qu’avec de petits services.
Cohérence des donnéesÉlevéeLa plupart des workflows métier restent à l’intérieur d’un seul service, où une transaction de base de données ordinaire garde les données cohérentes.
SimplicitéMoyenneBien moins de pièces mobiles que les microservices ; cela reste un système distribué, avec des appels réseau, des pipelines de déploiement et une supervision par service.
Coût globalMoyen (modéré)Une poignée de services et une seule base de données coûtent peu à exploiter comparées à des dizaines de services et de bases de données.
TestabilitéMoyenne à élevéeChaque service a un périmètre plus restreint que le monolithe et peut être testé isolément face à son schéma.
ÉvolutivitéMoyenneLe partitionnement par domaine garde les changements courants à l’intérieur d’un seul service, mais la base de données partagée couple l’évolution des schémas.

Quand l’architecture à base de services est le juste milieu pragmatique

Choisissez-la quand le système compte quelques domaines métier clairs, quand deux à peut-être huit équipes doivent mettre en production indépendamment, quand la plupart des workflows restent naturellement à l’intérieur d’un domaine, et quand une cohérence forte au sein d’un domaine a de la valeur. C’est aussi une excellente étape de migration pour sortir d’un monolithe : découper un monolithe bien modularisé en une poignée de services de domaine est bien moins risqué que de sauter directement à cinquante microservices, et le résultat est souvent assez bon pour s’arrêter là.

Évitez-la, ou prévoyez de la dépasser, quand des parties d’un domaine ont besoin d’une scalabilité ou d’une disponibilité très différentes (elles relèvent de quanta séparés), quand des dizaines d’équipes ont besoin d’autonomie, quand la base de données partagée est devenue le goulet d’étranglement des écritures, ou quand les services de domaine ne cessent de s’appeler entre eux pour traiter des requêtes ordinaires, signe que les frontières sont mal placées.

Vérifiez votre compréhension

Pourquoi la plupart des workflows d’une architecture à base de services peuvent-ils utiliser une transaction de base de données ordinaire ?

Parce que chaque service de domaine couvre tout un domaine d’activité et que le workflow reste généralement à l’intérieur de celui-ci, en ne touchant que des données du schéma propre à ce service, dans une seule base de données.

Qu’est-ce qui a fait du bus de services d’entreprise un goulet d’étranglement dans de nombreux programmes SOA ?

La logique de routage, de transformation et de processus vivait dans le bus, généralement détenu par une seule équipe centrale : la plupart des changements métier avaient donc besoin de cette équipe, et le bus était un point de défaillance partagé.

Citez deux techniques qui réduisent le couplage causé par une base de données partagée.

Donner à chaque service son propre schéma et lui interdire l’accès à ceux des autres (en le faisant respecter par les permissions), et répartir les classes d’entités dans de petites bibliothèques par domaine ; ou encore donner à un service sa propre base de données là où c’est justifié.

Qu’inverse la formule « smart endpoints and dumb pipes » par rapport à la SOA classique ?

Elle sort la logique du middleware (l’ESB) pour la placer dans les services, et laisse au réseau le seul transport des messages.

Suivant · 6.3MicroservicesCe que sont les microservices selon Lewis et Fowler, les contextes délimités, la déployabilité indépendante, la base de données par service, les passerelles et les maillages de services, comment décider de la granularité, les anti-patrons classiques et le prix organisationnel.Continuer →

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 : « Nous avons un monolithe modulaire et quatre équipes. Devons-nous passer à une architecture à base de services ou directement aux microservices, et que faire de la base de données partagée ? »