Ir al contenido principal

SNS vs EventBridge


La diferencia principal entre ambos servicios radica principalmente en el patrón de arquitectura que intentan cubrir: Message Broker o Event Bus.

Message Broker

Un message broker es un intermediario que se encarga de traducir y transportar los mensajes entre los servicios que los producen y los que los consumen. El message broker tiene una expectativa sobre cómo el consumidor maneja el mensaje y existe un contrato entre las dos partes. Un ejemplo de aplicación de un message broker es una cola de trabajo, donde los servicios envían tareas a realizar y otros servicios las reciben y las procesan. SNS es un ejemplo de message broker, ya que permite enviar mensajes a diferentes tipos de suscriptores y esperar una confirmación de entrega.




Event Bus

Un event bus es un canal que se encarga de distribuir los eventos entre los servicios que los generan y los que los escuchan. El event bus no tiene ninguna expectativa sobre cómo el oyente maneja el evento y no existe un contrato entre las dos partes. Un ejemplo de aplicación de un event bus es un sistema de notificaciones, donde los servicios publican eventos que indican cambios de estado o condiciones y otros servicios se suscriben a los eventos que les interesan. EventBridge es un ejemplo de event bus, ya que permite recibir eventos de múltiples fuentes y enrutarlos a múltiples destinos según reglas definidas.



SNS & EventBridge

Ambos servicios nos permiten integrar diferentes sistemas y servicios mediante el envío y recepción de mensajes o eventos. Sin embargo, cada uno tiene sus propias características, ventajas y desventajas que debemos conocer para elegir el más adecuado para nuestro caso de uso.


SNS

SNS es un servicio de notificaciones que nos permite enviar mensajes en tiempo real a un gran número de suscriptores. Los suscriptores pueden ser servicios de AWS, puntos finales HTTP/S o aplicaciones móviles. SNS utiliza temas para agrupar los mensajes por canales lógicos y permite filtrar los mensajes por atributos o políticas de suscripción. SNS tiene un mecanismo de reintento robusto para cuando los destinos están no disponibles y puede enviar los mensajes fallidos a una cola de mensajes muertos para su posterior procesamiento.


Casos de uso de SNS

Algunos ejemplos de casos de uso de SNS son:

- Enviar alertas por SMS, correo electrónico o notificaciones push a los usuarios de una aplicación móvil cuando ocurre un evento importante, como una oferta, una actualización o una emergencia.

- Publicar mensajes a múltiples servicios de AWS, como Lambda, SQS, EC2 o CloudWatch, para activar acciones o flujos de trabajo en respuesta a un evento, como un cambio de estado, una condición o una solicitud.

- Distribuir mensajes a diferentes regiones o cuentas de AWS para lograr una alta disponibilidad, una baja latencia o una separación de responsabilidades.


EventBridge

EventBridge es un servicio de bus de eventos que nos permite procesar eventos de múltiples fuentes en tiempo real y publicarlos a múltiples destinos. Las fuentes pueden ser servicios de AWS, proveedores de SaaS o nuestras propias aplicaciones. Los destinos pueden ser servicios de AWS o puntos finales API Gateway. EventBridge utiliza buses de eventos para separar lógicamente los eventos y permite enrutar los eventos por contenido o patrón.


Casos de uso de EventBridge

Algunos ejemplos de casos de uso de EventBridge son:

- Recibir eventos de servicios de AWS, como EC2, S3 o CloudTrail, que indican cambios de estado, condiciones o acciones y reaccionar a ellos con servicios de AWS, como Lambda, SQS, SNS o Kinesis.

- Recibir eventos de proveedores de SaaS, como Auth0, PagerDuty o Datadog, que indican actividades, alertas o métricas y reaccionar a ellos con servicios de AWS, como Lambda, SQS, SNS o Kinesis.

- Recibir eventos de nuestras propias aplicaciones, como un sistema de pedidos, un sistema de inventario o un sistema de facturación, y reaccionar a ellos con servicios de AWS, como Lambda, SQS, SNS o Kinesis.


Comparación y conclusión

SNS y EventBridge tienen muchas similitudes. Ambos nos permiten desacoplar los productores y los consumidores de mensajes o eventos, filtrar los mensajes o eventos y proporcionar capacidades de fan-in o fan-out. Sin embargo, hay diferencias en la lista de destinos y características de cada servicio, y nuestra elección de servicio depende de las necesidades de nuestro caso de uso.

SNS tiene las siguientes ventajas:

- Es altamente escalable y confiable.

- Tiene un mecanismo de reintento robusto para cuando los destinos están no disponibles.

- Permite filtrar los mensajes por atributos o políticas de suscripción.


SNS tiene las siguientes desventajas:

- No garantiza el orden de los mensajes.

- No admite el procesamiento por lotes de los mensajes.

- Tiene un número limitado de tipos de suscriptores.


EventBridge tiene las siguientes ventajas:

- Es altamente escalable y confiable.

- Permite enrutar los eventos por contenido o patrón.

- Admite una gran variedad de fuentes y destinos de eventos.


EventBridge tiene las siguientes desventajas:

- Tiene una menor capacidad de procesamiento que SNS.

- No admite el envío de notificaciones a aplicaciones móviles.

- Tiene un costo adicional por el uso de buses de eventos personalizados o de socios.

En resumen, SNS es un servicio de notificaciones que nos permite enviar mensajes en tiempo real a un gran número de suscriptores. EventBridge es un servicio de bus de eventos que nos permite procesar eventos de múltiples fuentes en tiempo real y publicarlos a múltiples destinos. Ambos servicios tienen sus propios casos de uso, ventajas y desventajas, y debemos elegir el más adecuado para nuestro escenario.

Entradas populares de este blog

Enrutamiento Dinámico y Avanzado con Amazon API Gateway: ¡Adiós a los Proxies!

Enrutamiento Dinámico y Avanzado con Amazon API Gateway: ¡Adiós a los Proxies! En el mundo de las arquitecturas de microservicios, dirigir el tráfico de manera eficiente y flexible es un desafío constante. Tradicionalmente, esto implicaba configurar y mantener capas de proxy complejas o crear estructuras de URL enrevesadas. Sin embargo, Amazon API Gateway ha simplificado este proceso radicalmente con la introducción de las Reglas de Enrutamiento ( Routing Rules ), permitiendo un enrutamiento dinámico basado en cabeceras HTTP. En este post, exploraremos cómo esta funcionalidad puede simplificar tu arquitectura, reducir la sobrecarga operativa y habilitar patrones de despliegue avanzados como Canary Releases y A/B Testing de forma nativa. ¿Qué son las Reglas de Enrutamiento? Las Routing Rules son un recurso que se asocia a un dominio personalizado en API Gateway. Permiten desviar las solicitudes entrantes a diferentes integraciones de backend (como una etapa específica de ...

Python 3.14 y el Fin del GIL: Explorando Oportunidades y Desafíos

Python 3.14 y el Fin del GIL: Explorando Oportunidades y Desafíos La versión 3.14 de Python ha generado gran expectativa, principalmente por la implementación de mejoras significativas, entre las que destacan: Sub-intérpretes: Disponibles en Python durante dos décadas, pero limitados al uso de código C. Ahora se pueden emplear directamente desde Python. T-Strings: Un nuevo método para el procesamiento personalizado de cadenas, con una sintaxis similar a los f-strings , pero que devuelve un objeto que representa tanto las partes estáticas como las interpoladas de la cadena. Compilador Just-In-Time (JIT): Aunque aún experimental, esta característica promete mejorar el rendimiento en casos de uso específicos. Sin embargo, el aspecto más relevante de esta versión es la introducción de Python con hilos libres , también conocido como Python sin GIL . Es importante señalar que la versión estándar de Python 3.14 seguirá utilizando el GIL, pero se puede descargar (o construir) u...

¿Qué es el patrón Circuit Breaker y cómo se puede implementar con AWS Step Functions?

En el desarrollo de software, es común que las aplicaciones se comuniquen con servicios o recursos externos, como bases de datos, APIs o microservicios. Sin embargo, estos servicios o recursos pueden fallar o estar temporalmente indisponibles por diversas razones, lo que puede afectar el rendimiento y la disponibilidad de la aplicación. Para manejar estos escenarios de falla, se puede utilizar el patrón Circuit Breaker, que consiste en detectar y prevenir que una operación que tiene alta probabilidad de fallar se ejecute repetidamente, causando más problemas o consumiendo recursos innecesarios.  El patrón Circuit Breaker tiene tres estados posibles: cerrado, abierto y medio abierto. Cerrado : En este estado, el circuito está funcionando normalmente y la operación se ejecuta sin problemas. Si se detecta una falla, se incrementa un contador de fallas y se calcula un umbral de fallas, que puede ser un número o un porcentaje de fallas permitidas. Si el contador de fallas supera el u...