Contamos con tu apoyo para difundir nuestros escritos en referencia a las ciencias de la computación.
Solución:
SNS es un distribuido publicar-suscribirse sistema. Los mensajes son empujado a los suscriptores cuando los editores los envíen a SNS.
SQS esta distribuido hacer cola sistema. Los mensajes son no empujado a los receptores. Los receptores tienen que sondear o tirar mensajes de SQS. Varios receptores no pueden recibir mensajes al mismo tiempo. Cualquier receptor puede recibir un mensaje, procesarlo y eliminarlo. Otros receptores no reciben el mismo mensaje más tarde. El sondeo introduce 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 que un número y tipo de suscriptores desconocidos reciban mensajes, necesita SNS.
No tiene que acoplar SNS y SQS siempre. Puede hacer que SNS envíe mensajes a un punto final de correo electrónico, SMS o HTTP, además de SQS. Hay ventajas de acoplar SNS con SQS. Es posible que no desee que un servicio externo realice conexiones con sus hosts (un firewall puede bloquear todas las conexiones entrantes a su host desde el exterior).
Su punto final puede simplemente morir debido a un gran volumen de mensajes. El correo electrónico y los SMS tal vez no sean su opción para procesar mensajes rápidamente. Al acoplar SNS con SQS, puede recibir mensajes a su ritmo. Permite a los clientes estar fuera de línea, tolerantes a las fallas de la red y del 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 de mensajes pueden provocar que los mensajes se descarten.
SQS se utiliza principalmente para desacoplar aplicaciones o integrar aplicaciones. Los mensajes se pueden almacenar en SQS por un período corto 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
- SQS: Cola (similar a JMS)
- SNS: tema (sistema Pub / Sub)
Consumo de mensajes
- SQS: mecanismo de extracción: los consumidores sondean y extraen mensajes de SQS
- SNS: mecanismo de inserción: SNS envía mensajes a los consumidores
Caso de uso
- SQS: desacoplar dos aplicaciones y permitir el procesamiento asíncrono paralelo
- SNS: Fanout: procesa el mismo mensaje de varias formas
Persistencia
- SQS: los mensajes se conservan durante algún tiempo (configurable) si no hay ningún consumidor disponible (máximo dos semanas), por lo que el consumidor no tiene que estar activo cuando se agregan mensajes a la cola.
- SNS: Sin persistencia. Cualquier 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 después de algunos reintentos.
Tipo de consumidor
- SQS: todos los consumidores son típicamente idénticos y, por lo tanto, procesan los mensajes exactamente de la misma manera (cada mensaje es procesado una vez por un consumidor, aunque en raras ocasiones los mensajes pueden reenviarse)
- SNS: los consumidores pueden procesar los mensajes de diferentes maneras
Aplicaciones de muestra
- SQS: marco de trabajos: los trabajos se envían a SQS y los consumidores del otro extremo pueden procesar los trabajos de forma asincrónica. Si aumenta la frecuencia del trabajo, simplemente se puede aumentar el número de consumidores para lograr un mejor rendimiento.
- SNS: procesamiento de imágenes. Si alguien carga una imagen en S3, marca de agua esa imagen, crea una miniatura y también envía una Gracias Email. En ese caso, S3 puede publicar notificaciones a un tema de SNS con tres consumidores escuchándolo. La primera marca de agua la imagen, la segunda crea una miniatura y la tercera envía una Gracias Email. Todos ellos reciben el mismo mensaje (URL de la imagen) y realizan su procesamiento en paralelo.
Puedes ver SNS como un tema tradicional que puede tener varios suscriptores. Puede tener suscriptores heterogéneos para un tema de SNS determinado, incluidos Lambda y SQS, por ejemplo. También puede enviar mensajes SMS o incluso correos electrónicos listos para usar utilizando SNS. Una cosa a considerar 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 un cola, donde almacena mensajes y suscribe a un consumidor (sí, puede tener N consumidores en una cola SQS, pero se complicaría muy rápidamente y sería mucho más difícil de administrar considerando que todos los consumidores necesitarían leer el mensaje al menos una vez, por lo que uno es mejor con SNS combinado con SQS para este caso de uso, donde SNS enviaría notificaciones a N colas de SQS y cada cola tendría un suscriptor, solo) para procesar estos mensajes. A partir del 28 de junio de 2018, AWS admite activadores Lambda para SQS, lo que significa que no es necesario encuesta para 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 vuelvan a leer en caso de que haya olvidado eliminarlos manualmente. Sugiero echar un vistazo a Lambda Retry Behavior para comprender mejor cómo funciona.
Una gran ventaja de utilizar 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 a la cola de SQS, se activarán 10 funciones de Lambda (teniendo en cuenta el comportamiento de escalado automático predeterminado para Lambda) y procesarán estos 100 mensajes (manténgase en Tenga en cuenta que este es el camino feliz, ya que en la práctica, algunas funciones Lambda más podrían acelerar la lectura de menos de los 10 mensajes en el lote, pero entiendes la idea). Sin embargo, si publicara estos mismos 100 mensajes en SNS, 100 funciones Lambda aumentarían, aumentando innecesariamente los costos y consumiendo su concurrencia Lambda.
Sin embargo, si todavía está ejecutando servidores tradicionales (como instancias EC2), aún necesitará sondear los mensajes y administrarlos manualmente.
Tu también tienes Colas FIFO SQS, que garantizan el orden de entrega de los mensajes. SQS FIFO también se admite como fuente de eventos para Lambda a partir de noviembre de 2019
Aunque hay cierta superposición en sus casos de uso, tanto SQS como SNS tienen su propio foco de atención.
Usar SNS si:
- múltiples suscriptores es un requisito
- enviar SMS / correo electrónico desde el primer momento es útil
Usar SQS si:
- solo se necesita un suscriptor
- el procesamiento por lotes es importante
Te mostramos las comentarios y valoraciones de los usuarios
Si crees que te ha sido de provecho este artículo, sería de mucha ayuda si lo compartieras con más juniors así nos ayudas a extender nuestra información.