Politique de nouvelle tentative de Google Pub/Sub : configuration de l'intervalle exponentiel
Cloud Pub/Sub a récemment introduit une fonctionnalité côté serveur RetryPolicy qui permet de configurer interruption exponentielle des tentatives de livraison de messages. La documentation fournie explique que les paramètres MinimumBackoff et MaximumBackoff déterminent les périodes d'attente initiales et maximales entre les tentatives. Cependant, la relation entre ces paramètres et InitialInterval et MaxInterval définis dans la bibliothèque github.com/cenkalti/backoff n'est toujours pas claire.
L'algorithme ExponentialBackOff utilisé par github.com/cenkalti/backoff définit l'intervalle de nouvelle tentative aléatoire. comme :
randomized interval = RetryInterval * (random value in range [1 - RandomizationFactor, 1 + RandomizationFactor])
où RetryInterval commence à InitialInterval et est plafonné par MaxInterval.
MinimumBackoff et MaximumBackoff sont-ils mappés à InitialInterval et MaxInterval ?
Oui. MinimumBackoff correspond à la période d'attente initiale et MaximumBackoff correspond à la plus grande durée autorisée entre les tentatives. Ceci est analogue à InitialInterval et MaxInterval sur github.com/cenkalti/backoff.
Exemple d'utilisation et d'observations
L'exemple de programme fourni illustre le comportement d'attente exponentielle. Avec MinimumBackoff défini sur 5 s et MaximumBackoff sur 60 s, le temps entre les tentatives augmente comme prévu, jusqu'au maximum de 60 s.
Réduire MinimumBackoff et MaximumBackoff à 1 s et 2 s, respectivement, entraîne des tentatives plus fréquentes avec un retard constant d'environ 3 s. Cela suggère que l'algorithme d'intervalle exponentiel fait de son mieux pour rester dans le maximum spécifié.
Randomisation, multiplicateur et MaxElapsedTime
L'exemple de sortie ne le fait pas présentent une randomisation visible et aucun multiplicateur explicite n’est spécifié. L'algorithme d'intervalle exponentiel dans Pub/Sub utilise une formule similaire à celle décrite sur github.com/cenkalti/backoff.
En ce qui concerne MaxElapsedTime, Cloud Pub/Sub n'a actuellement pas de concept équivalent. Cependant, vous pouvez implémenter un comportement similaire en utilisant les files d'attente de lettres mortes pour arrêter les tentatives après un nombre spécifié de tentatives.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!