¡Hola a todos!
Comencé la traducción de un pequeño libro:
««,
autor: Jakub Korab, editorial: O’Reilly Media, Inc., fecha de publicación: junio de 2017, ISBN: 9781492049296.
Del preámbulo del libro:
«… Este libro te enseñará a pensar sobre sistemas de mensajería basados en brokers, comparando y contrastando dos tecnologías populares de brokers: Apache ActiveMQ y Apache Kafka. Se presentarán ejemplos de uso y los incentivos detrás del desarrollo que llevaron a sus creadores a adoptar enfoques completamente diferentes para el mismo problema: la mensajería entre sistemas a través de un broker intermedio. Analizaremos estas tecnologías desde cero y destacaremos la influencia de las distintas opciones de diseño en este proceso. Obtendrás una comprensión profunda de ambos productos, sabrás cuándo deben y no deben ser utilizados, y aprenderás qué considerar al evaluar otras tecnologías de mensajería en el futuro. …»
Partes traducidas hasta ahora:
Publicaré capítulos terminados a medida que avance con la traducción.
CAPÍTULO 1
Introducción
La mensajería intersistemas es una de las áreas menos comprendidas en TI. Como desarrollador o arquitecto, puedes estar familiarizado con varios frameworks y bases de datos. Sin embargo, es muy probable que tengas solo un conocimiento superficial de cómo funcionan las tecnologías de mensajería basadas en brokers. Si te sientes así, no te preocupes, estás en buena compañía.
Las personas suelen interactuar con la infraestructura de mensajería de forma muy limitada. A menudo se conectan a un sistema creado hace mucho tiempo, o descargan una distribución de Internet, la instalan en producción y comienzan a escribir código para ella. Una vez que la infraestructura está en producción, los resultados pueden ser ambiguos: pérdida de mensajes durante fallos, el envío no funciona como esperabas, o los brokers 'congelan' a tus productores o no envían mensajes a tus consumidores.
¿Te suena familiar?
Un escenario común es cuando tu código de mensajería funciona perfectamente, hasta que deja de hacerlo. Este período adormece la vigilancia y brinda una falsa sensación de seguridad, lo que lleva a un mayor desarrollo de código basado en suposiciones erróneas sobre el comportamiento fundamental de la tecnología. Cuando las cosas comienzan a ir mal, te enfrentas a la incómoda verdad: que realmente no entendiste el comportamiento básico del producto o los compromisos elegidos por los autores, como el rendimiento frente a la confiabilidad, o la transaccionabilidad frente a la escalabilidad horizontal.
Sin una comprensión profunda de cómo funcionan los intermediarios, la gente hace afirmaciones aparentemente razonables sobre sus sistemas de mensajería, tales como:
- El sistema nunca perderá mensajes
- Los mensajes serán procesados en secuencia
- Agregar consumidores hará que el sistema sea más rápido
- Los mensajes serán entregados solo una vez
Desafortunadamente, algunas de estas afirmaciones se basan en suposiciones que solo son aplicables en ciertas circunstancias, mientras que otras son simplemente incorrectas.
Este libro te enseñará a razonar sobre sistemas de mensajería basados en intermediarios, comparando y contrastando dos tecnologías populares de intermediarios: Apache ActiveMQ y Apache Kafka. Se presentarán ejemplos de uso y los incentivos de desarrollo que llevaron a sus desarrolladores a adoptar enfoques completamente diferentes para la misma área: el intercambio de mensajes entre sistemas con un intermediario. Examinaré estas tecnologías desde cero y resaltaré la influencia de varias opciones de diseño a lo largo de este camino. Obtendrás una comprensión profunda de ambos productos, un entendimiento de cómo deben y no deben ser utilizados, y una perspectiva sobre qué aspectos considerar al explorar otras tecnologías de mensajería en el futuro.
Antes de comenzar, revisemos los fundamentos.
¿Qué es un sistema de mensajería y para qué sirve?
Para que dos aplicaciones puedan comunicarse entre sí, primero deben definir una interfaz. La definición de esta interfaz incluye la selección de un medio o protocolo, como HTTP, MQTT o SMTP, y la concordancia de los formatos de mensajes que intercambiarán los sistemas. Esto puede ser un proceso estricto, como definir un esquema XML con requisitos sobre la carga útil del mensaje, o puede ser mucho menos formal, como un acuerdo entre dos desarrolladores sobre que cierta parte de la solicitud HTTP contendrá un identificador de cliente.
Mientras se acuerden el formato de los mensajes y el orden en que se envían entre sistemas, podrán interactuar entre sí sin preocuparse por la implementación del otro sistema. Las entrañas de estos sistemas, como el lenguaje de programación o el marco utilizado, pueden cambiar con el tiempo. Siempre que se mantenga el contrato mismo, la interacción puede continuar sin cambios desde el otro lado. Estos dos sistemas están efectivamente desacoplados (separados) por esta interfaz.
Los sistemas de mensajería suelen implicar la participación de un intermediario entre los dos sistemas que interactúan para desacoplar aún más al remitente del destinatario o de los destinatarios. De esta forma, el sistema de mensajería permite al remitente enviar un mensaje sin saber dónde se encuentra el destinatario, si está activo o cuántas instancias hay de él.
Consideremos un par de analogías sobre los tipos de problemas que resuelve un sistema de mensajería, e introduzcamos algunos términos básicos.
De Punto a Punto
Alexandra va a la oficina de correos para enviar un paquete a Adam. Se acerca a la ventanilla y entrega el paquete al empleado. El empleado recoge el paquete y le emite a Alexandra un recibo. Adam no necesita estar en casa en el momento del envío del paquete. Alexandra tiene la seguridad de que el paquete será entregado a Adam en algún momento en el futuro y puede continuar con sus asuntos. Más tarde, en algún momento, Adam recibe el paquete.
Este es un ejemplo del modelo de mensajería punto a punto. La oficina de correos actúa aquí como un mecanismo de distribución de paquetes, garantizando que cada paquete sea entregado una vez. El uso de la oficina de correos separa el acto de enviar el paquete de la entrega del paquete.
En los sistemas clásicos de mensajería, el modelo 'punto a punto' se realiza a través de colas. La cola actúa como un búfer FIFO (primero en entrar, primero en salir), al cual puede suscribirse uno o varios consumidores. Cada mensaje se entrega únicamente a uno de los consumidores suscritos. Las colas generalmente intentan distribuir los mensajes de manera justa entre los consumidores. Solo un consumidor recibirá el mensaje dado.
A las colas se les aplica el término 'fiables' ('durables'). Fiabilidad — es una propiedad del servicio que garantiza que el sistema de mensajería mantendrá los mensajes en ausencia de suscriptores activos hasta que un consumidor se suscriba a la cola para la entrega de mensajes.
La fiabilidad a menudo se confunde con persistencia , y aunque estos dos términos son intercambiables, cumplen funciones diferentes. La persistencia determina si el sistema de mensajería almacena el mensaje en algún tipo de almacenamiento entre la recepción y el envío al consumidor. Los mensajes enviados a la cola pueden ser o no ser persistentes.
La mensajería tipo 'Punto a Punto' se utiliza cuando el caso de uso requiere una acción única con el mensaje. Un ejemplo de esto sería el ingreso de fondos en una cuenta o la realización de un pedido de entrega. Más adelante discutiremos por qué el sistema de mensajería en sí mismo no puede garantizar la entrega única y por qué las colas solo pueden ofrecer la garantía de entrega al menos una vez.
Publicador-Suscriptor
Gabriela marca el número de la conferencia. Mientras está conectada a la conferencia, escucha todo lo que dice el orador, junto con los otros participantes de la llamada. Cuando se desconecta, se pierde lo que se dijo. Al volver a conectarse, continúa oyendo lo que se dice.
Este es un ejemplo del modelo de mensajería publicación-suscripción. La conferencia actúa como un mecanismo de transmisión. El orador no se preocupa por cuántas personas se han unido actualmente a la llamada: el sistema garantiza que cualquier persona que esté conectada en ese momento escuchará lo que se dice.
En los sistemas clásicos de mensajería, el modelo de mensajería de 'publicación-suscripción' se implementa a través de temasEl tema proporciona un método de difusión similar al mecanismo de conferencias telefónicas. Cuando se envía un mensaje al tema, se distribuye a todos los usuarios suscritos..
Los temas generalmente son no confiables (nondurable).Al igual que un oyente que no escucha lo que se dice en una llamada de conferencia cuando se desconecta, los suscriptores del tema pierden cualquier mensaje que se envíe en el momento en que están fuera de línea. Por esta razón, se puede decir que los temas ofrecen garantías de entrega no más de una vez para cada consumidor.
La mensajería de tipo 'publicar-suscribirse' se utiliza generalmente cuando los mensajes son informativos y la pérdida de un mensaje no es muy significativa. Por ejemplo, un tema puede transmitir las lecturas de temperatura de un grupo de sensores una vez por segundo. Un sistema que esté interesado en la temperatura actual y que se haya suscrito al tema no se preocupará si pierde un mensaje: otro llegará en breve.
Modelos híbridos
El sitio web de la tienda coloca los mensajes de pedidos en una 'cola de mensajes'. El consumidor principal de estos mensajes es el sistema ejecutivo. Además, el sistema de auditoría debe tener copias de estos mensajes de pedidos para su posterior seguimiento. Ambos sistemas no pueden perder mensajes, incluso si los sistemas mismos están fuera de línea durante un período de tiempo. El sitio web no debe conocer otros sistemas.
Los casos de uso a menudo requieren la combinación de modelos de mensajería 'publicar-suscribirse' y 'punto a punto', por ejemplo, cuando varios sistemas necesitan una copia del mensaje y se requiere tanto confiabilidad como persistencia para evitar la pérdida de mensajes.
En estos casos, se requiere un destinatario (destination) (término general para colas y temas) que distribuye mensajes principalmente como un tema, de modo que cada mensaje se envíe a un sistema separado interesado en esos mensajes, pero también en el cual cada sistema puede definir varios consumidores que reciben mensajes entrantes, lo cual se asemeja más a una cola. El tipo de lectura en este caso es una vez para cada parte interesada.Estos direcciones híbridas suelen requerir fiabilidad, así que, si el 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 aplicarse en la mayoría de los sistemas de mensajería, incluyendo tanto ActiveMQ (a través de destinatarios virtuales o compuestos que combinan temas y colas) como Kafka (implícitamente, como una propiedad fundamental del diseño de su destinatario).
Ahora que tenemos alguna terminología básica y entendemos para qué podría ser útil un sistema de mensajería, pasemos a los detalles.
Traducción realizada por:
La siguiente parte traducida:
Continuará...
Fuente: habr.com
