Communication asynchrone - AWS Directives prescriptives

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Communication asynchrone

À l'inverse, dans une communication asynchrone, le client envoie une demande à un service mais ne reçoit pas de réponse immédiate. Dans ce cas, le client ne reçoit généralement qu'un accusé de réception indiquant que la demande a été acceptée.

Les avantages de la communication asynchrone incluent :

  • Support d'architecture piloté par les événements : parfaitement adapté aux modèles de recherche d'événements et de ségrégation des responsabilités des requêtes de commande (CQRS).

  • Meilleure gestion des ressources — Capacité des services à traiter les demandes en fonction de leurs capacités.

  • Isolation améliorée des défaillances : découplage des services, afin d'éviter les défaillances en cascade.

  • Gestion des pics de charge — Meilleure gestion des pics de trafic grâce à la mise en file d'attente des messages.

Les inconvénients incluent la complexité. Par exemple :

  • Si le client a besoin du résultat de l'opération asynchrone, la mise en œuvre d'un mécanisme pour récupérer ou recevoir ce résultat nécessite plus d'efforts.

  • Il peut s'avérer plus difficile de résoudre les problèmes liés aux opérations asynchrones, car le dépannage nécessite l'examen des journaux de plusieurs systèmes.

  • Il peut être plus difficile de tester des opérations asynchrones, car les tests nécessitent une coordination entre plusieurs systèmes et services.

Les approches de communication asynchrone incluent le fire and forget, la vérification des réclamations, le rappel et la communication bidirectionnelle.

Tirez et oubliez

Dans le schéma « fire and forget », un client envoie une demande au serveur et reçoit de manière synchrone un accusé de réception indiquant que le serveur a reçu le message et qu'il va le traiter. Cependant, le traitement proprement dit n'a pas encore eu lieu et le client ne sait pas quand ni comment il sera effectué. Le schéma suivant illustre ce schéma.

Le schéma « fire and forget » dans les communications asynchrones.

Dans ce cas, le service ne doit pas envoyer d'accusé de réception tant que l'objet n'est pas conservé de manière durable. Cette persistance peut être implémentée sous la forme d'une opération d'écriture dans une base de données ou en plaçant un élément dans une file d'attente.

Considérations supplémentaires :

  • Implémentez l'idempotencie pour gérer les messages dupliqués. En d'autres termes, chaque message ne doit être traité qu'une seule fois.

  • Envisagez les files d'attente contenant des lettres mortes en cas d'échec du traitement.

  • Surveillez les taux de réussite du traitement des messages.

Vérification des réclamations

Si un client a besoin du résultat d'un appel de service, vous pouvez créer le service pour émettre un chèque de réclamation lorsqu'il reçoit une demande. Le schéma suivant illustre ce schéma. La vérification des réclamations est implémentée sous la forme d'un identifiant que le service renvoie dans son accusé de réception. Le client peut utiliser cet identifiant ultérieurement pour vérifier l'état de la demande et pour récupérer le résultat lorsque la demande est terminée.

Le modèle de vérification des réclamations dans les communications asynchrones.

Les clients doivent mettre en place un mécanisme de sondage pour obtenir les résultats. Cela peut être automatisé (par exemple, un contrôle peut être effectué toutes les n minutes) ou mis en œuvre manuellement, lorsque le contrôle est effectué en réponse à un autre événement ou à une autre action de l'utilisateur. Les services qui mettent en œuvre le modèle de vérification des réclamations doivent indiquer clairement la durée de validité d'une vérification des réclamations.

Bonnes pratiques :

  • Implémentez un ralentissement exponentiel pour les sondages.

  • Définissez une durée de vie appropriée (TTL) pour les vérifications de sinistres.

  • Fournissez des points de terminaison de statut pour le suivi des progrès.

Rappel

Dans le modèle de rappel, un client envoie une demande à un service et fournit un emplacement à contacter par le service une fois le traitement terminé. Le client n'attend pas de résultat et le traitement se poursuit. Le service est chargé de contacter le site une fois le traitement terminé et de fournir le résultat. Les types courants d'emplacements pour les réponses sont le REST APIs ou les files d'attente. Le schéma suivant illustre le modèle de rappel.

Le modèle de rappel dans les communications asynchrones.

Mise en œuvre :

  • Implémentez des mécanismes de nouvelle tentative en cas d'échec des rappels.

  • Sécurisez l'emplacement du rappel comme vous le feriez pour les autres services.

  • Gérez les délais de rappel.

Communication bidirectionnelle

Pour implémenter la communication bidirectionnelle, vous devez créer une connexion dynamique entre un client et un service, qui permet à la fois au client et au service d'envoyer et de traiter des messages. Le diagramme suivant en est l’illustration. Bien que la communication soit asynchrone, le service doit être capable de prendre en charge une connexion ouverte pour chaque client.

Modèle de communication bidirectionnel dans les communications asynchrones.

Considérations relatives à l'implémentation :

  • Ordre des messages

    • Numéros de séquence

    • Stratégies de partition

    • Ordre des messages

  • Gestion des états

    • Modèles d'approvisionnement pour les événements

    • Réconciliation entre États

    • Modèles de cohérence

  • Gestion des erreurs

  • Surveillance et observabilité

    • Corrélation IDs

    • Suivi des messages

    • Métriques de performances

    • Indicateurs de santé du système