Compartir tecnología

Día 17 de 100 días de construcción de las bases: introducción a Message Queuing

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Día 17 de 100 días de construcción de las bases: introducción a Message Queuing

conceptos básicos

¿Qué es una cola de mensajes?

MQ: Cola de mensajes

Una cola que almacena mensajes. Cuando se consumen mensajes, se consumen en orden (cola primero en entrar, primero en salir).

Las dos partes involucradas en la mensajería se llaman productor yconsumidor , el productor es responsable de enviar mensajes y el consumidor es responsable de procesar mensajes.

¿Para qué sirve la cola de mensajes?

Tres beneficios familiares

  • Procesamiento asincrónico: el procesamiento asincrónico se implementa a través de la cola de mensajes. Después de enviar el mensaje correspondiente a la cola de mensajes, el resultado se devuelve inmediatamente, lo que reduce el tiempo de respuesta y mejora la experiencia del usuario. Posteriormente, el sistema consume el mensaje.
  • Recorte de picos/limitación de corriente: primero almacene los mensajes de transacciones generados por alta concurrencia en un corto período de tiempo en la cola de mensajes, y luego el servicio back-end consumirá lentamente estos mensajes de acuerdo con sus propias capacidades, evitando así derrotar directamente al back-end. -finalizar el servicio.
  • Reducir el acoplamiento del sistema: no hay llamadas directas entre módulos, por lo que agregar o modificar módulos tendrá menos impacto en otros módulos.

Escenarios de aplicaciones empresariales

  • Implementar transacciones distribuidas: una de las soluciones para transacciones distribuidas son las transacciones MQ, que son compatibles con la mayoría de las MQ.Las transacciones permiten que las aplicaciones de transmisión de eventosconsumir, procesar, producirTodo el proceso del mensaje se define como una operación atómica.
  • Garantía de secuencia: adecuada para escenarios que tienen requisitos estrictos en el orden de los datos, compatible con la mayoría de MQ.
  • Procesamiento de retraso/temporización: el mensaje no se consumirá inmediatamente después de su envío, sino que se consumirá después de un tiempo específico.
  • Procesamiento de flujo de datos: para los flujos de datos masivos generados por sistemas distribuidos, como registros comerciales, datos de monitoreo, comportamientos de los usuarios, etc., la cola de mensajes puede recopilar estos datos en tiempo real o en lotes e importarlos al motor de procesamiento de big data para lograr un procesamiento eficiente de datos Gestión y procesamiento de flujos.

¿Qué problemas trae el uso de colas de mensajes?

Disponibilidad reducida del sistema: La disponibilidad del sistema se reduce hasta cierto punto. ¿Por qué dices esto? Antes de unirse a MQ, no tiene que pensar en la pérdida de mensajes o en que MQ cuelgue, etc. Sin embargo, después de presentar MQ, ¡debe pensar en ello!

Mayor complejidad del sistema: Después de unirse a MQ, debe asegurarse de que los mensajes no se consuman repetidamente, manejar la pérdida de mensajes, garantizar el orden de entrega de los mensajes y otros problemas.

Problemas de coherencia: Mencioné anteriormente que la cola de mensajes puede lograr una implementación asincrónica, y la asincronía generada por la cola de mensajes puede mejorar la velocidad de respuesta del sistema. Pero, ¿qué pasa si el verdadero consumidor del mensaje no lo consume correctamente? ¡Esto provocará inconsistencia en los datos!

Colas de mensajes comunes

Kafka

Kafka es una versión de código abierto de LinkedInPlataforma de transmisión distribuidaSe ha convertido en un proyecto de alto nivel de Apache. Se utilizó para procesar registros masivos en los primeros días y luego se convirtió gradualmente en una cola de mensajes de alto rendimiento con todas las funciones.

Una plataforma de streaming tiene tres funciones clave:

  1. cola de mensajes: Publicar y suscribirse a flujos de mensajes. Esta función es similar a una cola de mensajes, razón por la cual Kafka también se clasifica como una cola de mensajes.
  2. Almacenamiento persistente tolerante a fallos de flujos de mensajes de registro: Kafka persistirá los mensajes en el disco, evitando eficazmente el riesgo de pérdida de mensajes.
  3. Plataforma de procesamiento de streaming: Para procesar mensajes cuando se publican, Kafka proporciona una biblioteca completa de procesamiento de flujo.

Cohete MQ

RocketMQ es una plataforma de procesamiento de datos en tiempo real de "mensajes, eventos y transmisiones" nativa de la nube de código abierto de Alibaba. Se basa en Kafka y se ha convertido en un proyecto Apache de alto nivel.

Características principales de RocketMQ (extraídas del sitio web oficial de RocketMQ):

  • Nativo de la nube: nacido con la nube, creciendo con la nube, escalamiento elástico ilimitado, compatible con K8
  • Alto rendimiento: rendimiento de nivel de billones garantizado, que cumple con escenarios de microservicios y big data.
  • Procesamiento de flujo: proporciona un motor de procesamiento de flujo liviano, altamente escalable, de alto rendimiento y rico en funciones.
  • Grado financiero: estabilidad del grado financiero, ampliamente utilizada en enlaces de transacciones principales.
  • Arquitectura minimalista: cero dependencias externas, arquitectura sin nada compartido.
  • Respetuoso con el medio ambiente: se conecta perfectamente con los ecosistemas circundantes, como microservicios, computación en tiempo real y lagos de datos.

ConejoMQ

RocketMQ es una plataforma de procesamiento de datos en tiempo real de "mensajes, eventos y transmisiones" nativa de la nube de código abierto de Alibaba. Se basa en Kafka y se ha convertido en un proyecto Apache de alto nivel.

Características principales de RocketMQ (extraídas del sitio web oficial de RocketMQ):

  • Nativo de la nube: nacido con la nube, creciendo con la nube, escalamiento elástico ilimitado, compatible con K8
  • Alto rendimiento: rendimiento de nivel de billones garantizado, que cumple con escenarios de microservicios y big data.
  • Procesamiento de flujo: proporciona un motor de procesamiento de flujo liviano, altamente escalable, de alto rendimiento y rico en funciones.
  • Grado financiero: estabilidad del grado financiero, ampliamente utilizada en enlaces de transacciones principales.
  • Arquitectura minimalista: cero dependencias externas, arquitectura sin nada compartido.
  • Respetuoso con el medio ambiente: se conecta perfectamente con los ecosistemas circundantes, como microservicios, computación en tiempo real y lagos de datos.

Pulsar

Pulsar es una plataforma de flujo de mensajes distribuidos nativa de la nube de próxima generación. Fue desarrollada originalmente por Yahoo y se ha convertido en un proyecto Apache de alto nivel.

Pulsar integra mensajería, almacenamiento y computación funcional liviana. Adopta un diseño de arquitectura de separación de computación y almacenamiento para admitir múltiples inquilinos, almacenamiento persistente y replicación de datos entre regiones en salas de máquinas múltiples. Tiene una gran consistencia, alto rendimiento y baja latencia. y las características de almacenamiento de datos en tiempo real, como la escalabilidad, se consideran la mejor solución para la transmisión, el almacenamiento y la informática de mensajes en tiempo real en la era nativa de la nube.

Las características clave de Pulsar son las siguientes (extraídas del sitio web oficial):

  • Es la próxima generación de plataforma de flujo de mensajes distribuidos nativa de la nube.
  • Una única instancia de Pulsar admite de forma nativa múltiples clústeres y puede completar sin problemas la replicación de mensajes entre clústeres en salas de ordenadores.
  • Latencia de lanzamiento extremadamente baja y latencia de extremo a extremo.
  • Se expande sin problemas a más de 1 millón de temas.
  • API de cliente simple que admite Java, Go, Python y C++.
  • Múltiples modos de suscripción para temas (exclusivo, compartido y de conmutación por error).
  • La entrega de mensajes está garantizada a través del mecanismo de almacenamiento persistente de mensajes proporcionado por Apache BookKeeper.
  • Pulsar Functions, el marco informático ligero sin servidor, implementa el procesamiento de datos nativo de la secuencia.
  • Pulsar IO, un marco de conector sin servidor basado en Pulsar Functions, facilita la transferencia de datos dentro y fuera de Apache Pulsar.
  • El almacenamiento por niveles puede descargar datos del almacenamiento activo al almacenamiento frío/a largo plazo (como S3, GCS) cuando los datos se vuelven obsoletos.

Comparación del MQ anterior:

Dirección de contrasteresumen
RendimientoEl rendimiento de ActiveMQ y RabbitMQ de 10.000 niveles (ActiveMQ tiene el peor rendimiento) es un orden de magnitud inferior al de RocketMQ y Kafka de 100.000 niveles o incluso millones.
Disponibilidad Todos pueden lograr una alta disponibilidad. ActiveMQ y RabbitMQ se basan en una arquitectura maestro-esclavo para lograr una alta disponibilidad. RocketMQ se basa en una arquitectura distribuida. Kafka también se distribuye, con múltiples copias de un dato. Si algunas máquinas fallan, no habrá pérdida ni falta de disponibilidad de datos.
OportunidadRabbitMQ está desarrollado en base a Erlang, por lo que tiene sólidas capacidades de concurrencia, rendimiento extremadamente bueno, latencia muy baja, alcanza el nivel de microsegundos y otros están en el nivel de ms.
Soporte de funcionesPulsar tiene funciones más completas y admite múltiples inquilinos, múltiples modelos de consumo y modos de persistencia. Es una plataforma de flujo de mensajes distribuidos nativa de la nube de próxima generación.
Mensaje perdidoActiveMQ y RabbitMQ tienen una posibilidad de pérdida muy baja, y Kafka, RocketMQ y Pulsar teóricamente pueden lograr 0 pérdidas.

Resumir:

  • Aunque RabbitMQ es ligeramente inferior a Kafka, RocketMQ y Pulsar en términos de rendimiento, debido a que está desarrollado en base a Erlang, tiene fuertes capacidades de concurrencia, un rendimiento extremadamente bueno y una latencia muy baja, alcanzando el nivel de microsegundos. Sin embargo, debido a que RabbitMQ se desarrolla en base a Erlang, pocas empresas nacionales tienen la fuerza para realizar investigaciones y personalización a nivel de código fuente de Erlang. Si el escenario empresarial no tiene requisitos de concurrencia demasiado altos (100.000 o un millón de niveles), entonces RabbitMQ puede ser su primera opción entre estas colas de mensajes.
  • RocketMQ y Pulsar admiten una fuerte coherencia y se pueden utilizar en escenarios con altos requisitos de coherencia de mensajes.
  • RocketMQ es producido por Alibaba y es un proyecto de código abierto de Java. Podemos leer el código fuente directamente y luego personalizar el MQ de nuestra propia empresa. Se ha probado en escenarios comerciales reales de Alibaba.
  • Las características de Kafka son en realidad muy obvias, es decir, solo proporciona menos funciones principales, pero proporciona un rendimiento ultra alto, latencia de nivel ms, disponibilidad y confiabilidad extremadamente altas, y la distribución se puede expandir arbitrariamente. Al mismo tiempo, es mejor que Kafka admita una cantidad menor de temas para garantizar su rendimiento ultraalto. La única desventaja de Kafka es que los mensajes se pueden consumir repetidamente, lo que tendrá un impacto muy leve en la precisión de los datos. En el campo de big data y recopilación de registros, este ligero impacto se puede ignorar. Esta característica es naturalmente adecuada para big data real. -cómputo del tiempo y recopilación de registros. Si se trata de computación en tiempo real, recopilación de registros y otros escenarios en el campo de big data, el uso de Kafka es el estándar de la industria y no hay absolutamente ningún problema. La comunidad es muy activa y nunca será pornográfica, sin mencionar que. es casi un estándar de facto en este campo en todo el mundo.

Una encuesta sencilla sobre MQ de desarrollo propio a nivel empresarial

Desarrollo propio de Alibaba: RocketMQ, RabbitMQ

Tencent de desarrollo propio: TDMQ, CMQ

Autoinvestigación de Baidu: por investigar

Autoinvestigación de bytes: BMQ

Meituan de desarrollo propio: Mafma

Desarrollado por Qunar.com: QMQ

JD.com desarrollo propio: JMQ

Otros deben ser investigados. .