Comprender los intermediarios de mensajes. Aprendiendo la mecánica de la mensajería con ActiveMQ y Kafka. Capítulo 1

Hola a todos!

Empecé a traducir un pequeño libro:
«Comprensión de los agentes de mensajes",
autor: Jakub Korab, editorial: O'Reilly Media, Inc., fecha de publicación: junio de 2017, ISBN: 9781492049296.

De la introducción al libro:
"... Este libro le enseñará cómo pensar en los sistemas de mensajería de corredores, comparando y contrastando dos tecnologías de corredores populares: Apache ActiveMQ y Apache Kafka. Describirá los casos de uso y los incentivos de desarrollo que llevaron a sus desarrolladores a adoptar enfoques muy diferentes en la misma área: mensajería entre sistemas con un intermediario intermedio. Analizaremos estas tecnologías desde cero y resaltaremos el impacto de varias opciones de diseño a lo largo del camino. Obtendrá una comprensión profunda de ambos productos, una comprensión de cómo deben y no deben usarse y una comprensión de qué buscar al considerar otras tecnologías de mensajería en el futuro. ... "

Partes traducidas hasta ahora:
Capítulo 1 Introducción
Capítulo 3. Kafka

Publicaré los capítulos completos a medida que se traduzcan.

CAPÍTULO 1

introducción

La mensajería de sistema a sistema es una de las áreas de TI menos comprendidas. Como desarrollador o arquitecto, es posible que esté muy familiarizado con varios marcos y bases de datos. Sin embargo, es probable que sólo tenga una familiaridad superficial con el funcionamiento de las tecnologías de mensajería basadas en intermediarios. Si te sientes así, no te preocupes, estás en buena compañía.

Las personas suelen tener un contacto muy limitado con la infraestructura de mensajería. A menudo se conectan a un sistema creado hace mucho tiempo o descargan una distribución de Internet, la instalan en PROM y comienzan a escribir código para ella. Después de ejecutar la infraestructura en PROM, los resultados pueden ser mixtos: los mensajes se pierden debido a fallas, el envío no funciona como esperaba, o los brokers “colgan” a sus productores o no envían mensajes a sus consumidores.

¿Suena familiar?

Un escenario común es donde su código de mensajería funciona muy bien, por el momento. Hasta que deje de funcionar. Este período adormece la guardia con una falsa sensación de seguridad, lo que lleva a más código basado en creencias falsas sobre el comportamiento fundamental de la tecnología. Cuando las cosas empiezan a ir mal, te enfrentas a una verdad incómoda: que no has entendido realmente el comportamiento subyacente del producto o las compensaciones elegidas por los autores, como rendimiento versus confiabilidad, o transaccionalidad versus escalabilidad horizontal. .

Sin un conocimiento profundo de cómo funcionan los brokers, las personas hacen declaraciones aparentemente razonables sobre sus sistemas de mensajería, como por ejemplo:

  • El sistema nunca perderá mensajes.
  • Los mensajes se procesarán secuencialmente
  • Agregar consumidores hará que el sistema sea más rápido
  • Los mensajes solo se entregarán una vez

Lamentablemente, algunas de estas afirmaciones se basan en suposiciones que sólo se aplican en determinadas circunstancias, mientras que otras son simplemente incorrectas.

Este libro le enseñará cómo pensar en los sistemas de mensajería basados ​​en intermediarios, comparando y contrastando dos tecnologías de intermediarios populares: Apache ActiveMQ y Apache Kafka. Describirá los casos de uso y los incentivos de desarrollo que llevaron a sus desarrolladores a adoptar enfoques muy diferentes en la misma área: mensajería entre sistemas con un intermediario intermedio. Analizaremos estas tecnologías desde cero y resaltaremos el impacto de varias opciones de diseño a lo largo del camino. Obtendrá una comprensión profunda de ambos productos, una comprensión de cómo deben y no deben usarse, y una comprensión de qué buscar al considerar otras tecnologías de mensajería en el futuro.

Antes de comenzar, repasemos los conceptos básicos.

¿Qué es un sistema de mensajería y por qué es necesario?

Para que dos aplicaciones se comuniquen entre sí, primero deben definir una interfaz. Definir esta interfaz implica seleccionar un transporte o protocolo, como HTTP, MQTT o SMTP, y negociar los formatos de mensajes que se intercambiarán entre los sistemas. Este puede ser un proceso estricto, como definir un esquema XML con requisitos de costo de carga útil del mensaje, o puede ser mucho menos formal, como un acuerdo entre dos desarrolladores de que una parte de la solicitud HTTP contendrá el identificador del cliente.

Siempre que el formato de los mensajes y el orden en que se envían sean consistentes entre sistemas, pueden comunicarse entre sí sin preocuparse por la implementación del otro sistema. Los aspectos internos de estos sistemas, como el lenguaje de programación o el marco utilizado, pueden cambiar con el tiempo. Mientras se mantenga el contrato en sí, la interacción puede continuar sin cambios por parte de la otra parte. Los dos sistemas están efectivamente desacoplados (separados) por esta interfaz.

Los sistemas de mensajería suelen implicar un intermediario entre dos sistemas que interactúan para desacoplar (separar) aún más al remitente del destinatario o destinatarios. En este caso, el sistema de mensajería permite al remitente enviar un mensaje sin saber dónde está el destinatario, si está activo o cuántas instancias hay.

Veamos un par de analogías de los tipos de problemas que resuelve un sistema de mensajería e introduzcamos algunos términos básicos.

Punto a punto

Alexandra va a la oficina de correos para enviarle un paquete a Adam. Se acerca a la ventana y le entrega el paquete al empleado. El empleado recoge el paquete y le entrega un recibo a Alexandra. Adam no necesita estar en casa cuando se envía el paquete. Alexandra confía en que el paquete le será entregado a Adam en algún momento en el futuro y podrá continuar con sus asuntos. Más tarde, en algún momento, Adam recibe un paquete.

Este es un ejemplo de un modelo de mensajería. punto a punto. La oficina de correos aquí actúa como un mecanismo de distribución de paquetes, asegurando que cada paquete se entregue una vez. El uso de una oficina de correos separa el acto de enviar un paquete de la entrega del paquete.
En los sistemas de mensajería clásicos, el modelo punto a punto se implementa mediante colas. La cola actúa como un búfer FIFO (primero en entrar, primero en salir) al que pueden suscribirse uno o más consumidores. Cada mensaje se entrega únicamente a uno de los consumidores suscritos. Las colas normalmente intentan distribuir mensajes de manera justa entre los consumidores. Sólo un consumidor recibirá este mensaje.

El término "duradero" se aplica a las colas. Confiabilidad es una propiedad del servicio que garantiza que el sistema de mensajería persistirá en los mensajes en ausencia de suscriptores activos hasta que un consumidor se suscriba a la cola para la entrega de mensajes.

La confiabilidad a menudo se confunde con persistencia y aunque los dos términos se usan indistintamente, cumplen funciones diferentes. La persistencia determina si el sistema de mensajería escribe un mensaje en algún tipo de almacenamiento entre su recepción y su envío al consumidor. Los mensajes enviados a la cola pueden ser persistentes o no.
La mensajería punto a punto se utiliza cuando el caso de uso requiere una acción única en el mensaje. Los ejemplos incluyen depositar fondos en una cuenta o completar una orden de entrega. Más adelante analizaremos por qué el sistema de mensajería por sí solo no puede proporcionar una entrega única y por qué las colas pueden, en el mejor de los casos, ofrecer una garantía de entrega. al menos una vez.

Editor-Suscriptor

Gabriella marca el número de la conferencia. Mientras está conectada a la conferencia, escucha todo lo que dice el orador, junto con el resto de participantes de la llamada. Cuando se desconecta, se pierde lo que se dice. Cuando se vuelve a conectar, continúa escuchando lo que se dice.

Este es un ejemplo de un modelo de mensajería. publicar-suscribir. La conferencia telefónica actúa como un mecanismo de transmisión. A la persona que habla no le importa cuántas personas hay actualmente en la llamada: el sistema garantiza que cualquiera que esté actualmente conectado escuchará lo que se dice.
En los sistemas de mensajería clásicos, el modelo de mensajería de publicación-suscripción se implementa a través de tapas. Topic proporciona el mismo método de transmisión que el mecanismo de conferencia. Cuando se envía un mensaje a un tema, se distribuye para todos los usuarios suscritos.

Los temas suelen ser poco confiable (no duradero). Al igual que un oyente que no puede escuchar lo que se dice en una conferencia telefónica cuando se desconecta, los suscriptores del tema pierden cualquier mensaje que se envíe mientras están desconectados. Por esta razón, podemos decir que los temas brindan garantía de entrega. no más de una vez para cada consumidor.

Los mensajes de publicación-suscripción se utilizan normalmente cuando los mensajes son de naturaleza informativa y la pérdida de un mensaje no es particularmente significativa. Por ejemplo, un tema puede transmitir lecturas de temperatura de un grupo de sensores una vez por segundo. Un sistema que esté interesado en la temperatura actual y que se suscriba a un tema no se preocupará si pierde un mensaje; llegará otro en un futuro próximo.

modelos híbridos

El sitio web de la tienda coloca los mensajes de pedido en una "cola de mensajes". El principal consumidor de estos mensajes es el sistema ejecutivo. Además, el sistema de auditoría debería disponer de copias de estos mensajes de pedido para su posterior seguimiento. Ambos sistemas no pueden permitir el paso de mensajes, incluso si los propios sistemas no están disponibles durante algún tiempo. El sitio web no debe conocer otros sistemas.

Los casos de uso a menudo requieren una combinación de modelos de publicación-suscripción y mensajería punto a punto, como cuando varios sistemas requieren una copia de un mensaje y se requiere confiabilidad y persistencia para evitar la pérdida de mensajes.

Estos casos requieren un destino (un término general para colas y temas) que distribuya mensajes básicamente como un tema, de modo que cada mensaje se envíe a un sistema separado interesado en esos mensajes, pero también en el que cada sistema pueda definir varios consumidores que reciben mensajes entrantes. mensajes, que se parece más a una cola. El tipo de lectura en este caso es una vez para cada parte interesada. Estos destinos híbridos a menudo requieren durabilidad, de modo que si un consumidor se desconecta, los mensajes que se envían en ese momento se reciben después de que el consumidor se vuelva a conectar.

Los modelos híbridos no son nuevos y pueden usarse en la mayoría de los sistemas de mensajería, incluidos ActiveMQ (a través de destinos virtuales o compuestos que combinan temas y colas) y Kafka (implícitamente, como una propiedad fundamental de su diseño de destino).

Ahora que tenemos cierta terminología básica y entendemos para qué podríamos usar un sistema de mensajería, vayamos a los detalles.

Traducción hecha: tele.gg/middle_java

La siguiente parte traducida: Capítulo 3. Kafka

To be continued ...

Fuente: habr.com

Añadir un comentario