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.