Comprender los corredores de mensajes. Aprendiendo la mecánica de la mensajería a través de ActiveMQ y Kafka. Capitulo 1

Hola a todos!

Comenzó a traducir un pequeño libro:
" Comprender los corredores de mensajes ",
autor: Jakub Korab, editor: O'Reilly Media, Inc., fecha de publicación: junio de 2017, ISBN: 9781492049296.

De la introducción al libro:
"... Este libro le enseñará a hablar sobre los sistemas de mensajería en los corredores al comparar y contrastar dos tecnologías populares de corredores: Apache ActiveMQ y Apache Kafka. Aquí encontrará ejemplos de incentivos de uso y desarrollo que llevaron a sus desarrolladores a utilizar enfoques completamente diferentes para la misma área: mensajes entre sistemas con un intermediario intermediario. Examinaremos estas tecnologías desde cero y destacaremos la influencia de varias opciones de diseño en el camino. Obtendrá una comprensión profunda de ambos productos, una comprensión de cómo deberían y no deberían usarse, y una comprensión de qué buscar al considerar otras tecnologías de mensajería en el futuro ... "

Piezas traducidas hasta la fecha:
Capítulo 1. Introducción
Capítulo 2. ActiveMQ
Capítulo 3. Kafka

Traducción completada: tele.gg/middle_java

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

CAPITULO 1


Introduccion


La mensajería entre sistemas es una de las áreas menos entendidas de TI. Como desarrollador o arquitecto, puede estar familiarizado con varios marcos y bases de datos. Sin embargo, es probable que solo tenga un conocimiento pasajero de cómo funcionan las tecnologías de mensajería basadas en intermediarios. Si te sientes así, no te preocupes, estás en buena compañía.

Las personas generalmente tienen un contacto muy limitado con la infraestructura de mensajería. A menudo se conectan a un sistema creado hace mucho tiempo, o descargan un kit de distribución de Internet, lo instalan en PROM y comienzan a escribir código para él. Después de lanzar la infraestructura en PROM, los resultados pueden ser mixtos: pérdida de mensajes durante fallas, el envío no funciona como esperaba, o los corredores "suspenden" a sus productores o no envían mensajes a sus consumidores.

¿Te suena familiar?

Un escenario común es cuando su código de mensajería funciona bien, por el momento. Hasta que deje de funcionar. Este período calma la vigilancia y da una falsa sensación de seguridad, lo que conduce a un código aún mayor basado en ideas falsas sobre el comportamiento fundamental de la tecnología. Cuando algo comienza a salir mal, se enfrenta a una verdad incómoda: que realmente no entendió el comportamiento básico del producto o los compromisos elegidos por los autores, como el rendimiento versus la confiabilidad o la transaccionalidad versus la escalabilidad horizontal.

Sin una comprensión profunda de cómo funcionan los corredores, las personas hacen declaraciones aparentemente razonables sobre sus sistemas de mensajería, tales como:

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

Desafortunadamente, algunas de estas declaraciones se basan en suposiciones que se aplican solo en ciertas circunstancias, mientras que otras son simplemente incorrectas.

Este libro le enseñará cómo hablar sobre los sistemas de mensajería basados ​​en intermediarios al comparar y contrastar dos tecnologías populares de intermediario: Apache ActiveMQ y Apache Kafka. Aquí describiremos ejemplos de incentivos de uso y desarrollo que llevaron a sus desarrolladores a utilizar enfoques completamente diferentes para el mismo campo: mensajes entre sistemas con un intermediario intermediario. Analizaremos estas tecnologías desde cero y destacaremos el impacto de varias opciones de diseño en el camino. Obtendrá una comprensión profunda de ambos productos, una comprensión de cómo deberían y no deberían 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. La definición de esta interfaz incluye seleccionar un transporte o protocolo, como HTTP, MQTT o SMTP, y negociar los formatos de mensaje que intercambiarán los sistemas. Puede ser un proceso riguroso, como definir un esquema XML con los requisitos de carga de un mensaje, o puede ser mucho menos formal, por ejemplo, un acuerdo entre dos desarrolladores de que alguna parte de la solicitud HTTP contendrá un identificador de cliente .

Mientras el formato del mensaje y el orden de envío entre los sistemas sean consistentes, podrán interactuar entre sí sin preocuparse por la implementación de otro sistema. Los aspectos internos de estos sistemas, como un lenguaje de programación o un marco utilizado, pueden cambiar con el tiempo. Mientras el contrato en sí sea compatible, la interacción puede continuar sin cambios desde el otro lado. Los dos sistemas están efectivamente desconectados (separados) por esta interfaz.

Los sistemas de mensajería, por regla general, prevén la participación de un intermediario entre dos sistemas que interactúan para desconectar (separar) aún más al remitente del destinatario o destinatarios. Al mismo tiempo, el sistema de mensajería permite al remitente enviar un mensaje sin saber dónde está el destinatario, si está activo o cuántos de ellos.

Veamos un par de analogías de la variedad 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 enviar un paquete a Adam. Ella camina hacia la ventana y le entrega al empleado un paquete. El empleado recoge el paquete y le da a Alexandra un recibo. Adam no necesita estar en casa al momento de enviar el paquete. Alexandra confía en que el paquete se entregará a Adam en algún momento en el futuro y puede continuar haciendo lo suyo. Más tarde, en algún momento, Adam recibe el 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 la oficina de correos separa el acto de enviar el paquete de la entrega del paquete.
En los sistemas de mensajería clásicos, el modelo punto a punto se implementa a través de colas . La cola actúa como un búfer FIFO (primero en entrar, primero en salir) al que uno o más consumidores pueden suscribirse. Cada mensaje se entrega solo a uno de los consumidores suscritos . Las colas generalmente intentan distribuir equitativamente los mensajes entre los consumidores. Solo un consumidor recibirá este mensaje.

El término "duradero" se aplica a las colas. La confiabilidad es una característica del servicio que garantiza que el sistema de mensajería guardará los mensajes cuando no haya suscriptores activos hasta que el consumidor se suscriba a la cola para la entrega de mensajes.

La fiabilidad a menudo se confunde con la persistencia y, aunque los dos términos se usan indistintamente, realizan diferentes funciones. La persistencia determina si el sistema de mensajería intercambia el mensaje en algún tipo de almacenamiento entre recibirlo y enviarlo al consumidor. Los mensajes enviados a la cola pueden o no ser persistentes.
La mensajería punto a punto se usa cuando un caso de uso requiere una acción única con un mensaje. Un ejemplo es depositar fondos en una cuenta o completar un pedido de entrega. Más adelante discutiremos por qué el sistema de mensajería en sí no puede proporcionar una entrega única y por qué las colas pueden, en el mejor de los casos, proporcionar una garantía de entrega al menos una vez .

Suscriptor de editor


Gabriella marca el número de la conferencia. Mientras está conectada a la conferencia, escucha todo lo que dice el orador, junto con los demás participantes en la llamada. Cuando se apaga, se salta lo que se dice. Cuando se vuelve a conectar, ella continúa escuchando lo que dicen.
Este es un ejemplo de un modelo de mensajería de publicación-suscripción . La conferencia actúa como un mecanismo de transmisión. A la persona que habla no le importa cuántas personas se unen actualmente a la llamada: el sistema garantiza que cualquier persona conectada en este momento escuche 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 temas . El tema proporciona el mismo método de difusión que el mecanismo de conferencia. Cuando se envía un mensaje al tema, se distribuye a todos los usuarios suscritos .

Los temas generalmente no son confiables (no duraderos) . Al igual que un oyente que no escucha lo que se dice en la llamada de conferencia, cuando el oyente se desconecta, los suscriptores del tema omiten los mensajes que se envían cuando están desconectados. Por esta razón, se puede decir que los temas proporcionan una garantía de entrega no más de una vez para cada consumidor.

La mensajería de publicación-suscripción generalmente se usa 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 al tema no se preocupará si pierde un mensaje; otro llegará en un futuro próximo.

Modelos híbridos


El sitio web de la tienda coloca los mensajes de pedido en la cola de mensajes. El principal consumidor de estos mensajes es el sistema ejecutivo. Además, el sistema de auditoría debe tener copias de estos mensajes de pedido para el seguimiento posterior. Ambos sistemas no pueden omitir mensajes, incluso si los sistemas mismos no están disponibles por algún tiempo. Un sitio web no debe conocer otros sistemas.
Los escenarios de uso a menudo requieren una combinación de modelos de publicación-suscripción y mensajería punto a punto, por ejemplo, cuando varios sistemas requieren una copia del mensaje, y se requieren confiabilidad y persistencia para evitar la pérdida de mensajes.

En estos casos, se requiere un destino (un término general para colas y temas), que distribuye los mensajes principalmente como un tema, para que cada mensaje se envíe a un sistema separado que esté interesado en estos mensajes, pero también en el que cada sistema puede definir varios consumidores que reciben mensajes entrantes, que es más como una cola. El tipo de lectura en este caso es una vez para cada parte interesada . Estos destinatarios híbridos a menudo requieren durabilidad, por lo que si el consumidor se desconecta, los mensajes que se envían en este momento se reciben después de volver a conectar al consumidor.

Los modelos híbridos no son nuevos y se pueden usar 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 del diseño de su destinatario).

Ahora que tenemos algo de terminología básica y una comprensión de para qué puede ser útil un sistema de mensajería, pasemos a los detalles.

Traducción completada: tele.gg/middle_java

Siguiente parte: Capítulo 2. ActiveMQ

Continuará ...

Source: https://habr.com/ru/post/466385/


All Articles