web-dev-qa-db-fra.com

Quelle est la différence entre Amazon SNS et Amazon SQS?

Je ne comprends pas quand utiliser SNS par rapport à SQS et pourquoi sont-ils toujours couplés?

326
Nick Ginanto

SNS est un système distribué publish-subscribe. Les messages sont poussés aux abonnés au fur et à mesure de leur envoi par les éditeurs au SNS.

SQS est distribué mise en file d'attente système. Les messages ne sont pas envoyés aux destinataires. Les destinataires doivent interroger ou extraire les messages de SQS. Les messages ne peuvent pas être reçus par plusieurs destinataires en même temps. Tout destinataire peut recevoir un message, le traiter et le supprimer. Les autres destinataires ne reçoivent pas le même message ultérieurement. L'interrogation introduit de manière inhérente une certaine latence dans la livraison des messages dans SQS, contrairement à SNS où les messages sont immédiatement transmis aux abonnés. SNS prend en charge plusieurs points finaux tels que courrier électronique, SMS, point final HTTP et SQS. Si vous voulez que le nombre et le type d'abonnés inconnus reçoivent des messages, vous avez besoin de SNS.

Vous n'avez pas toujours besoin de coupler SNS et SQS. En dehors de SQS, vous pouvez faire en sorte que SNS envoie des messages par courrier électronique, SMS ou point d'accès HTTP. Le couplage SNS avec SQS présente des avantages. Vous pouvez ne pas souhaiter qu'un service externe établisse des connexions avec vos hôtes (le pare-feu peut bloquer toutes les connexions entrantes avec votre hôte de l'extérieur). Votre point final peut simplement mourir à cause d’un volume important de messages. E-mail et SMS n'est peut-être pas votre choix de traiter les messages rapidement. En couplant SNS avec SQS, vous pouvez recevoir des messages à votre rythme. Il permet aux clients d’être déconnectés, tolérants aux défaillances du réseau et de l’hôte. Vous obtenez également une livraison garantie. Si vous configurez SNS pour envoyer des messages à un terminal HTTP, à un courrier électronique ou à un SMS, plusieurs échecs d'envoi de message peuvent entraîner la suppression du message.

SQS est principalement utilisé pour découpler des applications ou pour intégrer des applications. Les messages peuvent être stockés dans SQS pour une courte durée (maximum 14 jours). SNS distribue plusieurs copies du message à plusieurs abonnés. Par exemple, supposons que vous souhaitiez répliquer les données générées par une application sur plusieurs systèmes de stockage. Vous pouvez utiliser SNS et envoyer ces données à plusieurs abonnés, chacun répliquant les messages qu'il reçoit sur différents systèmes de stockage (s3, disque dur de votre hôte, base de données, etc.).

480
Srikanth

Voici une comparaison des deux:

Type d'entité

  • SQS: File d'attente (similaire à JMS)
  • SNS: Sujet (système Pub/Sub)

consommation de message

  • SQS: Pull Mechanism - Les consommateurs interrogent et extraient des messages de SQS
  • SNS: Push Mechanism - SNS envoie des messages aux consommateurs

Cas d'utilisation

  • SQS: découpler 2 applications et permettre le traitement asynchrone parallèle
  • SNS: Fanout - Traitement du même message de plusieurs manières

persistance

  • SQS: les messages sont conservés pendant une certaine durée (configurable) si aucun consommateur n'est disponible
  • SNS: Pas de persistance. Quel que soit le consommateur présent au moment de l'arrivée du message, il reçoit le message et le message est supprimé. Si aucun consommateur n'est disponible, le message est perdu.

Type de consommateur

  • SQS: Tous les consommateurs sont supposés être identiques et traitent donc les messages exactement de la même manière
  • SNS: les consommateurs peuvent traiter les messages de différentes manières

Exemples d'applications

  • Cadre SQS: Jobs: les travaux sont soumis à SQS et les consommateurs situés à l'autre extrémité peuvent les traiter de manière asynchrone. Si la fréquence des tâches augmente, le nombre de consommateurs peut simplement être augmenté pour obtenir un meilleur débit.
  • SNS: traitement d'image. Si quelqu'un télécharge une image sur S3, placez un filigrane sur cette image, créez une vignette et envoyez également un courrier électronique de remerciement. Dans ce cas, S3 peut publier des notifications sur une rubrique SNS avec 3 consommateurs l'écoutant. La première filigrane l'image, la deuxième crée une vignette et la troisième envoie un courriel de remerciement. Tous reçoivent le même message (URL de l'image) et effectuent leur traitement en parallèle.
141
Arafat Nalkhande

De aws doc:

Amazon SNS permet aux applications d'envoyer des messages urgents à plusieurs abonnés via un mécanisme "Push", évitant ainsi la nécessité de vérifier ou d'analyser périodiquement les mises à jour.

Amazon SQS est un service de file d'attente de messages utilisé par les applications distribuées pour échanger des messages via un modèle d'interrogation. Il peut également être utilisé pour découpler les composants d'envoi et de réception, sans exiger que chaque composant soit disponible simultanément.

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

31
Tommy

AWS SNS est un réseau d’abonnés d’éditeur, où les abonnés peuvent s’abonner à des sujets et recevoir des messages chaque fois qu’un éditeur publie un article sur ce sujet.

AWS SQS est un service de file d'attente qui stocke les messages dans une file d'attente. SQS ne peut remettre aucun message lorsqu'un service externe (lambda, EC2, etc.) est nécessaire pour interroger SQS et récupérer des messages provenant de SQS.

SNS et SQS peuvent être utilisés ensemble pour plusieurs raisons.

  1. Il peut y avoir différents types d’abonnés pour lesquels certains ont besoin de la livraison immédiate des messages, alors que d’autres exigeraient que le message soit conservé, pour une utilisation ultérieure via la scrutation. Voir ceci lien .

  2. Le " Fanout Pattern ." Ceci concerne le traitement asynchrone des messages. Lorsqu'un message est publié sur SNS, il peut le distribuer à plusieurs files d'attente SQS en parallèle. Cela peut être très utile lors du chargement de vignettes dans une application en parallèle, lors de la publication des images. Voir ceci lien .

  3. Stockage permanent . Lorsqu'un service qui va traiter un message n'est pas fiable. Dans un cas comme celui-ci, si SNS envoie une notification à un service et que ce service est indisponible, la notification sera perdue. Par conséquent, nous pouvons utiliser SQS comme stockage persistant, puis le traiter ultérieurement.

23
Keet Sugathadasa

Les réponses à ce sujet sont un peu dépassées. J'ai donc décidé d'y ajouter mes deux sous:

Vous pouvez voir SN comme un sujet classique dans lequel vous pouvez avoir plusieurs abonnés. Vous pouvez avoir des abonnés hétérogènes pour une rubrique SNS donnée, y compris Lambda et SQS, par exemple. Vous pouvez également envoyer SMS des messages ou même des e-mails prêts à l'emploi à l'aide de SNS. Une chose à prendre en compte dans SNS est qu'un seul message (notification) est reçu à la fois, vous ne pouvez donc pas tirer parti du traitement par lots.

SQS, n’est en revanche qu’une file d’attente, dans laquelle vous stockez des messages et abonnez un consommateur (oui, vous pouvez avoir N consommateurs une file d’attente SQS, mais elle deviendrait vite très compliquée et beaucoup plus difficile à gérer, étant donné que tous les consommateurs devraient lire le message au moins une fois. Il est donc préférable de combiner SNS avec SQS pour ce cas d’utilisation, où SNS enverrait des notifications à. N files d'attente SQS et chaque file d'attente aurait un seul abonné) pour traiter ces messages. À partir du 28 juin 2018, AWS prend en charge les déclencheurs Lambda pour SQS , ce qui signifie que vous n'avez plus à interroger les messages. . De plus, vous pouvez configurer un DLQ sur votre file d'attente SQS source pour envoyer des messages en cas d'échec. En cas de succès, les messages sont automatiquement supprimés (il s'agit d'une autre amélioration importante). Vous n'avez donc pas à vous soucier des messages déjà traités qui sont relus au cas où vous auriez oublié de les supprimer manuellement. Je suggère de jeter un oeil sur Comportement des tentatives lambda pour mieux comprendre comment cela fonctionne. L’utilisation de SQS présente un grand avantage: elle permet le traitement par lots. Chaque lot peut contenir jusqu’à 10 messages. Ainsi, si 100 messages arrivent en même temps dans votre file d’attente SQS, 10 fonctions Lambda seront créées (compte tenu du comportement de mise à l’échelle automatique par défaut de Lambda) et seront traitées par ces 100 messages. Remarquez que c’est la voie à suivre car, dans la pratique, quelques fonctions Lambda supplémentaires pourraient lire moins que les 10 messages du lot, mais vous en avez l’idée). Si vous publiez ces mêmes 100 messages sur SNS, toutefois, 100 fonctions Lambda seraient mises en service, ce qui augmenterait inutilement les coûts et utiliserait votre accès simultané Lambda. Toutefois, si vous utilisez toujours des serveurs traditionnels (tels que des instances EC2), vous devrez toujours rechercher les messages et les gérer manuellement.

Vous avez également des files d'attente FIFO SQS , qui garantissent l'ordre de livraison des messages. Lambda ne prend pas en charge ce déclencheur. Par conséquent, lors du choix de ce type de file d'attente, gardez à l'esprit que l'interrogation est toujours nécessaire et que vous devez supprimer les messages manuellement.

Bien que leurs cas d'utilisation se chevauchent, SQS et SNS ont chacun leur propre projecteur.

Utilisez SNS si:

  • plusieurs abonnés est une exigence
  • l'envoi de SMS/E-mail est pratique

Utilisez SQS si:

  • un seul abonné est nécessaire
  • le dosage est important
12
Thales Minussi

En termes simples, SNS - envoie des messages à l’abonné à l’aide du mécanisme Push et ne nécessite aucun retrait. SQS - il s'agit d'un service de file d'attente de messages utilisé par les applications distribuées pour échanger des messages via un modèle d'interrogation. Il peut également être utilisé pour découpler les composants d'envoi et de réception.

Un modèle courant consiste à utiliser SNS pour publier des messages dans des files d'attente Amazon SQS afin d'envoyer de manière fiable des messages à un ou plusieurs composants système de manière asynchrone. Référence de https://aws.Amazon.com/sns/faqs/

3
Krunal Barot