Nouvelle tentative de distribution des messages Amazon SNS - Amazon Simple Notification Service

Nouvelle tentative de distribution des messages Amazon SNS

Amazon SNS définit une politique de distribution pour chaque protocole de distribution. La politique de distribution définit comment Amazon SNS tente à nouveau de livrer des messages lorsque des erreurs côté serveur se produisent (lorsque le système qui héberge le point de terminaison abonné devient indisponible). Lorsque la politique de distribution expire, Amazon SNS cesse de retenter la distribution et rejette le message, sauf si une file d'attente de lettres mortes est jointe à l'abonnement. Pour plus d'informations, consultez Files d'attente de lettres mortes (DLQ)) d'Amazon SNS.

Protocoles et politiques de distribution

Note
  • À l'exception de HTTP/S, vous ne pouvez pas modifier les politiques de distribution définies par Amazon SNS. Seul HTTP/S prend en charge les politiques personnalisées. Voir Création d'une politique de distribution HTTP/S.

  • Amazon SNS applique l'instabilité aux nouvelles tentatives de distribution. Pour plus d'informations, consultez la publication Exponential Backoff and Jitter sur le blog AWS Architecture.

  • L’intervalle total entre les nouvelles tentatives pour un point de terminaison HTTP/S ne peut pas dépasser 3 600 secondes. Il s'agit d'une limite fixe qui ne peut pas être augmentée.

Type de point de terminaison Protocoles de distribution Phase nouvelle tentative immédiate (sans délai) Phase de pré-interruption Phase d'interruption Phase de post-interruption Nombre total de tentatives
Points de terminaison gérés par AWS Amazon Kinesis Data Firehose¹ 3 fois, sans délai 2 fois, 1 seconde d'intervalle 10 fois, avec retour exponentiel, de 1 seconde à 20 secondes 100 000 fois, 20 secondes d'intervalle 100 015 fois, plus de 23 jours
AWS Lambda
Amazon SQS
Points de terminaison gérés par le client SMTP 0 fois, sans délai 2 fois, 10 secondes d'intervalle 10 fois, avec retour exponentiel, de 10 secondes à 600 secondes (10 minutes) 38 fois, 600 secondes (10 minutes) d'intervalle 50 tentatives, plus de 6 heures
SMS
Push mobile

¹ Pour les erreurs de limitation avec le protocole Kinesis Data Firehose, Amazon SNS utilise la même politique de distribution que pour les points de terminaison gérés par le client.

Étapes de la politique de distribution

Le diagramme suivant montre les phases d'une politique de distribution.

Chaque politique de distribution comprend quatre phases.

  1. Phase de nouvelle tentative immédiate (sans délai) – Cette phase se produit immédiatement après la tentative de distribution initiale. Il n'y a aucun délai entre les relances dans cette phase.

  2. Phase de pré-interruption – Cette phase suit la phase de nouvelle tentative immédiate. Amazon SNS utilise cette phase pour tenter une série de nouvelles tentatives avant d'appliquer une fonction d'interruption. Cette phase spécifie le nombre de nouvelles tentatives et le délai entre elles.

  3. Phase d'interruption – Cette phase contrôle le délai entre les nouvelles tentatives à l'aide de la fonction retry-backoff. Cette phase définit un délai minimum, un délai maximum et une fonction d’interruption des nouvelles tentatives qui définit la vitesse à laquelle le délai augmente depuis le délai minimum au délai maximum. La fonction d’interruption peut être arithmétique, exponentielle, géométrique ou linéaire.

  4. Phase de post-interruption – Cette phase suit la phase d'interruption. Il spécifie un certain nombre de nouvelles tentatives et la longueur du délai entre elles. Il s’agit de la phase finale.

Création d'une politique de distribution HTTP/S

Vous pouvez utiliser une politique de distribution et ses quatre phases pour définir comment Amazon SNS effectue une nouvelle distribution des messages aux points de terminaison HTTP/S. Amazon SNS vous permet de remplacer la politique de nouvelle tentative par défaut pour les points de terminaison HTTP lorsque vous souhaitez, par exemple, la personnaliser en fonction de la capacité de votre serveur HTTP.

Vous pouvez définir votre politique de distribution HTTP/S en tant qu'objet JSON au niveau de l'abonnement ou de la rubrique. Lorsque vous définissez la politique au niveau de la rubrique, elle s'applique à tous les abonnements HTTP/S associés à la rubrique.

Vous devez personnaliser votre politique de distribution en fonction de la capacité de votre serveur HTTP/S. Vous pouvez définir la politique en tant qu'attribut d’une rubrique ou d'un abonnement. Si tous les abonnements HTTP/S de votre rubrique ciblent le même serveur HTTP/S, nous vous recommandons de définir la politique de remise en tant qu'attribut de rubrique, afin qu'elle reste valable pour tous les abonnements HTTP/S de la rubrique. Sinon, vous devez composer une politique de distribution pour chaque abonnement HTTP/S de votre rubrique, en fonction de la capacité du serveur HTTP/S ciblé par la politique.

L'objet JSON suivant représente une politique de distribution qui indique à Amazon SNS de faire une nouvelle tentative pour une distribution HTTP/S échouée, comme suit :

  1. 3  fois immédiatement dans la phase sans délai

  2. 2 fois (1 seconde d'intervalle) dans la phase de pré-interruption

  3. 10 fois (avec interruption exponentielle de 1 à 60 secondes)

  4. 35 fois (60 secondes d'intervalle) dans la phase de post-interruption

Dans cet exemple de politique de distribution, Amazon SNS effectue un total de 50 tentatives avant de rejeter le message. Pour conserver le message après l'épuisement des nouvelles tentatives spécifiées dans la politique de distribution, configurez votre abonnement pour déplacer les messages non délivrables vers une file d'attente de lettres mortes (DLQ). Pour plus d'informations, consultez Files d'attente de lettres mortes (DLQ)) d'Amazon SNS.

Note

En utilisant la propriété maxReceivesPerSecond, cette politique de distribution indique également à Amazon SNS de limiter les distributions à un maximum de 10 par seconde. Ce taux d'auto-limitation pourrait faire que le nombre de messages publiés (trafic entrant) est supérieure au nombre de messages délivrés (trafic sortant). Lorsqu'il y a plus de trafic entrant que sortant, votre abonnement peut accumuler un important arriéré de messages, ce qui peut entraîner une latence élevée de remise des messages. Dans vos politiques de distribution, veillez à spécifier une valeur pour maxReceivesPerSecond qui n'a pas d'impact négatif sur votre application.

{ "healthyRetryPolicy": { "minDelayTarget": 1, "maxDelayTarget": 60, "numRetries": 50, "numNoDelayRetries": 3, "numMinDelayRetries": 2, "numMaxDelayRetries": 35, "backoffFunction": "exponential" }, "sicklyRetryPolicy": null, "throttlePolicy": { "maxReceivesPerSecond": 10 }, "guaranteed": false }

La politique de distribution est composée d'une politique de nouvelle tentative et d'une politique de limitation. Au total, une politique de distribution comprend huit attributs.

Politique Description Contrainte
minDelayTarget Délai minimal pour une nouvelle tentative.

Unité : secondes

1 jusqu'au délai maximal

Par défaut : 20

maxDelayTarget Délai maximal pour une nouvelle tentative.

Unité : secondes

Délai minimal jusqu'à 3 600

Par défaut : 20

numRetries Le nombre total de nouvelles tentatives, y compris les tentatives immédiates, antérieures à l’interruption, pendant l’interruption et postérieures à l’interruption. 0 à 100

Par défaut : 3

numMaxDelayRetries Le nombre de nouvelles tentatives dans la phase postérieure à l’interruption, avec le délai maximum entre elles. 0 ou plus

Par défaut : 0

numNoDelayRetries Le nombre de nouvelles tentatives à effectuer immédiatement, sans délai entre elles. 0 ou plus

Par défaut : 0

numMinDelayRetries Nombre de nouvelles tentatives dans la phase antérieure à l’interruption, avec le délai minimum entre elles spécifié. 0 ou plus

Par défaut : 0

backoffFunction Modèle d’interruption entre les nouvelles tentatives.

L'une des quatre options suivantes :

  • arithmétique

  • exponentielle

  • géométrique

  • linéaire

Par défaut : linéaire

sicklyRetryPolicy Cet attribut est devenu obsolète. Il est présent à des fins de rétrocompatibilité uniquement.

Par défaut:null

guaranteed Cet attribut est devenu obsolète. Il est présent à des fins de rétrocompatibilité uniquement.

Par défaut : faux

maxReceivesPerSecond Nombre maximal de distributions par seconde, par abonnement. 1 ou plus

Par défaut : pas de limitation

Amazon SNS utilise la formule suivante pour calculer le nombre de nouvelles tentatives dans la phase d'interruption :

numRetries - numNoDelayRetries - numMinDelayRetries - numMaxDelayRetries

Vous pouvez utiliser trois paramètres pour contrôler la fréquence des nouvelles tentatives dans la phase d’interruption.

  • minDelayTarget – Définit le délai associé à la première nouvelle tentative dans la phase d'interruption.

  • maxDelayTarget – Définit le délai associé à la nouvelle tentative finale dans la phase d'interruption.

  • backoffFunction – Définit l'algorithme utilisé par Amazon SNS pour calculer les délais associés à toutes les nouvelles tentatives entre la première et la dernière tentative dans la phase d'interruption. Vous pouvez utiliser l'une des quatre fonctions d’interruption de nouvelle tentative.

Le diagramme suivant montre comment chaque fonction d’interruption de nouvelle tentative affecte le délai associé aux nouvelles tentatives pendant la phase d’interruption : politique de distribution avec le nombre total de nouvelles tentatives défini sur 10, le délai minimum défini sur 5 secondes et le délai maximum défini sur 260 secondes. L'axe vertical représente le délai, en secondes, associé à chacune des 10 relances. L'axe horizontal représente le nombre de nouvelles tentatives, de la première à la dixième.