Notei que na decisão de design Setting and expiration time
foi omitido. Imagino que seja porque você tem uma ideia de como emular esse recurso.
O caso de uso que tenho em mente é construir um proxy reverso em cache na frente de um aplicativo da web. Eu sei que as páginas devem ser armazenadas em cache por X min.
Você poderia explicar um pouco como você abordaria isso?
(Não tenho certeza se este é o lugar certo para fazer perguntas.)
Até onde eu entendi o design do groupcache, você não pode invalidar ou atualizar itens em cache. Este recurso foi deixado de fora porque é extremamente difícil em um sistema distribuído e exigiria algoritmos de consenso caros (por exemplo, paxos).
No entanto, você pode gerar uma chave de cache exclusiva a cada X minutos, codificando as informações de tempo na própria chave de cache. Por exemplo, "foo-12: 30" pode descrever exclusivamente o item "foo" no horário 12:30. Seu aplicativo pode acessar este item até, digamos, 12:40. Neste momento, um novo item, "foo-12: 40" pode ser gerado e o item antigo ("foo-12: 30") irá eventualmente expirar assim que os clientes pararem de acessá-lo.
Se seu aplicativo distribuído for capaz de atualizar e recuperar números de revisão de maneira consistente (você pode fazer isso, por exemplo, com doozerd, zookeeper ou a solução de banco de dados de sua escolha), você também pode codificar este número de revisão como parte da chave de cache. Alternativamente, você também pode usar os cabeçalhos HTTP "Last-Modified" ou "ETag" como algum tipo de número de revisão em seu proxy da web.
Sim, o que tux21b disse. (deixado de fora intencionalmente, pelo menos por enquanto).
Obrigado @ tux21b pela sugestão sobre as revisões!
Comentários muito úteis
Até onde eu entendi o design do groupcache, você não pode invalidar ou atualizar itens em cache. Este recurso foi deixado de fora porque é extremamente difícil em um sistema distribuído e exigiria algoritmos de consenso caros (por exemplo, paxos).
No entanto, você pode gerar uma chave de cache exclusiva a cada X minutos, codificando as informações de tempo na própria chave de cache. Por exemplo, "foo-12: 30" pode descrever exclusivamente o item "foo" no horário 12:30. Seu aplicativo pode acessar este item até, digamos, 12:40. Neste momento, um novo item, "foo-12: 40" pode ser gerado e o item antigo ("foo-12: 30") irá eventualmente expirar assim que os clientes pararem de acessá-lo.
Se seu aplicativo distribuído for capaz de atualizar e recuperar números de revisão de maneira consistente (você pode fazer isso, por exemplo, com doozerd, zookeeper ou a solução de banco de dados de sua escolha), você também pode codificar este número de revisão como parte da chave de cache. Alternativamente, você também pode usar os cabeçalhos HTTP "Last-Modified" ou "ETag" como algum tipo de número de revisão em seu proxy da web.