Sistemas de mensajería y eventos
Aprende cómo la mensajería y las arquitecturas orientadas a eventos permiten una comunicación de backend desacoplada y escalable.
Por qué existen los sistemas de mensajería
Los sistemas de mensajería reducen el acoplamiento al permitir que los servicios se comuniquen de forma asíncrona a través de un broker en lugar de llamadas directas.
- Las llamadas directas de servicio a servicio crean dependencias estrechas entre sistemas.
- La mensajería introduce un broker que desacopla a productores y consumidores.
- Los servicios pueden comunicarse de forma asíncrona sin esperar unos a otros.
Detalles
En los sistemas tradicionales, un servicio llama directamente a otro para completar una tarea. Esto crea un acoplamiento estrecho: si un servicio es lento, no está disponible o está sobrecargado, afecta directamente al que lo llama.
Los sistemas de mensajería resuelven esto introduciendo un message broker entre los servicios. En lugar de llamar directamente a otro servicio, un servicio envía un mensaje al broker, y el servicio receptor lo procesa de forma independiente.
Esto permite la comunicación asíncrona. El emisor no necesita esperar a que el receptor termine de procesar, lo que mejora la capacidad de respuesta y la resiliencia del sistema.
Al desacoplar los servicios, los sistemas de mensajería facilitan escalar, mantener y evolucionar componentes individuales sin romper todo el sistema.
Colas de mensajes
Una cola de mensajes permite la comunicación asíncrona al almacenar tareas hasta que los consumidores estén listos para procesarlas.
- Los productores envían mensajes a una cola en lugar de llamar directamente a otro servicio.
- La cola retiene los mensajes hasta que los consumidores los procesan.
- Esto permite el procesamiento asíncrono y desacopla los componentes del sistema.
Detalles
Una cola de mensajes actúa como un búfer entre productores y consumidores. En lugar de requerir un procesamiento inmediato, los mensajes se almacenan en la cola hasta que haya un consumidor disponible para manejarlos.
Esto permite que los sistemas procesen tareas de forma asíncrona. Por ejemplo, una solicitud web puede encolar rápidamente una tarea (como enviar un correo electrónico) sin esperar a que la tarea se complete.
Las colas también mejoran la confiabilidad. Si un consumidor falla o no está disponible temporalmente, los mensajes permanecen en la cola y pueden procesarse más tarde.
Al separar productores y consumidores, las colas de mensajes reducen las dependencias del sistema y permiten que cada componente escale de forma independiente.
Publicar / Suscribirse (Pub/Sub)
Pub/Sub permite distribuir un evento a múltiples consumidores sin conexiones directas entre ellos.
- Los publicadores envían mensajes a un topic en lugar de dirigirse a consumidores específicos.
- Múltiples suscriptores reciben el mismo evento simultáneamente.
- Este patrón admite la difusión de eventos y el acoplamiento débil.
Detalles
En el modelo de publicar/suscribirse, un publicador envía mensajes a un topic en lugar de hacerlo directamente a un consumidor específico.
Los consumidores se suscriben a ese topic y reciben automáticamente cualquier mensaje publicado en él. Esto permite que un evento desencadene múltiples acciones independientes en todo el sistema.
Por ejemplo, cuando un usuario se registra, un solo evento puede notificar a varios servicios, como email, analytics, billing y notifications, sin que el publicador necesite conocerlos.
Este modelo desacopla a los productores de los consumidores y hace que los sistemas sean más fáciles de विस्तार. Se pueden agregar o quitar suscriptores sin cambiar el publicador, lo que mejora la flexibilidad y la escalabilidad.
Pub/Sub se usa ampliamente en arquitecturas orientadas a eventos, donde los sistemas reaccionan a eventos en lugar de depender de una comunicación directa y síncrona.
Sistemas dirigidos por eventos
Los sistemas dirigidos por eventos permiten que los servicios se comuniquen emitiendo y reaccionando a eventos, reduciendo las dependencias directas entre componentes.
- Los servicios emiten eventos (por ejemplo, "User Created") en lugar de llamar directamente a otros servicios.
- Varios servicios independientes pueden reaccionar al mismo evento sin coordinación.
- Esto desacopla los sistemas, permitiendo que cada servicio escale y evolucione de forma independiente.
Detalles
En un sistema dirigido por eventos, las acciones se desencadenan por eventos en lugar de llamadas directas entre servicios. Cuando ocurre algo, como el registro de un nuevo usuario, el sistema emite un evento que describe ese cambio.
Este evento se envía a través de un message broker, donde varios servicios pueden suscribirse y reaccionar a él. Por ejemplo, un único evento "User Created" puede activar el servicio de correo para enviar un mensaje de bienvenida, el servicio de analytics para registrar el crecimiento de usuarios y el servicio de billing para inicializar una cuenta.
A diferencia de los sistemas tradicionales de request-response, el productor del evento no necesita saber qué servicios lo consumirán. Esto elimina el acoplamiento fuerte y permite agregar, eliminar o modificar servicios sin afectar a los demás.
Esta arquitectura mejora la escalabilidad porque cada servicio puede procesar los eventos a su propio ritmo. También mejora la resiliencia: si un servicio falla, los demás pueden seguir funcionando sin quedar bloqueados.
Sin embargo, los sistemas dirigidos por eventos introducen complejidad, como el manejo del orden de los eventos, la duplicación y la consistencia eventual entre servicios.
Event Sourcing
Event sourcing almacena cada cambio como un evento, lo que permite reconstruir el estado del sistema en cualquier momento.
- En lugar de almacenar solo el estado actual, los sistemas almacenan una secuencia de eventos.
- El estado actual se deriva reproduciendo los eventos en orden.
- Esto permite auditoría, seguimiento del historial y un estado del sistema reproducible.
Detalles
En los sistemas tradicionales, las bases de datos almacenan solo el estado más reciente de los datos. Event sourcing adopta un enfoque diferente al almacenar cada cambio como un evento en un registro de solo anexado.
Por ejemplo, en lugar de almacenar solo el perfil actual de un usuario, el sistema registra eventos como "UserCreated", "EmailUpdated" y "PasswordChanged". Estos eventos representan el historial completo de cambios.
El estado actual se reconstruye reproduciendo estos eventos en orden. Esto permite que el sistema reconstruya el estado en cualquier momento, lo cual es útil para depuración, auditoría y análisis.
Este enfoque proporciona una trazabilidad sólida y hace posible entender exactamente cómo un sistema llegó a su estado actual, pero también introduce complejidad adicional en el almacenamiento y el procesamiento.
Brokers de mensajes
Los brokers de mensajes actúan como intermediarios que gestionan cómo se almacenan, enrutan y entregan los mensajes entre servicios.
- Los brokers de mensajes reciben mensajes de los productores y los entregan a los consumidores.
- Proporcionan garantías como entrega confiable y persistencia de mensajes.
- Gestionan la lógica de enrutamiento para asegurar que los mensajes lleguen a los consumidores correctos.
Detalles
Un broker de mensajes se sitúa entre los productores y los consumidores, actuando como el sistema central que gestiona el flujo de mensajes.
Cuando un productor envía un mensaje, el broker lo almacena y se asegura de que se entregue a los consumidores adecuados. Esto elimina la necesidad de que los servicios se comuniquen directamente entre sí.
Los brokers de mensajes también proporcionan garantías de entrega. Según el sistema, los mensajes pueden persistirse en disco para evitar la pérdida de datos y reintentarse si la entrega falla.
También gestionan el enrutamiento, determinando qué consumidores deben recibir qué mensajes. Esto puede incluir una entrega simple basada en colas o patrones más complejos como temas pub/sub.
Al centralizar estas responsabilidades, los brokers de mensajes simplifican la comunicación y hacen que los sistemas distribuidos sean más fiables y escalables.
Tecnologías comunes de mensajería
Los diferentes sistemas de mensajería están diseñados para distintas necesidades de rendimiento, confiabilidad y arquitectura.
- Kafka está diseñado para streaming de eventos de alto rendimiento y logs persistentes.
- RabbitMQ se centra en la entrega confiable de mensajes y el enrutamiento flexible.
- NATS está optimizado para la comunicación de baja latencia en microservicios.
Detalles
Kafka es una plataforma distribuida de streaming de eventos diseñada para manejar cantidades masivas de datos. Almacena mensajes en logs persistentes y permite que los consumidores reproduzcan eventos, lo que la hace adecuada para pipelines de analítica y sistemas orientados a eventos.
RabbitMQ es un broker de mensajes tradicional que admite colas y patrones de enrutamiento complejos. Se centra en la entrega confiable y se usa comúnmente para el procesamiento de trabajos en segundo plano y colas de tareas.
NATS es un sistema de mensajería ligero diseñado para la simplicidad y la velocidad. Proporciona comunicación con latencia muy baja y a menudo se usa en arquitecturas de microservicios donde la entrega rápida de mensajes es crítica.
Cada sistema tiene diferentes compensaciones. Kafka prioriza el rendimiento y la durabilidad, RabbitMQ enfatiza la flexibilidad y la confiabilidad, y NATS se centra en la velocidad y la simplicidad. Elegir la herramienta adecuada depende de los requisitos del sistema.
Mensajería en Sistemas Distribuidos
Los sistemas de mensajería coordinan la comunicación entre servicios distribuidos mientras los mantienen independientes y escalables.
- Los servicios se comunican a través de un broker en lugar de conexiones directas.
- La mensajería mejora la tolerancia a fallos al almacenar temporalmente y reintentar mensajes.
- Permite una comunicación escalable entre muchos servicios independientes.
Detalles
En los sistemas distribuidos, múltiples servicios se ejecutan de forma independiente y, a menudo, en máquinas diferentes. Coordinar la comunicación entre ellos se convierte en un desafío importante.
Los sistemas de mensajería resuelven esto introduciendo un message broker como una capa central de comunicación. Los servicios envían y reciben eventos a través del broker en lugar de llamarse directamente entre sí.
Este desacoplamiento mejora la tolerancia a fallos. Si un servicio no está disponible temporalmente, los mensajes pueden permanecer en el sistema y procesarse más tarde sin bloquear a otros servicios.
También mejora la escalabilidad. Se pueden agregar nuevos servicios para consumir eventos sin modificar los existentes, lo que permite que el sistema crezca sin dependencias estrechas.
Como resultado, los sistemas de mensajería son un componente fundamental en las arquitecturas distribuidas modernas, ya que permiten un diseño de sistemas flexible, resiliente y escalable.
Sección de preguntas
1 / 5
Esta lección forma parte del contenido premium
Pásate al plan premium para eliminar el desenfoque y desbloquear la lectura completa.