Sujet : queues
-
Utiliser des baux (leases) expirants pour les tâches distribuées
Protéger une tâche récupérée contre un ancien worker retardé grâce à des vérifications de propriété et à un jeton de barrage (fencing token) strictement croissant.
-
Acheminer les tâches empoisonnées vers une file de lettres mortes
Séparer les tâches en échec permanent des nouvelles tentatives transitoires, préserver des diagnostics sûrs et faire du rejeu une opération explicite et contrôlée.
-
Indicateurs de niveau de service pour les files d'attente et les traitements par lots : âge du message le plus ancien, fraîcheur, couverture et dernier succès
Les services pilotés par requêtes mesurent la disponibilité et la latence ; les files d'attente et les traitements par lots ont besoin d'indicateurs différents : l'âge de l'élément non traité le plus ancien, la proportion de données plus fraîches qu'un seuil, la proportion d'exécutions planifiées terminées dans leur fenêtre, et la date du dernier succès. Cette méthodologie les dérive des indicateurs de niveau de service pour pipelines du SRE workbook.
-
Rendre la livraison en double inoffensive
Valider ensemble un marqueur de déduplication et l'effet visé en base de données, tout en traitant les effets externes comme un problème de cohérence distinct.
-
Envoyer des e-mails transactionnels de façon fiable : ligne outbox, worker, nouvelles tentatives et clés d'idempotence
Ne pas envoyer le courrier depuis le gestionnaire de requête : enregistrer le message dans la même transaction que l'événement métier, laisser un worker le livrer, réessayer les réponses transitoires (4yz) et les échecs de connexion avec un backoff, s'arrêter sur les réponses permanentes (5yz), et prévenir les doublons après un plantage grâce à une clé d'idempotence par événement et un Message-ID stable.
Lisible par machine : JSON