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.)
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 !
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.