Groupcache: comment émuler le délai d'expiration

Créé le 29 juil. 2013  ·  3Commentaires  ·  Source: golang/groupcache

J'ai remarqué que dans la décision de conception, Setting and expiration time été omis. J'imagine que c'est parce que vous avez une idée sur la façon d'émuler cette fonctionnalité.

Le cas d'utilisation que j'ai en tête consiste à créer un proxy inverse mis en cache devant une application Web. Je sais que les pages doivent être mises en cache pendant X min.

Pourriez-vous s'il vous plaît expliquer un peu comment vous aborderiez cela?

(Je ne suis pas sûr que ce soit le bon endroit pour poser la question.)

Commentaire le plus utile

Pour autant que j'aie compris la conception de groupcache, vous ne pouvez pas invalider ou mettre à jour les éléments mis en cache. Cette fonctionnalité a été laissée de côté car elle est extrêmement difficile dans un système distribué et nécessiterait des algorithmes de consensus coûteux (par exemple, paxos).

Vous pouvez cependant générer une clé de cache unique toutes les X minutes en encodant les informations de temps dans la clé de cache elle-même. Par exemple, "foo-12:30" peut décrire de manière unique l'élément "foo" à 12:30. Votre application peut alors accéder à cet élément jusqu'à, disons, 12h40. À ce stade, un nouvel élément, "foo-12:40" peut être généré et l'ancien élément ("foo-12:30") expirera une fois que les clients auront cessé d'y accéder.

Si votre application distribuée est capable de mettre à jour et de récupérer les numéros de révision de manière cohérente (vous pouvez le faire par exemple avec doozerd, zookeeper ou la solution de base de données de votre choix), vous pouvez également encoder ce numéro de révision dans le cadre de la clé de cache. Alternativement, vous pouvez également utiliser les en-têtes HTTP "Last-Modified" ou "ETag" comme une sorte de numéro de révision dans votre proxy Web.

Tous les 3 commentaires

Pour autant que j'aie compris la conception de groupcache, vous ne pouvez pas invalider ou mettre à jour les éléments mis en cache. Cette fonctionnalité a été laissée de côté car elle est extrêmement difficile dans un système distribué et nécessiterait des algorithmes de consensus coûteux (par exemple, paxos).

Vous pouvez cependant générer une clé de cache unique toutes les X minutes en encodant les informations de temps dans la clé de cache elle-même. Par exemple, "foo-12:30" peut décrire de manière unique l'élément "foo" à 12:30. Votre application peut alors accéder à cet élément jusqu'à, disons, 12h40. À ce stade, un nouvel élément, "foo-12:40" peut être généré et l'ancien élément ("foo-12:30") expirera une fois que les clients auront cessé d'y accéder.

Si votre application distribuée est capable de mettre à jour et de récupérer les numéros de révision de manière cohérente (vous pouvez le faire par exemple avec doozerd, zookeeper ou la solution de base de données de votre choix), vous pouvez également encoder ce numéro de révision dans le cadre de la clé de cache. Alternativement, vous pouvez également utiliser les en-têtes HTTP "Last-Modified" ou "ETag" comme une sorte de numéro de révision dans votre proxy Web.

Oui, ce que tux21b a dit. (intentionnellement omis, du moins pour l'instant).

Merci @tux21b pour la suggestion concernant les révisions !

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

AlexanderChen1989 picture AlexanderChen1989  ·  6Commentaires

orcaman picture orcaman  ·  9Commentaires

abennett picture abennett  ·  3Commentaires

cowboyrushforth picture cowboyrushforth  ·  5Commentaires

mastrolinux picture mastrolinux  ·  3Commentaires