Je ne comprends pas quand utiliser SNS par rapport à SQS et pourquoi sont-ils toujours couplés?
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.).
Voici une comparaison des deux:
Type d'entité
consommation de message
Cas d'utilisation
persistance
Type de consommateur
Exemples d'applications
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
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.
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 .
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 .
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.
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:
Utilisez SQS si:
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/