web-dev-qa-db-fra.com

Akka obsolète-t-il les courtiers de messages JMS / AMQP?

J'ai passé la semaine dernière à plonger dans les documents Akka et enfin pour comprendre ce que sont les systèmes d'acteurs et les problèmes qu'ils résolvent.

Mon compréhension (et mon expérience avec) les courtiers de messages JMS/AMQP traditionnels est qu'ils existent pour fournir les éléments suivants:

  • Traitement asynchrone entre producteur et consommateur; et
  • Garantie de livraison des messages, y compris la persistance, les tentatives et les replis

Mais Akka ne fournit-il pas cela, sans toute l'infrastructure et les frais généraux nécessaires?

  • À Akka, toutes les communications des acteurs sont asynchrones et non bloquantes; et
  • Dans Akka, SupervisorStrategies existe pour effectuer une nouvelle tentative, un repli et une escalade. Les acteurs peuvent être configurés pour persister pratiquement dans le type de magasin any, si cela est également une exigence.

Cela me fait donc me demander: si mon application utilise Akka, ai-je un jour besoin de faire intervenir des courtiers JMS/AMQP (par exemple ActiveMQ, RabbitMQ, Kafka)? En d'autres termes, existe-t-il jamais un cas d'utilisation où une nouvelle application basée sur Akka justifierait également l'introduction d'un cluster de courtiers JMS/AMQP nouveau? Pourquoi ou pourquoi pas?

Le seul argument serait que mon application Akka doit peut-être s'intégrer à un autre système. Mais dans ce cas, le module Akka-Camel permet à Akka de puiser dans la liste exhaustive et presque infinie de capacités d'intégration de Camel (TCP, FTP, ZeroMQ, la liste s'allonge encore et encore ...).

Pensées?

21
smeeb

Modèle d'acteur

Le modèle d'acteur est une stratégie informatique pour créer des applications qui gèrent de nombreux calculs simultanés et traitements avec état. Ce n'est pas la seule stratégie mais c'est une approche très bien testée, simple et fiable qui déplace le calcul vers acteurs, qui communiquent par le biais de messages qu'ils traitent un par un et dans l'ordre.

Akka est un framework qui implémente le modèle d'acteur et vous permet de construire des systèmes d'acteur avec toutes les infrastructures et fonctionnalités déjà construites (comme utiliser JQuery au lieu de javascript).

Messagerie

Les systèmes de messagerie sont des applications qui peuvent envoyer et récupérer des messages. Il existe de nombreuses variétés, des files d'attente de base aux logiciels de grande entreprise avec des sujets, pub/sub, persistance et autres fonctionnalités, mais l'objectif final est le même. Sauvegardez quelques octets quelque part et récupérez-les plus tard, avec une sorte de commande. Aujourd'hui, le principal cas d'utilisation est de découpler les systèmes et de permettre un traitement asynchrone à différents horaires ou à différentes vitesses. RabbitMQ, NATS, Kafka, etc. sont tous des exemples de systèmes de messagerie.

Comparaison

Le modèle Actor et le cadre Akka sont des outils de bas niveau qui sont un excellent moyen pour créer des applications, comme les files d'attente de messages.

Pouvez-vous utiliser Akka au lieu d'une file d'attente de messages? Sûr. Si vous créez un logiciel qui utilise déjà le modèle d'acteur, vous n'avez probablement pas besoin d'une file d'attente de messages externe, en particulier pour envoyer des messages dans le même thread ou la même application. Vous pouvez utiliser les capacités d'Akka Remoting pour même envoyer des messages à d'autres systèmes d'acteurs exécutés sur d'autres machines.

Cependant, cela rend-il les systèmes de messagerie obsolètes? Absolument pas. Ce n'est pas parce que vous pouvez coder tout cela vous-même que vous en avez besoin, en particulier lorsqu'un modèle d'acteur n'est pas adapté à votre problème ou que vous avez besoin de différentes langues, applications, API externes, systèmes d'exploitation, bases de données, etc. pour communiquer les uns avec les autres (qu'il s'agisse de systèmes d'acteurs ou non).

Si vous avez juste besoin de passer des messages entre deux systèmes, utilisez une file d'attente de messages. Si vous avez besoin d'un traitement évolutif avec état et d'une messagerie à faible latence dans la même application, utilisez le modèle d'acteur. Ils existent tous les deux à des niveaux complètement différents et la façon dont vous les utilisez dépend de la solution que vous construisez.


Il y a une excellente réponse sur SO à propos de ce même modèle d'acteur vs messagerie: https://stackoverflow.com/questions/5693346/when-to-use-actors-instead-of -messaging-solutions-such-as-websphere-mq-or-tibco

15
Mani Gandham