Comment Meta maintient la cohérence du cache tout en utilisant l’invalidation de cache (traduction)
(moonsub-kim.github.io)Incohérence du cache
- un serveur de cache envoie à la db une requête pour
x, et avant que la réponsex=42de la db n’arrive au cache- une mise à jour externe passe
x=43, etx=43est transmis au cache via une invalidation - le cache reçoit
x=43et l’applique - la réponse
x=42arrive en retard et est alors appliquée
- une mise à jour externe passe
- le problème ci-dessus peut être résolu en attachant une version aux données
- mais même avec une version, si une eviction de
x=43se produit,x=42peut quand même être appliqué
Polaris : service de mesure de l’incohérence du cache
- fonctionnement
- Polaris reçoit lui aussi les événements d’invalidation
- lorsqu’il reçoit un événement, il sonde tous les serveurs de cache pour vérifier s’ils conservent une version antérieure
- si le cache possède une version antérieure, cela est considéré comme une incohérence et l’événement peut être remis en file pour réessai
- car l’événement d’invalidation peut arriver en retard au serveur de cache
- après un certain délai (1 minute, 3 minutes, 5 minutes, etc.), une alerte d’incohérence est envoyée
- métrique
- elle indique si les écritures de cache correspondant à N nines sur les M dernières minutes sont cohérentes
- si l’on a 10 nines sur 5 minutes, cela signifie que, sur les 10 milliards d’écritures de cache les plus récentes sur 5 minutes, 1 est incohérente
Bibliothèque de journalisation pour déboguer l’incohérence du cache
- il est impossible de journaliser toutes les écritures de cache
- à l’origine, le cache a une charge majoritairement orientée lecture, mais la « journalisation » le transformerait en charge majoritairement orientée écriture
- une bibliothèque a donc été créée pour permettre la journalisation sur une fenêtre temporelle juste après qu’une invalidation se produit
- la bibliothèque est intégrée à tous les services impliqués dans l’invalidation
- grâce aux logs, lorsqu’une incohérence se produit, il est possible de reconstituer sous forme de timeline le processus qui y a conduit
Aucun commentaire pour le moment.