Pasé la última semana profundizando en los documentos de Akka y finalmente entiendo qué son los sistemas de actores y los problemas que resuelven.
Mi comprensión (y experiencia con) los corredores de mensajes JMS / AMQP tradicionales es que existen para proporcionar lo siguiente:
- Procesamiento asincrónico entre productor y consumidor; y
- Garantía de entrega de mensajes, incluida persistencia, reintentos y fallos
¿Pero Akka no proporciona esto, sin toda la infraestructura requerida y la sobrecarga operativa?
- En Akka, toda la comunicación del Actor es asíncrona y sin bloqueo; y
- En Akka,
SupervisorStrategies
existe para lograr el reintento, el retroceso y la escalada. Los actores pueden configurarse para persistir en prácticamente cualquier tipo de tienda, si este es un requisito también.
Esto me hace preguntarme: si mi aplicación usa Akka, ¿alguna vez tengo la necesidad de incorporar a los corredores JMS / AMQP (por ejemplo, ActiveMQ, RabbitMQ, Kafka) a la imagen? En otras palabras, ¿hay algún caso de uso en el que una nueva aplicación basada en Akka también garantice la introducción de un nuevo clúster de corredores JMS / AMQP? ¿Por qué o por qué no?
El único argumento sería que quizás mi aplicación Akka tiene que integrarse con otro sistema. Pero en ese caso, el módulo Akka-Camel le permite a Akka aprovechar la lista exhaustiva y casi infinita de capacidades de integración de Camel (TCP, FTP, ZeroMQ, la lista sigue y sigue ...).
Pensamientos?
Respuestas:
Modelo de actor
El modelo de actor es una estrategia informática para construir aplicaciones que manejan gran cantidad de cómputo concurrente y procesamiento con estado. No es la única estrategia, pero es un enfoque muy bien probado, simple y confiable que mueve la computación a los actores , que se comunican a través de mensajes que procesan uno a la vez y en orden.
Akka es un marco que implementa el modelo de actor y le permite construir sistemas de actor con toda la infraestructura y las características ya construidas (como usar JQuery en lugar de javascript).
Mensajería
Los sistemas de mensajes son aplicaciones que pueden enviar y recuperar mensajes. Hay muchas variedades, desde colas básicas hasta software para grandes empresas con temas, pub / sub, persistencia y otras características, pero el objetivo final es el mismo. Guarde algunos bytes en algún lugar y vuelva a recuperarlos más tarde, con algún tipo de orden. El caso de uso principal hoy en día es desacoplar sistemas y permitir el procesamiento asincrónico a diferentes horarios o velocidades. RabbitMQ, NATS, Kafka, etc. son todos ejemplos de sistemas de mensajes.
Comparación
El modelo de actor y el marco de Akka son herramientas de bajo nivel que son una excelente manera de crear aplicaciones , como las colas de mensajes.
¿Puedes usar Akka en lugar de una cola de mensajes? Seguro. Si está creando software que ya utiliza el modelo de actor, entonces probablemente no necesite una cola de mensajes externa, especialmente para enviar mensajes dentro del mismo hilo o aplicación. Puede usar las capacidades de Akka Remoting para incluso enviar mensajes a otros sistemas de actores que se ejecutan en otras máquinas.
Sin embargo, ¿esto hace que los sistemas de mensajería sean obsoletos? Absolutamente no. El hecho de que pueda codificar todo esto usted mismo no significa que lo necesite, especialmente cuando un modelo de actor no es bueno para su problema o si necesita diferentes idiomas, aplicaciones, API externas, sistemas operativos, bases de datos, etc. para comunicarse entre sí (sean o no sistemas de actores).
Si solo necesita pasar algunos mensajes entre dos sistemas, use una cola de mensajes. Si necesita un procesamiento con estado escalable y mensajes de baja latencia dentro de la misma aplicación, utilice el modelo de actor. Ambos existen en niveles completamente diferentes y la forma en que los use depende de la solución que esté creando.
Hay una gran respuesta en SO sobre este mismo modelo de actor frente a mensajería: /programming/5693346/when-to-use-actors-instead-of-messaging-solutions-such-as-websphere-mq- o-tibco
fuente