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
- L’architecture à base de services (ainsi nommée par Richards et Ford) découpe un système en quelques services de domaine à gros grain déployés séparément, généralement de 4 à 12, qui partagent le plus souvent une même base de données et se trouvent souvent derrière une couche API.
- Comme la plupart des workflows restent à l’intérieur d’un seul service de domaine, ils peuvent utiliser des transactions ACID locales, et les services s’appellent rarement entre eux, ce qui garde les chaînes synchrones courtes.
- Une base de données partagée couple les changements de schéma et lie les services en un seul quantum ; des schémas par service, de petites bibliothèques d’entités par domaine et des bases de données séparées là où c’est justifié réduisent ce couplage.
- La SOA classique pilotée par l’orchestration organisait les services en couches techniques autour d’un bus de services d’entreprise, avec un modèle de données canonique et les standards WS-*, en visant la réutilisation à l’échelle de l’entreprise.
- La SOA a déçu parce que la réutilisation a créé du couplage, que le bus est devenu un goulet d’étranglement détenu par une seule équipe, que les modèles canoniques ne convenaient à personne et que les standards étaient lourds.
- Les microservices conservent des contrats de service explicites mais placent la logique dans les services (smart endpoints, dumb pipes), s’organisent par capacité métier et donnent à chaque service ses propres données.
- L’architecture à base de services est un juste milieu pragmatique pour quelques domaines et quelques équipes, et une étape peu risquée pour sortir d’un monolithe.
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
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.
| Commandes | Panier, 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. |
|---|---|
| Restaurants | Cartes, 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. |
| Livraison | Affectation 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. |
| Paiements | Autorisation 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. |
| Clients | Comptes, 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 workflow | Commander 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 apporte | Cinq 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ûte | Cinq 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
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 services | SOA classique (pilotée par l’orchestration) | Microservices |
|---|---|---|---|
| Objectif principal | Modularité pragmatique et déploiement indépendant de quelques domaines | Réutilisation de services partagés à l’échelle de l’entreprise | Changement et déploiement indépendants par de nombreuses équipes autonomes |
| Partitionnement | Par domaine : un service par grand domaine d’activité | Technique : couches métier, entreprise, application et infrastructure | Par domaine : un service par contexte délimité, ou plus petit |
| Nombre typique | Environ 4 à 12 par système | Des dizaines à des centaines dans une entreprise | Des dizaines à des centaines par système |
| Granularité | Gros grain : tout un domaine, par exemple l’ensemble des commandes | Variable ; les services d’entreprise partagés sont souvent à grain fin | Grain fin à moyen : une capacité cohérente |
| Données | Souvent une base de données partagée, idéalement partitionnée par schéma | Systèmes de référence partagés derrière des services d’entreprise | Chaque service est propriétaire de ses données ; aucune table partagée |
| Communication | Surtout de l’interface utilisateur vers un service ; peu d’appels entre services | Via le bus de services d’entreprise, généralement en SOAP ou en messagerie XML | HTTP léger, gRPC ou messagerie ; smart endpoints, dumb pipes |
| Où vit la logique | Dans les services de domaine | En grande partie dans le bus : routage, transformation, orchestration | Dans les services ; le réseau ne fait que transporter |
| Transactions | Transactions ACID locales au sein d’un service de domaine | Transactions distribuées tentées (WS-AtomicTransaction, XA) | Pas de transactions distribuées ; sagas et cohérence à terme |
| Gouvernance | Légère ; une seule équipe d’architecture suffit | Centrale et lourde : modèle canonique, registre de services, comité des standards | Décentralisée ; plateforme partagée et chemins balisés (paved roads) |
| Coût d’exploitation | Modé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 | Évaluation | Raison |
|---|---|---|
| Déployabilité | Moyenne à élevée | Chaque 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 pannes | Moyenne à élevée | Un 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é | Moyenne | Les 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 à moyenne | Les 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ée | La 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é | Moyenne | Bien 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 global | Moyen (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ée | Chaque service a un périmètre plus restreint que le monolithe et peut être testé isolément face à son schéma. |
| Évolutivité | Moyenne | Le 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.
Sources et lectures complémentaires
- James Lewis and Martin Fowler: Microservices (2014), on smart endpoints and dumb pipes
- OASIS: Reference Model for Service Oriented Architecture 1.0
- W3C: Web Services Architecture (Working Group Note)
- OASIS: Web Services Business Process Execution Language Version 2.0
- Enterprise Integration Patterns: messaging patterns catalogue
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 ? »