No entiendo cuándo usaría SNS versus SQS, y ¿por qué siempre están unidos?
No entiendo cuándo usaría SNS versus SQS, y ¿por qué siempre están unidos?
Respuestas:
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.).
Aquí hay una comparación de los dos:
Tipo de entidad
Consumo de mensajes
Caso de uso
Persistencia
Tipo de consumidor
Aplicaciones de muestra
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
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:
Use SQS si:
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.
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 .
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 .
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.
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/
visibilityTimeout
está configurado, ningún otro sistema podrá consumir el mensaje una vez que otro sistema lo esté procesando.