Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 12210|Respuesta: 0

Análisis técnico de selección de middleware en colas de mensajes

[Copiar enlace]
Publicado en 15/12/2016 10:52:40 | | | |
El middleware de mensajes es una tecnología de middleware compuesta por un mecanismo de transmisión de mensajes o modo cola de mensajes, que utiliza un mecanismo de mensajería eficiente y fiable para el intercambio de datos independiente de la plataforma, e integra sistemas distribuidos basados en la comunicación de datos. Actualmente, hay muchos productos MQ en la industria, como RabbitMQ, ActiveMQ, ZeroMQ, etc., que son excelentes middleware de mensajes, pero ¿cuál deberíamos elegir en el proyecto? Este artículo evalúa y compara los siguientes productos de cola de mensajes: RabbitMQ, ZeroMQ, ActiveMQ, MSMQ, Redis y memcacheQ

Digresión: Aquí podemos pensar primero en una pequeña pregunta: "¿Por qué necesitamos servicios de cola de mensajes en aplicaciones web?" ”
Por ejemplo, un gran número de solicitudes de inserción, actualización y otras llegan a MySQL al mismo tiempo, lo que conduce directamente a innumerables bloqueos de fila y tabla, e incluso demasiadas solicitudes al final, lo que desencadena demasiados errores de conexión. Mediante el uso de colas de mensajes, podemos procesar las solicitudes de forma asíncrona, aliviando la carga sobre el sistema.

RabbitMQ
Es una cola de mensajes de código abierto escrita en Erlang, que soporta muchos protocolos: AMQP, XMPP, SMTP, STOMP, lo que la hace muy pesada y más adecuada para el desarrollo a nivel empresarial. Es una implementación líder del protocolo AMQP, que implementa una arquitectura de broker, lo que significa que los mensajes pueden ponerse en cola en un nodo central antes de enviarse al cliente. Hay buen soporte para enrutamiento, balanceo de carga o persistencia de datos. Esta función hace que RabbitMQ sea fácil de usar y desplegar, adecuado para muchos escenarios como enrutamiento, balanceo de carga o persistencia de mensajes, y puede realizarse con solo unas pocas líneas de código mediante colas de mensajes. Sin embargo, esto lo hace menos escalable y más lento porque el nodo central aumenta la latencia y es mayor tras la encapsulación del mensaje. Para configurar RabbitMQ, necesitas instalar el entorno Erlang en la máquina objetivo.
Haz clic para ver esta imagen en una nueva ventana

? MQ(ZeroMQ)
Es conocido como el sistema de cola de mensajes más rápido, especialmente en escenarios de demanda de alto rendimiento de capacidad. Es un sistema de mensajería muy ligero desarrollado específicamente para escenarios de alto rendimiento y baja latencia, y a menudo se encuentra en aplicaciones del mundo financiero. En comparación con RabbitMQ, ZeroMQ soporta muchos escenarios avanzados de mensajes, pero tienes que implementar bloques individuales en el framework de ZeroMQ (como sockets o dispositivos, etc.).

? MQ (ZeroMQ) puede implementar colas avanzadas/complejas en las que RabbitMQ no es bueno, pero los desarrolladores necesitan combinar múltiples marcos técnicos por sí mismos, y la complejidad técnica supone un reto para la aplicación exitosa de este MQ. ZeroMQ tiene un modelo único sin middleware donde no necesitas instalar ni ejecutar un servidor de mensajes o middleware porque tu aplicación cumplirá este papel de servicio. Solo tienes que consultar la biblioteca ZeroMQ, que se puede instalar usando NuGet, y puedes enviar mensajes entre aplicaciones sin problema. Sin embargo, ZeroMQ solo proporciona colas no persistentes, lo que significa que si la máquina se cae, se perderán los datos. Entre ellas, Storm de Twitter utiliza ZeroMQ como transmisión de flujos de datos. ZeroMQ es muy flexible, pero tienes que aprender su manual de 80 páginas (si escribes sobre un sistema distribuido, asegúrate de leerlo).

ZeroMQ no tiene arquitectura de middleware y no requiere ningún proceso de servicio ni ejecuciones. De hecho, el endpoint de tu aplicación cumple este papel de servicio. Esto lo hace muy sencillo de desplegar, pero la preocupación es que no tienes dónde vigilar si algo sale mal. Hasta donde sabemos, ZeroMQ solo ofrece colas no persistentes. Puedes implementar tus propias capacidades de auditoría y recuperación de datos donde las necesites.
Haz clic para ver esta imagen en una nueva ventana

MSMQ
Esto es lo único en el producto de Microsoft que se considera valioso. Si MSMQ puede demostrar que puede manejar este tipo de tarea, elegirán utilizarla. La cuestión es que esto no es complicado, nada más que recibir y enviar; Tiene algunas limitaciones estrictas, como el tamaño máximo de mensaje de 4MB. Sin embargo, puede resolver estos problemas conectándose a algún software como MassTransit o NServiceBus.
Haz clic para ver esta imagen en una nueva ventana

Jafka/Kafka
Kafka (que distribuye mensajes entre diferentes nodos) es un sistema MQ distribuido desarrollado y abierto por LinkedIn en diciembre de 2010, y ahora es un proyecto de incubación de Apache, un sistema de cola de mensajes distribuidos de alto rendimiento entre idiomas para publicar/suscribirse, y Jafka está incubado sobre Kafka, que es una versión mejorada de Kafka. Tiene las siguientes características: persistencia rápida, que puede persistir mensajes bajo la sobrecarga del sistema de O(1); Alto rendimiento, que puede alcanzar una tasa de 10W/s en un servidor ordinario; Sistema completamente distribuido, Broker, Productor y Consumidor soportan nativamente el sistema distribuido y alcanzan automáticamente el equilibrio complejo. Soporta carga paralela de datos Hadoop, que es una solución viable para datos de registro y sistemas de análisis offline como Hadoop, pero con las limitaciones del procesamiento en tiempo real. Kafka unifica el procesamiento de mensajes en línea y fuera de línea mediante el mecanismo de carga paralela de Hadoop, que también es importante para el sistema estudiado en este tema. Apache Kafka es un sistema de mensajería muy ligero en comparación con ActiveMQ y, además de un rendimiento muy bueno, también es un sistema distribuido que funciona bien.
Haz clic para ver esta imagen en una nueva ventana

Apache ActiveMQ
ActiveMQ se sitúa en algún punto intermedio (RabbitMQ y ZeroMQ), similar a ZemoMQ, y puede desplegarse tanto en modos proxy como P2P. Similar a RabbitMQ, es fácil de implementar escenarios avanzados y requiere un bajo consumo.
ActiveMQ es conocido como la columna vertebral del mundo Java. Tiene una larga historia y es ampliamente utilizada. Además, es multiplataforma, proporcionando un punto de acceso natural para la integración de productos que no están en la plataforma de Microsoft. Sin embargo, solo es posible ser considerado si ha pasado por encima del MSMQ. Para configurar ActiveMQ, necesitas instalar el entorno Java en la máquina objetivo.
Haz clic para ver esta imagen en una nueva ventana
Es importante señalar que el producto de próxima generación de ActiveMQ es Apollo, que se basa en el prototipo ActiveMQ y es una herramienta de broker de mensajes más rápida, fiable y fácil de mantener. Apache considera a Apollo el servidor STOMP (Protocolo de Mensajes Orientados a Texto en Streaming) más rápido y robusto.
Las características de Apollo son las siguientes:
Se soportan los protocolos Stomp 1.0 y Stomp 1.1
Temas y colas
Navegador de colas
Suscripciones persistentes de temas
Cola espejo
Mensajería fiable
Caducidad e intercambio de mensajes
Selector de mensajes
Verificado por JAAS
Autorización basada en ACL
Soporte SSL/TLS y validación de certificados
API de gestión REST
Haz clic para ver esta imagen en una nueva ventana

Redis
Es una base de datos NoSQL Clave-Valor, que se desarrolla y mantiene activamente, aunque es un sistema de almacenamiento de bases de datos Clave-Valor, pero soporta funciones MQ, por lo que puede usarse como un servicio de cola ligero. Para las operaciones de incorporación y salida de cola de RabbitMQ y Redis, 1 millón de veces cada uno, y el tiempo de ejecución se registra cada 100.000 veces. Los datos de prueba se dividen en cuatro tamaños diferentes: 128 bytes, 512 bytes, 1K y 10K. Los experimentos muestran que, al unirse al equipo, el rendimiento de Redis es superior al de RabbitMQ cuando la comparación de datos es pequeña, y si el tamaño de los datos supera los 10K, Redis es insoportablemente lento. Al salir del equipo, Redis mostró un rendimiento muy bueno independientemente del tamaño de los datos, mientras que el rendimiento de RabbitMQ fue mucho menor que el de Redis.

MemcacheQ
Cola de mensajes persistentes Memcacheq (MCQ para abreviar) es una cola de mensajes ligera, con características de MemcacheQ:
1 Sencillo y fácil de usar
2 Procesamiento rápido
3 Múltiples colas
4 Buen rendimiento de concurrencia
5 Compatible con el protocolo Memcache. Esto significa que solo tienes que instalar la extensión memcache, no se requieren plugins adicionales.
6 También es cómodo de usar en el framework de Zend.

En definitiva, estos productos:
1. Ambos tienen sus propias APIs de cliente o soportan múltiples lenguajes de programación;
2. Hay mucha documentación;
3. Se proporcionó apoyo positivo.
4. ActiveMQ, RabbitMQ, MSMQ y Redis necesitan iniciar procesos de servicio, que pueden ser monitorizados y configurados, y los demás son problemáticos
5. Todos proporcionan una fiabilidad (consistencia) relativamente buena, escalabilidad y balanceo de carga, y por supuesto, rendimiento

No voy a decir tonterías aquí, adjunto a continuación un conjunto de resultados de pruebas interceptados de Internet. Se muestra el número de mensajes enviados y recibidos por segundo. Todo el proceso generó un total de 1 millón de mensajes de 1.000 mensajes. La prueba se realizó en un equipo independiente con Windows Vista.


Como puedes ver, ZeroMQ no es un nivel como ningún otro. Su rendimiento es sorprendentemente alto. A pesar de ello, este producto no proporciona persistencia de mensajes, no puede almacenar ni monitorizar fácilmente procesos intermedios, y requiere autoauditoría y recuperación de datos, por lo que no es satisfactorio en términos de facilidad de uso y HA. La conclusión es clara: si quieres que una app envíe mensajes lo más rápido posible, eliges ZeroMQ. Es más valioso cuando no te importa demasiado perder ciertos mensajes por casualidad.

El bloguero de este artículo espera (y no espera mucho) usar Rabbit, Rabbitmq tiene incorporado, si formas un clúster, no hay que preocuparse por problemas como el balanceo de carga, y puedes configurar un espejo de cola. Pero este tipo de cosas es que debería haber más pruebas, y acabas con un favorito, y todo lo que he oído y leído sobre Rabbit me hace sentir que debería ser la mejor opción.





Anterior:C#/.NET lee el código fuente de la información hash del torrent torrent
Próximo:Interfaz de Clave Maestra WiFi Consulta de contraseña
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com