AWS Messages - Amazon SQS et SNS
Photo de Zach Vessels sur Unsplash
  • Une architecture particulièrement bien adaptĂ©e au Cloud est l’architecture distribuĂ©e : chaque composant applicatif peut ĂŞtre dimmensionnĂ© en fonction des besoins. Les microservices sont une des variations de ce type d’architecture.
  • Cela pose alors le problème de communication entre ces composants : des interactions couplĂ©es (deux Ă  deux) sont difficiles Ă  maintenir et problĂ©matiques en cas de dimmensionnements diffĂ©rents.

Il est vite apparue une brique logicielle intermédiaire (Middleware) pour assurer un découplage et une communication asynchrone entre ces composants.

Nous allons voir ici 2 types de Message-Oriented Middleware (MOM) :

  • Amazon SQS qui est une file d’attente de Messages (Message Queue)
  • Amazon SNS qui suit un modèle Publish/Subscribe de Messages


Amazon Simple Queue Service

Exemple d'utilisation d'une SQS Queue
Exemple d'utilisation d'une SQS Queue

Caractéristiques

Amazon Simple Queue Service ou SQS est un service de file d’attente de messages, entièrement géré par AWS :

  • Nombre illimitĂ© de files d’attente et de messages
  • Taille du message pouvant atteindre 256 Ko
    • Si vous avez besoin de plus grands messages, utilisez Amazon SQS Extended Client Library for Java qui stocke le contenu du message dans Amazon S3 et renvoie juste sa rĂ©fĂ©rence
  • Conservation des messages de 4 jours par dĂ©faut (peut aller jusqu’à 14 jours)

Standard vs FIFO

Il prends en charge 2 types de Queues aux caractéristiques différentes :

Standard QueueFIFO Queue
Débit illimité : prend en charge un nombre pratiquement illimité de transactions par seconde (TPS)Haut débit : par défaut, prend en charge jusqu’à 300 messages par secondes (300 opérations d’envoi, de réception ou de suppression par seconde). Si vous traitez par lots de 10 messages par opération (au maximum), les files d’attente FIFO peuvent prendre en charge jusqu’à 3 000 messages par seconde.
Remis au moins une fois : un message est remis au moins une fois, mais il peut arriver qu’il soit remis en plusieurs exemplaires.Traitement en une seule fois : un message est remis une fois et reste disponible jusqu’à son traitement et sa suppression par un destinataire. Pas de doublon.
Ordonné dans la mesure du possible : il peut arriver que les messages soient remis dans un ordre différent de celui de leur envoi.Premier entré, premier sorti : l’ordre dans lequel les messages sont envoyés et reçus est rigoureusement conservé (First In, First Out).

Fonctionnement

  1. Production d’un message en appelant l’API SendMessage à l’aide du SDK
  2. Consommation du message en appelant ReceiveMessage (possibilité de recevoir 1 à 10 messages par appel)
  3. Le message devient invisible pendant le temps défini dans Message visibility timeout (30s par défaut)
    • Au bout du Message visibility timeout, le message redevient visible dans la Queue et peut ĂŞtre consommĂ© Ă  nouveau par un autre consommateur s’il n’a pas Ă©tĂ© supprimĂ© entre temps ou si ce temps n’a pas Ă©tĂ© modifiĂ© par le consommateur avec l’API ChangeMessageVisibility
  4. Suppression du message en appelant DeleteMessage

Sécurité

  • Chiffrement en transit (HTTPS) et au repos (AWS KMS)
  • ContrĂ´le d’accès Ă  l’API SQS par une Policy IAM
  • SQS Access Policy pour :
    • Des accès Ă  une Queue cross-account
    • Donner accès Ă  la Queue, en Ă©criture, Ă  d’autres services AWS

Auto Scaling

Une architecture classique est l’Auto Scaling des consommateurs par la Queue elle-même :

Exemple d'Auto Scaling d'une SQS Queue
Exemple d'Auto Scaling d'une SQS Queue

Autres paramètres

Dead Letter Queue

Lorsqu’un message revient dans la Queue un MaximumReceives de fois, il est possible de le rediriger vers une autre Queue, la Dead Letter Queue pour analyse ultérieure

Delay Queue

Lorsqu’il arrive dans la Queue, un message peut être masqué aux consommateur pendant le Delay Queue d’un maximum de 15 min

Long Polling

Lorsqu’un consommateur demande un message à une Queue vide, il peut attendre Long Polling sec. qu’un message arrive. Sa valeur possible va de 1 à 20 sec

Paramètres spécifiques aux FIFOs

DĂ©doublonnage

Il existe 2 méthodes de calcul de doublon dans les FIFO Queue :

  • Hash SHA-256 du contenu du message
  • Deduplication ID indiquĂ© explicitement dans le message produit

Groupement de messages

Dans une même FIFO, il est possible de grouper des messages en spécifiant un MessageGroupID.

Dans ce cas, chaque Groupe de message ne peut être consommé que par un seul consommateur et l’ordre des messages est propre à chaque groupe : cela permet une consommation en parallèle des messages d’une FIFO.


Amazon Simple Notification Service

Exemple d'utilisation d'une SNS Queue
Exemple d'utilisation d'une SNS Queue

Amazon Simple Notification Service (Amazon SNS) est un service géré automatiquement par AWS qui livre des messages de Publishers vers des Subscribers (modèle Pub/Sub également connu sous le nom de Producteurs/Consommateurs) :

  • Une Queue SNS est composĂ©e de Topics et on parle de Notification plutĂ´t que de Message
  • Il peut y avoir 100.000 Topics par Queue SNS
  • Un Subscriber s’abonne Ă  un Topic et reçoit toutes les Notifications (Messages) qui y sont publiĂ©s
    • Il peut aussi filtrer les Notifications d’un Topic pour n’en recevoir que certaines
  • Il peut y avoir jusqu’à 10.000.000 de Subscribers par Topic

  • les Publishers qui peuvent Ă©mettre des notifications dans SNS sont :
    • De très nombreux Services AWS :
      • CloudWatch et ses alarmes
      • les Auto Scaling Groups
      • Les events de Amazon S3
      • Les events de CloudFormation
  • Les Subscribers peuvent ĂŞtre de type :
    • Application-To-Application (A2A) pour des messages inter-applicatifs Ă  destination de :
      • Amazon Kinesis Data Firehose
      • Lambda functions
      • Queues SQS
      • Endpoints HTTP/S
      • AWS Event Fork Pipelines
    • Application-To-Person (A2P) pour notifier des utilisateurs au moyen de :
      • Applications mobiles
      • NumĂ©ro de tĂ©lĂ©phone mobiles
      • Adresses email

On retrouve beaucoup des mêmes fonctionnalités que Amazon SQS notamment en termes de Sécurité et types de Queue Standard ou FIFO

Pattern d’architecture Fan Out

L’utilisation de Amazon SNS + Amazon SQS permet de concevoir des architectures parfaitement découplées, sans perte de données, parallèles et asynchrones, appelées Fan Out (pour ventiler un gros traitement en plusieurs plus petits par exemple)

Fan Out

Exemple d'architecture Fan Out SNS + SQS (extrait de la documentation AWS)
Exemple d'architecture Fan Out SNS + SQS (extrait de la documentation AWS)

FIFO Fan Out

Exemple d'architecture FIFO Fan Out SNS + SQS (extrait de la documentation AWS)
Exemple d'architecture FIFO Fan Out SNS + SQS (extrait de la documentation AWS)
Jean-Jerome Levy

Ecrit par

Jean-JĂ©rĂ´me LĂ©vy

Consultant DevOps

Professionnel chevronné dans le domaine de l’informatique, cumulant plus de 20 années d’expérience au sein de DSI de grandes entreprises, mon expertise diversifiée m’a permis de jouer un rôle clé dans de nombreux projets, caractérisés par la mise en place de pratiques DevOps innovantes.