Capítulo práctico de RocketMQ: análisis del concepto de RocketMQ

Autor: Zen y el arte de la programación informática

1. Introducción

Con el rápido desarrollo de Internet y el continuo desarrollo de los negocios, cada vez más personas están comenzando a utilizar tecnologías emergentes como la computación en la nube, big data y la inteligencia artificial para resolver problemas prácticos. Estas tecnologías están remodelando la arquitectura de TI empresarial, incluida la estructura organizacional, los roles del personal, los procesos de desarrollo, las especificaciones de prueba, etc. Bajo este cambio, el sistema de mensajería distribuida se ha convertido en un componente necesario para construir un sistema de aplicaciones robusto, de alta disponibilidad, escalable y de baja latencia.

Apache RocketMQ es un producto de middleware de mensajería distribuida aportado por una reconocida comunidad nacional de código abierto, que se centra en el rendimiento, el alto rendimiento y la alta disponibilidad desde el principio de su diseño. Las ventajas de RocketMQ se reflejan principalmente en los siguientes aspectos:

  1. Tiempo de arranque rápido

    Apache RocketMQ utiliza el "modelo de cola" como mecanismo de comunicación principal. En pocas palabras, el remitente envía el mensaje a una cola y el receptor lee el mensaje de la cola y lo consume. Debido a su modelo de cola, RocketMQ comienza muy rápido y puede completarse en casi segundos.

  2. Almacenamiento de archivos pequeños

    RocketMQ admite el almacenamiento de mensajes en múltiples servidores mediante fragmentación, logrando así el almacenamiento de archivos pequeños y reduciendo la presión sobre el disco IO. Esta arquitectura puede evitar eficazmente las limitaciones de capacidad de disco de una sola máquina.

  3. Estrategias de enrutamiento de mensajes enriquecidos

    RocketMQ proporciona una gran cantidad de estrategias de enrutamiento de mensajes, que incluyen transmisión, agrupación en clústeres, etiquetas (las etiquetas son subconjuntos de un tema), unidifusión, etc., que pueden satisfacer las necesidades de distribución de mensajes en diferentes escenarios.

  4. Alta disponibilidad

    Apache RocketMQ proporciona un modo de implementación de clúster desde el comienzo de su diseño, admite sincronización activa y en espera, garantiza que los mensajes no se pierdan y aún puede proporcionar servicios cuando falla el clúster.

  5. Rastreo de mensajes

    Apache RocketMQ puede utilizar la función de seguimiento de mensajes para ayudar a los usuarios a reprocesar mensajes en los que se han producido errores según determinadas reglas comerciales. Por ejemplo, un productor no ha podido trabajar normalmente, pero los mensajes que envió no han sido consumidos normalmente por los consumidores. En este momento, puede utilizar la función de rastreo de mensajes para localizar el mensaje fallido y volver a intentarlo o compensarlo.

Esta serie de artículos primero profundizará en los conceptos y la arquitectura relacionados con RocketMQ, y luego se basará en ejemplos oficiales y casos reales, para que los lectores puedan tener una comprensión más profunda de RocketMQ y mejorar la eficiencia del trabajo y la estabilidad del sistema.

2. Explicación de conceptos y términos básicos

2.1 Cola de mensajes

2.1.1 Definición del concepto

Message Queue, una cola de mensajes, es una tabla lineal que se utiliza para almacenar o transmitir mensajes. Solo permite agregar elementos en la parte trasera y eliminar elementos en la parte delantera. El principio de primero en entrar, primero en salir significa que los mensajes entran primero en la cola y luego se transmiten en orden. Tiene las siguientes características:

  1. Comunicación asincrónica: el remitente de la información solo coloca el mensaje en la cola, independientemente de si la otra parte recibe o procesa el mensaje, y la otra parte no sabe que ha recibido el mensaje. El destinatario de la información debe seguir preguntando si hay información nueva.

  2. Reducción de picos y llenado de valles: la cola de mensajes puede manejar una gran cantidad de solicitudes de acceso en un instante en el servidor de aplicaciones. El servidor no fallará debido a un aumento repentino en el tráfico, ni el uso de memoria o CPU será excesivo debido a una acumulación excesiva. de tareas. Por lo tanto, puede manejar solicitudes durante ráfagas de tráfico a corto plazo y puede equilibrar mejor la carga de cada nodo.

  3. Acoplamiento flojo: las colas de mensajes reducen el acoplamiento entre aplicaciones. Las aplicaciones pueden ejecutarse de forma independiente sin la cooperación de otras aplicaciones.

  4. Consistencia secuencial: para tipos específicos de mensajes, la cola de mensajes garantiza una secuencia estricta y puede implementar fácilmente algunos tipos especiales de aplicaciones. Por ejemplo, lograr coherencia en las órdenes en sistemas comerciales complejos.

En general, la cola de mensajes es una forma de comunicación entre aplicaciones, que se utiliza para coordinar la comunicación asincrónica en sistemas distribuidos.

2.1.2 Patrón iniciador/receptor

Las colas de mensajes se dividen en dos modos: publicación/suscripción y punto a punto.

Modelo de publicación/suscripción: los mensajes enviados por el editor pueden ser consumidos por varios suscriptores; los suscriptores pueden suscribirse a uno o más temas. Su característica es que no existe una relación directa entre editores y suscriptores, lo que permite que existan formas de uno a muchos o de muchos a muchos.

Modo punto a punto: Cada mensaje tiene un solo remitente y un receptor. Este modo es más adecuado para escenarios de aplicaciones que requieren un control preciso de las tasas de envío y recepción, como las aplicaciones controladas por eventos.

2.2 Modelo Productor/Consumidor

El modelo productor/consumidor, también conocido como comunicación uno a muchos o muchos a muchos, significa que varios productores (Productores) envían el mismo flujo de datos a la cola de mensajes, pero solo algunos de los consumidores (Consumidores) lo consumen. ). , con el fin de ahorrar recursos o acelerar el procesamiento. La idea básica es aumentar la capacidad de consumo y la concurrencia mediante la introducción de un grupo de subprocesos de "consumidor" dedicado para asignar diferentes tareas a diferentes consumidores.

Los mensajes enviados por los productores se organizan por orden de llegada en la cola de mensajes, esperando que los consumidores los consuman. Los consumidores consumen mensajes mediante encuestas, es decir, sacan un mensaje para consumirlo a intervalos regulares. Si no hay ningún mensaje disponible, el hilo se suspende hasta que llega un mensaje. Por lo tanto, en la mayoría de los casos, la tasa de consumo del consumidor es mucho mayor que la tasa de envío del productor.

2.3 Mensaje

Un mensaje es una entidad que transporta datos. Las propiedades del mensaje generalmente incluyen:

  1. ID de mensaje: un número que identifica de forma única un mensaje.

  2. Cuerpo del mensaje: el contenido del mensaje, que puede ser cualquier tipo de datos.

  3. Atributos del mensaje: se puede adjuntar información de atributos adicional para facilitar el procesamiento posterior.

  4. Etiqueta de mensaje: puede agregar una etiqueta al mensaje para facilitar la clasificación y recuperación del mensaje.

2.4 Tema

Un tema es un concepto lógico de cola de mensajes y se utiliza para transportar varios mensajes. Los mensajes se clasifican en unidades de temas y tanto los productores como los consumidores pueden enviar y recibir mensajes sobre temas específicos. Cuando un consumidor necesita procesar un tipo específico de mensaje, solo necesita suscribirse al tema para lograr el efecto de filtrado de mensajes.

2.5 Clúster

Un clúster es la forma de implementación física de una cola de mensajes y consta de varios servidores para proporcionar las funciones de almacenamiento, transmisión y procesamiento requeridas por la cola de mensajes. El clúster se puede configurar en modo activo y en espera: el nodo activo es responsable de escribir y consumir mensajes, y el nodo en espera es responsable de la copia de seguridad redundante.

2.6 Corredor

Broker es un software de servidor de cola de mensajes que sirve como capa de proxy de almacenamiento de la cola de mensajes. El servidor Broker proporciona servicios de almacenamiento de mensajes a los consumidores y servicios de entrega de mensajes a los productores. Generalmente, los proveedores de servicios de cola de mensajes proporcionarán uno o más servidores Broker y los usuarios pueden interactuar con los servidores Broker a través de API.

2.7 Servidor de nombres

NameServer es el servicio de nombres de RocketMQ y se utiliza para almacenar información de temas y grupos para proporcionar consultas de información de enrutamiento. Cuando un productor o consumidor comienza, debe iniciar una solicitud de registro a Namesrv, Namesrv administra el tema y el grupo correspondientes y devuelve la información de enrutamiento correspondiente.

2.8 Productor

El productor es el proceso de aplicación del cliente que envía mensajes a la cola de mensajes. El productor envía mensajes al servidor Broker de la cola de mensajes a través de la política de enrutamiento especificada. RocketMQ proporciona tres interfaces de envío de mensajes: síncrona, asíncrona y unidireccional.

  • Interfaz síncrona (Productor de sincronización): cuando se llama al método de envío, el hilo actual espera la respuesta del intermediario sincrónicamente hasta que el mensaje se envía correctamente o se agota el tiempo de espera, y luego continúa hacia abajo.

  • Interfaz asincrónica (Productor asíncrono): se crea un productor no persistente de forma predeterminada. La llamada al método de envío regresa inmediatamente. El productor utiliza el marco netty para escribir registros de forma asincrónica.

  • Interfaz unidireccional (Oneway Producer): no espera la respuesta del corredor, el productor regresa inmediatamente después de enviar el mensaje, es adecuada para escenarios de aplicaciones que no prestan atención al resultado del envío del mensaje.

2.9 Consumidor (Suscriptor)

El consumidor es el proceso de aplicación del cliente que obtiene mensajes de la cola de mensajes. RocketMQ proporciona cuatro interfaces de recepción de mensajes, a saber, push, pull, sondeo largo y consumo por lotes (transacciones).

  • Interfaz pull (Pull Consumer): el modo pull se adopta de forma predeterminada, el modo pull se utiliza para solicitar mensajes del corredor y solo se devuelven los mensajes de interés.

  • Interfaz Push (Push Consumer): el intermediario envía el mensaje al lado del consumidor, y el lado del consumidor no extrae el mensaje en sí.

  • Consumidor de sondeo largo: el consumidor registra una conexión larga con el corredor, el corredor permanece inactivo hasta que llega el mensaje y luego el corredor lo envía activamente al consumidor.

  • Interfaz por lotes (mensaje transaccional): se pueden consumir varios mensajes completamente a la vez a través de mensajes transaccionales. Después de habilitar los mensajes de transacción, si el servidor no encuentra condiciones anormales bajo el radio de transacción, el consumidor puede consumir todos los mensajes correctamente; de ​​lo contrario, el radio de transacción se puede ajustar en función de los comentarios para continuar consumiendo.

2.10 Nombresrv

Namesrv es el servidor de nombres de RocketMQ y proporciona funcionalidad de descubrimiento de servicios. Guarda toda la información de temas y grupos utilizada por RocketMQ, monitorea las solicitudes de acceso de los clientes y devuelve la información de enrutamiento correspondiente. RocketMQ necesita iniciar el servidor de nombres para funcionar correctamente.

Supongo que te gusta

Origin blog.csdn.net/universsky2015/article/details/133565640
Recomendado
Clasificación