¿Cuál es la diferencia entre Amazon SNS y Amazon SQS?

439

No entiendo cuándo usaría SNS versus SQS, y ¿por qué siempre están unidos?

Nick Ginanto
fuente
Lo que entiendo de su comentario se describe en el siguiente flujo ... ¿es correcto? Editor -> SNS -> SQL (reteniendo mensajes en la cola) -> Suscriptor (actualmente fuera de línea)
friendyogi
@friendyogi quieres decir SQS y no SQL?
elena

Respuestas:

626

SNS es un sistema distribuido de publicación-suscripción . Los mensajes son empujados a los abonados como y cuando son enviados por los editores para SNS.

SQS es un sistema de colas distribuidas . Los mensajes NO se envían a los receptores. Los receptores tienen que sondear o extraer mensajes de SQS . Los mensajes no pueden ser recibidos por múltiples receptores al mismo tiempo. Cualquier receptor puede recibir un mensaje, procesarlo y eliminarlo. Otros receptores no reciben el mismo mensaje más tarde. Las encuestas introducen inherentemente cierta latencia en la entrega de mensajes en SQS, a diferencia de SNS, donde los mensajes se envían inmediatamente a los suscriptores. SNS admite varios puntos finales como correo electrónico, sms, punto final http y SQS. Si desea un número desconocido y un tipo de suscriptores para recibir mensajes, necesita SNS.

No tiene que acoplar SNS y SQS siempre. Puede hacer que SNS envíe mensajes a correo electrónico, sms o punto final http aparte de SQS. Hay ventajas en acoplar SNS con SQS. Es posible que no desee que un servicio externo realice conexiones a sus hosts (el firewall puede bloquear todas las conexiones entrantes a su host desde el exterior). Su punto final puede morir debido al gran volumen de mensajes. El correo electrónico y los SMS tal vez no sean su elección para procesar mensajes rápidamente. Al combinar SNS con SQS, puede recibir mensajes a su ritmo. Permite a los clientes estar fuera de línea, tolerantes a fallas de red y host. También logras una entrega garantizada. Si configura SNS para enviar mensajes a un punto final http o correo electrónico o SMS, varias fallas en el envío del mensaje pueden provocar la caída del mensaje.

SQS se utiliza principalmente para desacoplar aplicaciones o integrar aplicaciones. Los mensajes se pueden almacenar en SQS por un corto período de tiempo (máximo 14 días). SNS distribuye varias copias de mensajes a varios suscriptores. Por ejemplo, supongamos que desea replicar los datos generados por una aplicación en varios sistemas de almacenamiento. Puede usar SNS y enviar estos datos a múltiples suscriptores, cada uno replicando los mensajes que recibe a diferentes sistemas de almacenamiento (s3, disco duro en su host, base de datos, etc.).

Srikanth
fuente
3
así que, básicamente, para implementar algo como mensajes de notificación push, se recomienda usar SNS y SQS para que los empujes con sns se pongan en cola hasta que el usuario solo los recupere de la cola. ¿Es posible crear una cola por usuario?
Nick Ginanto
2
Si. Puede tener tantos suscriptores como desee para SNS. Puede enviar notificaciones a varias colas.
Srikanth
Hola, lo siento, veo que esta pregunta es antigua pero me pregunto acerca de SQS, ¿sabe y almacena mensajes sin conexión? Debido a que APNS no almacena mensajes sin conexión, solo el mensaje más reciente. ¿Sabría cuándo los dispositivos IOS están fuera de línea y almacenan los mensajes fuera de línea de inmediato? ¿Y enviarlo más tarde cuando los dispositivos vuelvan a estar en línea?
Juan
2
@NickGinanto Queue por usuario probablemente no sea lo que quieres. Probablemente desee una cola para cada servicio que luego maneje mensajes específicos del usuario. Este diagrama puede ayudar: aws.amazon.com/blogs/aws/…
Trenton
2
Probablemente debe tenerse en cuenta que a partir de mediados de 2018 SQS puede desencadenar lambdas y, por lo tanto, es más parecido a un pubsub en ese caso.
cyberwombat
239

Aquí hay una comparación de los dos:

Tipo de entidad

  • SQS: Cola (similar a JMS)
  • SNS: Tema (Pub / Subsistema)

Consumo de mensajes

  • SQS: mecanismo de extracción: los consumidores sondean y extraen mensajes de SQS
  • SNS: mecanismo de empuje - SNS envía mensajes a los consumidores

Caso de uso

  • SQS: desacoplar 2 aplicaciones y permitir el procesamiento asincrónico paralelo
  • SNS: Fanout - Procesando el mismo mensaje de múltiples maneras

Persistencia

  • SQS: los mensajes persisten durante un tiempo (configurable) si no hay ningún consumidor disponible
  • SNS: sin persistencia. El consumidor que esté presente en el momento de la llegada del mensaje recibe el mensaje y el mensaje se elimina. Si no hay consumidores disponibles, el mensaje se pierde.

Tipo de consumidor

  • SQS: se supone que todos los consumidores son idénticos y, por lo tanto, procesan los mensajes exactamente de la misma manera
  • SNS: los consumidores pueden procesar los mensajes de diferentes maneras

Aplicaciones de muestra

  • SQS: Marco de trabajo: los trabajos se envían a SQS y los consumidores en el otro extremo pueden procesar los trabajos de forma asincrónica. Si la frecuencia del trabajo aumenta, la cantidad de consumidores simplemente puede aumentarse para lograr un mejor rendimiento.
  • SNS: procesamiento de imágenes. Si alguien sube una imagen a S3, luego filtre esa imagen, cree una miniatura y también envíe un correo electrónico de agradecimiento. En ese caso, S3 puede publicar notificaciones en un tema de SNS con 3 consumidores escuchándolo. La primera marca de agua la imagen, la segunda crea una miniatura y la tercera envía un correo electrónico de agradecimiento. Todos ellos reciben el mismo mensaje (URL de la imagen) y procesan en paralelo.
Arafat Nalkhande
fuente
1
Si no hay consumidores disponibles, existe un mecanismo de reintento, incluso el valor predeterminado es 10 reintentos.
Arpit Solanki,
Buena publicación detallada. Tenemos diferentes mensajes para diferentes consumidores. ¿Qué debemos hacer? ¿Usar SNS y definir diferentes temas o usar SQS y definir diferentes colas? Sin embargo, un tema / cola podría tener uno o más consumidores.
Andy Dufresne
Si su requisito es que su grupo / cola debe tener más de un consumidor, supongo que está diciendo que el mismo mensaje debe transmitirse a varios consumidores ... Y si esta suposición es correcta, entonces usar SNS es la única opción disponible para usted
Arafat Nalkhande
No creo "SQS: se supone que todos los consumidores son idénticos y, por lo tanto, procesan los mensajes exactamente de la misma manera", es correcto. He usado SQS donde dos servicios diferentes de AWS están recogiendo de la cola SQS y procesando el mensaje a su manera (lógica de aplicación diferente en esos servicios diferentes). ¿Me estoy perdiendo de algo?
nad
@nad Necesitaré comprender su caso de uso, pero para mí no tiene sentido que 2 consumidores de SQS procesen mensajes de manera no idéntica. Ese es un caso de uso para SNS
Arafat Nalkhande
31

De aws doc:

Amazon SNS permite que las aplicaciones envíen mensajes de tiempo crítico a múltiples suscriptores a través de un mecanismo "push", eliminando la necesidad de verificar periódicamente o "sondear" las actualizaciones.

Amazon SQS es un servicio de cola de mensajes utilizado por aplicaciones distribuidas para intercambiar mensajes a través de un modelo de sondeo, y se puede utilizar para desacoplar los componentes de envío y recepción, sin requerir que cada componente esté simultáneamente disponible.

http://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html

Tommy
fuente
30

Las respuestas en este hilo están un poco desactualizadas, así que decidí agregarle mis dos centavos:

Puede ver el SNS como un tema tradicional en el que puede tener múltiples suscriptores. Puede tener suscriptores heterogéneos para un tema SNS dado, incluidos Lambda y SQS, por ejemplo. También puede enviar mensajes SMS o incluso correos electrónicos listos para usar usando SNS. Una cosa a tener en cuenta en SNS es que solo se recibe un mensaje (notificación) a la vez, por lo que no puede aprovechar el procesamiento por lotes.

SQS , por otro lado, no es más que una Cola, donde almacena mensajes y suscribe a un consumidor (sí, puede tener N consumidores en una cola SQS, pero se volvería desordenado muy rápido y mucho más difícil de manejar teniendo en cuenta que todos los consumidores necesita leer el mensaje al menos una vez, por lo que es mejor con SNS combinado con SQS para este caso de uso, donde SNS enviaría notificaciones a N colas SQS y cada cola tendría un solo suscriptor) para procesar estos mensajes. A partir del 28 de junio de 2018, AWS admite disparadores Lambda para SQS , lo que significa que no tiene que hacerlo sondearpara mensajes más. Además, puede configurar un DLQ en su cola SQS de origen para enviar mensajes en caso de falla. En caso de éxito, los mensajes se eliminan automáticamente (esta es otra gran mejora), por lo que no tiene que preocuparse de que los mensajes ya procesados ​​se lean nuevamente en caso de que se olvide de eliminarlos manualmente. Sugiero echar un vistazo a comportamiento de reintento de Lambdapara entender mejor cómo funciona Una gran ventaja de usar SQS es que permite el procesamiento por lotes. Cada lote puede contener hasta 10 mensajes, por lo que si llegan 100 mensajes a la vez en su cola SQS, se activarán 10 funciones de Lambda (teniendo en cuenta el comportamiento de escala automática predeterminado para Lambda) y procesarán estos 100 mensajes (mantenga Tenga en cuenta que este es el camino feliz, ya que en la práctica, algunas funciones más de Lambda podrían girar leyendo menos de los 10 mensajes en el lote, pero se entiende la idea). Sin embargo, si publicó estos mismos 100 mensajes en SNS, se activarían 100 funciones de Lambda, lo que aumentaría innecesariamente los costos y agotaría su concurrencia de Lambda. Sin embargo, si todavía está ejecutando servidores tradicionales (como las instancias EC2), aún necesitará sondear los mensajes y administrarlos manualmente.

También tiene colas FIFO SQS , que garantizan el orden de entrega de los mensajes. Lambda no es un desencadenante compatible, por lo tanto, al elegir este tipo de cola, tenga en cuenta que la encuesta aún es necesaria, así como tener que eliminar los mensajes manualmente.

Aunque hay cierta superposición en sus casos de uso, tanto SQS como SNS tienen su propio centro de atención.

Use SNS si:

  • múltiples suscriptores es un requisito
  • Enviar SMS / E-mail fuera de la caja es útil

Use SQS si:

  • solo se necesita un suscriptor
  • el procesamiento por lotes es importante
Thales Minussi
fuente
29

AWS SNS es una red de suscriptores de editor, donde los suscriptores pueden suscribirse a temas y recibirán mensajes cada vez que un editor publique ese tema.

AWS SQS es un servicio de cola que almacena mensajes en una cola. SQS no puede entregar ningún mensaje, donde se necesita un servicio externo (lambda, EC2, etc.) para sondear SQS y obtener mensajes de SQS.

SNS y SQS se pueden usar juntos por múltiples razones.

  1. Puede haber diferentes tipos de suscriptores donde algunos necesitan la entrega inmediata de mensajes, donde otros requerirían que el mensaje persista, para su uso posterior a través de encuestas. Ver este enlace .

  2. El " patrón de despliegue ". Esto es para el procesamiento asincrónico de mensajes. Cuando se publica un mensaje en SNS, puede distribuirlo a múltiples colas SQS en paralelo. Esto puede ser excelente al cargar miniaturas en una aplicación en paralelo, cuando se publican imágenes. Ver este enlace .

  3. Almacenamiento persistente . Cuando un servicio que va a procesar un mensaje no es confiable. En un caso como este, si SNS envía una notificación a un Servicio y ese servicio no está disponible, la notificación se perderá. Por lo tanto, podemos usar SQS como almacenamiento persistente y luego procesarlo.

Keet Sugathadasa
fuente
4

En términos simples, SNS: envía mensajes al suscriptor mediante un mecanismo de inserción y sin necesidad de extracción. SQS: es un servicio de cola de mensajes utilizado por aplicaciones distribuidas para intercambiar mensajes a través de un modelo de sondeo, y puede utilizarse para desacoplar los componentes de envío y recepción.

Un patrón común es usar SNS para publicar mensajes en colas de Amazon SQS para enviar mensajes de manera confiable a uno o varios componentes del sistema de forma asincrónica. Referencia de https://aws.amazon.com/sns/faqs/

Krunal Barot
fuente
SQS no puede enviar un mensaje a muchos sistemas ya que no despliega los mensajes. Sí, muchos encuestadores pueden extraer mensajes de él, pero si uno de los consumidores elimina el mensaje, otros suscriptores no podrán volver a consumir el mismo mensaje. SNS es preferible a SQS si desea lograr un patrón de abanico. Además, si visibilityTimeoutestá configurado, ningún otro sistema podrá consumir el mensaje una vez que otro sistema lo esté procesando.
Thales Minussi
Un patrón común es usar SNS para publicar mensajes en colas de Amazon SQS para enviar mensajes de manera confiable a uno o varios componentes del sistema de forma asincrónica. Referencia de aws.amazon.com/sns/faqs
Krunal Barot
Si eso es lo que quiso decir (SNS -> múltiples colas SQS), edite su respuesta y con mucho gusto eliminaré mi voto negativo. De la forma en que lo expresas, parece que SQS puede desplegarse.
Thales Minussi
1
Sí ... ahí estaba la confusión. Lo he editado ... Gracias :)
Krunal Barot