

# REL04-BP02 Implémenter des dépendances faiblement couplées
<a name="rel_prevent_interaction_failure_loosely_coupled_system"></a>

 Des dépendances telles que des systèmes de file d’attente, des systèmes de streaming, des flux de travail et des équilibreurs de charge sont couplées faiblement. Le couplage faible permet d’isoler le comportement d’un composant des autres composants qui en dépendent, ce qui augmente la résilience et l’agilité. 

 Le découplage des dépendances, telles que les systèmes de file d’attente, les systèmes de streaming et les flux de travail, permet de minimiser l’impact des modifications ou des défaillances sur un système. Cette séparation empêche le comportement d’un composant d’affecter les autres qui en dépendent, améliorant ainsi la résilience et l’agilité. 

 Dans les systèmes couplés fortement, la modification d’un composant peut nécessiter de modifier d’autres composants qui en dépendent, ce qui entraîne une dégradation des performances de tous les composants. Le couplage *faible* rompt cette dépendance de sorte que les composants dépendants n’ont besoin que de connaître l’interface publiée et sa version. La mise en œuvre d’un couplage faible entre les dépendances permet d’isoler une défaillance dans l’une afin de ne pas en impacter une autre. 

 Le couplage faible vous permet de modifier le code ou d’ajouter des fonctionnalités à un composant tout en minimisant les risques pour les autres composants qui en dépendent. Il offre également une résilience granulaire au niveau des composants, ce qui vous permet d’augmenter horizontalement voire de modifier la mise en œuvre sous-jacente de la dépendance. 

 Pour améliorer encore la résilience par un couplage faible, dans la mesure du possible, rendez asynchrones les interactions des composants. Ce modèle convient à toute interaction qui ne nécessite pas une réponse immédiate et pour laquelle une confirmation de l’enregistrement d’une requête suffira. Il implique un composant qui génère des événements et un autre qui les consomme. Les deux composants ne s'intègrent pas par point-to-point interaction directe, mais généralement par le biais d'une couche de stockage durable intermédiaire, telle qu'une SQS file d'attente Amazon, une plateforme de données de streaming telle qu'Amazon Kinesis ou. AWS Step Functions

![\[Diagramme affichant les dépendances telles que des systèmes de file d’attente et des équilibreurs de charge couplés faiblement\]](http://docs.aws.amazon.com/fr_fr/wellarchitected/latest/framework/images/dependency-diagram.png)


 Amazon fait la SQS queue et ce ne AWS Step Functions sont que deux moyens d'ajouter une couche intermédiaire pour un couplage souple. Des architectures axées sur les événements peuvent également être créées à l'aide d' AWS Cloud Amazon EventBridge, qui peut isoler les clients (producteurs d'événements) des services sur lesquels ils comptent (consommateurs d'événements). Amazon Simple Notification Service (AmazonSNS) est une solution efficace lorsque vous avez besoin d'une messagerie push à haut débit. many-to-many À l'aide d'Amazon SNS Topics, les systèmes de vos éditeurs peuvent diffuser les messages vers un grand nombre de points de terminaison d'abonnés pour un traitement parallèle. 

 Bien que les files d’attente offrent plusieurs avantages, dans la plupart des systèmes en temps réel stricts, les requêtes antérieures à un seuil (souvent en secondes) sont considérées comme obsolètes (le client a abandonné et n’attend plus de réponse). En conséquence, elles ne sont pas traitées. De cette façon, les requêtes plus récentes (et probablement toujours valides) peuvent être traitées à la place. 

 **Résultat souhaité :** la mise en œuvre de dépendances faiblement couplées vous permet de minimiser la surface de défaillance au niveau du composant, ce qui permet de diagnostiquer et de résoudre les problèmes. Elle simplifie également les cycles de développement en permettant aux équipes de mettre en œuvre des modifications à un niveau modulaire sans affecter les performances des autres composants qui en dépendent. Avec cette approche, il est possible d’augmenter horizontalement un composant en fonction des besoins en ressources et de l’utilisation de ce composant, ce qui contribue à améliorer la rentabilité. 

 **Anti-modèles courants :** 
+  Déploiement d’une charge de travail monolithique. 
+  Invocation directe APIs entre les niveaux de charge de travail sans possibilité de basculement ou de traitement asynchrone de la demande. 
+  Couplage fort à l’aide de données partagées. Les systèmes couplés faiblement évitent de partager des données par le biais de bases de données partagées ou d’autres formes de stockage de données couplées fortement, qui peuvent réintroduire un couplage fort et entraver la capacité de mise à l’échelle. 
+  Ignorer la contre-pression. Votre charge de travail doit être capable de ralentir ou d’arrêter les données entrantes lorsqu’un composant ne peut pas les traiter au même rythme. 

 **Avantages du respect de cette bonne pratique :** le couplage faible permet d’isoler le comportement d’un composant des autres composants qui en dépendent, ce qui augmente la résilience et l’agilité. La défaillance d’un composant est isolée des autres. 

 **Niveau d’exposition au risque si cette bonne pratique n’est pas respectée :** élevé 

## Directives d’implémentation
<a name="implementation-guidance"></a>

 Implémentez des dépendances couplées faiblement. Différentes solutions permettent de créer des applications couplées faiblement. Il s'agit notamment de services permettant de mettre en œuvre des files d'attente entièrement gérées, des flux de travail automatisés, de réaction aux événements, etc., qui peuvent aider à isoler le comportement des composants par rapport aux autres composants, augmentant ainsi la résilience et l'agilité. APIs 
+  **Créez des architectures pilotées par les événements : [Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)** vous EventBridge aide à créer des architectures pilotées par les événements faiblement couplées et distribuées. 
+  **Implémenter des files d'attente dans les systèmes distribués :** vous pouvez utiliser [Amazon Simple Queue Service (AmazonSQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) pour intégrer et découpler les systèmes distribués. 
+  **Conteneuriser les composants sous forme de microservices :** les [microservices](https://aws.amazon.com/microservices/) permettent aux équipes de créer des applications composées de petits composants indépendants qui communiquent via des canaux bien définis. APIs [Amazon Elastic Container Service (AmazonECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) et [Amazon Elastic Kubernetes Service (EKSAmazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)) peuvent vous aider à démarrer plus rapidement avec les conteneurs. 
+  **Gérez les flux de travail avec Step Functions :** [Step Functions](https://aws.amazon.com/step-functions/getting-started/) vous aide à coordonner plusieurs AWS services dans des flux de travail flexibles. 
+  **Tirez parti des architectures de messagerie publish-subscribe (pub/sub) : Amazon** [Simple Notification Service (AmazonSNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) assure la transmission des messages des éditeurs aux abonnés (également appelés producteurs et consommateurs). 

### Étapes d’implémentation
<a name="implementation-steps"></a>
+  Les composants d’une architecture basée sur les événements sont initiés par des événements. Les événements sont des actions qui se produisent dans un système (par exemple, un utilisateur ajoute un article à un panier). Lorsque l’action aboutit, un événement est généré et active le composant suivant du système. 
  + [Création d'applications basées sur les événements avec Amazon EventBridge](https://aws.amazon.com/blogs/compute/building-an-event-driven-application-with-amazon-eventbridge/)
  + [AWS re:Invent 2022 - Conception d'intégrations pilotées par des événements à l'aide d'Amazon EventBridge](https://www.youtube.com/watch?v=W3Rh70jG-LM)
+  Les systèmes de messagerie distribuée comportent trois parties principales qui doivent être mises en œuvre pour une architecture basée sur des files d’attente. Ils incluent les composants du système distribué, la file d'attente utilisée pour le découplage (distribuée sur les SQS serveurs Amazon) et les messages de la file d'attente. Dans un système classique, les producteurs envoient le message dans la file d’attente et le consommateur reçoit le message de la file d’attente. La file d'attente stocke les messages sur plusieurs SQS serveurs Amazon à des fins de redondance. 
  + [SQSArchitecture Amazon de base](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-basic-architecture.html)
  + [ Envoyer des messages entre des applications distribuées avec Amazon Simple Queue Service ](https://aws.amazon.com/getting-started/hands-on/send-messages-distributed-applications/)
+  Lorsqu’ils sont bien utilisés, les microservices améliorent la maintenabilité et la capacité de mise à l’échelle, car les composants couplés faiblement sont gérés par des équipes indépendantes. Ils permettent également d’isoler les comportements d’un composant en cas de changement. 
  + [Implémentation de microservices sur AWS](https://docs.aws.amazon.com/whitepapers/latest/microservices-on-aws/microservices-on-aws.html)
  + [ Let’s Architect\$1 Architecting microservices with containers ](https://aws.amazon.com/blogs/architecture/lets-architect-architecting-microservices-with-containers/)
+  AWS Step Functions Vous pouvez notamment créer des applications distribuées, automatiser des processus, orchestrer des microservices. L’orchestration de plusieurs composants dans un flux de travail automatisé vous permet de découpler des dépendances dans votre application. 
  + [Créez un flux de travail sans serveur avec et AWS Step FunctionsAWS Lambda](https://aws.amazon.com/tutorials/create-a-serverless-workflow-step-functions-lambda/)
  + [Commencer avec AWS Step Functions](https://aws.amazon.com/step-functions/getting-started/)

## Ressources
<a name="resources"></a>

 **Documents connexes :** 
+  [Amazon EC2 : garantir l'impuissance](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html) 
+  [L’Amazon Builders’ Library : défis liés aux systèmes distribués](https://aws.amazon.com/builders-library/challenges-with-distributed-systems/) 
+  [L’Amazon Builders’ Library : fiabilité, travail constant et une bonne tasse de café](https://aws.amazon.com/builders-library/reliability-and-constant-work/) 
+  [Qu'est-ce qu'Amazon EventBridge ?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) 
+  [Qu’est-ce qu’Amazon Simple Queue Service ?](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) 
+ [ Rompre avec votre monolithe ](https://pages.awscloud.com/break-up-your-monolith.html)
+ [Orchestrez des microservices basés sur des files d'attente avec Amazon et Amazon AWS Step Functions SQS](https://aws.amazon.com/tutorials/orchestrate-microservices-with-message-queues-on-step-functions/)
+ [SQSArchitecture Amazon de base](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-basic-architecture.html)
+ [ Architecture basée sur des files d’attente ](https://docs.aws.amazon.com/wellarchitected/latest/high-performance-computing-lens/queue-based-architecture.html)

 **Vidéos connexes :** 
+  [AWS Sommet de New York 2019 : introduction aux architectures événementielles et à Amazon EventBridge (05) MAD2](https://youtu.be/tvELVa9D9qU) 
+  [AWS re:Invent 2018 : Boucles serrées et ouverture d'esprit : comment prendre le contrôle des systèmes, grands et petits ARC337 (y compris le couplage lâche, le travail constant, la stabilité statique)](https://youtu.be/O8xLxNje30M) 
+  [AWS re:Invent 2019 : Passage à des architectures pilotées par les événements (08) SVS3](https://youtu.be/h46IquqjF3E) 
+ [AWS re:Invent 2019 : applications évolutives pilotées par des événements sans serveur utilisant Amazon et Lambda SQS](https://www.youtube.com/watch?v=2rikdPIFc_Q)
+ [AWS re:Invent 2022 - Conception d'intégrations pilotées par des événements à l'aide d'Amazon EventBridge](https://www.youtube.com/watch?v=W3Rh70jG-LM)
+ [AWS re:Invent 2017 : Elastic Load Balancing : analyse approfondie et meilleures pratiques](https://www.youtube.com/watch?v=9TwkMMogojY)