J'ai passé la semaine dernière à plonger profondément dans les documents Akka et enfin comprendre ce que sont les systèmes d'acteurs et les problèmes qu'ils résolvent.
Ma 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
- À Akka,
SupervisorStrategies
existent pour effectuer une nouvelle tentative, un repli et une escalade. Les acteurs peuvent être configurés pour persister dans pratiquement n'importe quel type de magasin, 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 un cas d'utilisation où une nouvelle application basée sur Akka justifierait également l'introduction d'un nouveau cluster de courtiers JMS / AMQP? 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?
Réponses:
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 transfère le calcul dans les acteurs , qui communiquent à travers des messages qu'ils traitent un à la fois 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'acteurs 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. Enregistrez 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 de 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 fonctionnant 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 contre la messagerie: /programming/5693346/when-to-use-actors-instead-of-messaging-solutions-such-as-websphere-mq- or-tibco
la source