web-dev-qa-db-fra.com

Kafka Msg VS REST Appels

De nos jours dans le monde des microservices, je vois beaucoup de conception sur mon lieu de travail qui utilise la messagerie kafka lorsque vous pouvez obtenir des résultats similaires en utilisant des appels api de repos entre les microservices. Techniquement, vous pouvez arrêter complètement d'utiliser les appels api de repos et utiliser à la place la messagerie kafka. Je veux vraiment connaître les meilleures pratiques, les avantages et les inconvénients, quand utiliser les appels api entre les microservices, quand utiliser la messagerie kafka .

Mettons un exemple concret:

J'ai un service d'inventaire et un service vendeur. Le service quotidien du fournisseur appelle l'API du fournisseur pour obtenir de nouveaux articles et ceux-ci doivent être déplacés dans le service d'inventaire. Le nombre d'éléments peut aller jusqu'à 10 000 objets.

Pour ce cas d'utilisation, vaut-il mieux:

  1. Après avoir obtenu de nouvelles données de l'API du fournisseur, appelez REST API du service d'inventaire pour stocker les nouveaux articles.

  2. Après avoir obtenu de nouvelles données de l'API du fournisseur, envoyez-les sous forme de message à une rubrique kafka, à utiliser par le service d'inventaire).

Quelle voie choisiriez-vous et quelle est la considération

7
user1955934

L'architecture des microservices préconise des services indépendants et autonomes qui peuvent fonctionner seuls. Permet de comprendre pourquoi nous avons besoin de files d'attente de messages?

le protocole HTTP est synchronisé

Il existe une idée fausse très répandue selon laquelle HTTP est asynchrone. Http est un protocole synchrone mais votre client peut le traiter de manière asynchrone. Par exemple. lorsque vous appelez un service en utilisant http, votre client http planifierait est sur le thread backend (async). Cependant, l'appel http attendra jusqu'à ce que son délai soit expiré ou que la réponse soit de retour, pendant tout ce temps, la chaîne d'appel http attend de manière synchrone. Maintenant, si vous avez des centaines de demandes à la fois, vous pouvez visualiser le nombre d'appels http planifiés de manière synchrone et vous pouvez exécuter des sockets.

AMQP

Dans l'architecture de microservices, nous préférons AMQP (Advance message queue protocol). Ce qui signifie que le service abandonne le message dans la file d'attente et l'oublie. Il s'agit d'un véritable protocole de transport asynchrone, car votre service est terminé une fois qu'il a déposé le message dans la file d'attente et que les services intéressés les choisiront.

Ce type de protocole est préféré car vous pouvez évoluer sans souci même lorsque d'autres services sont en panne car ils obtiendront éventuellement un message/un événement/des données.

Cela dépend donc vraiment de votre cas particulier. HTTP est facile à implémenter mais vous ne pouvez pas bien les faire évoluer. Les services de messagerie s'accompagnent de défis propres comme l'ordre des messages et des travailleurs, mais qui rendent l'architecture évolutive et sont la méthode préférée. Pour l'opération d'écriture, préférez toujours la file d'attente, pour l'opération de lecture, vous pouvez utiliser HTTP mais assurez-vous que vous ne faites pas une longue chaîne où un service en appelle un autre et qui en appelle un autre.

J'espère que cela pourra aider !

0
Imran Arshad

Il existe plusieurs articles qui permettent de comprendre facilement le rôle de Kafka dans Microsercices.

microservices-Apache-kafka-domain-driven-design

axé sur le trajet vers l'événement

construction-d'un-microservices-écosystème-avec-kafka

build-services-backbone-events

Si vous avez besoin d'aide, faites le moi savoir. Heureux de vous aider.

0
Ashish Bhosle