Groupcache: como emular o tempo de expiração

Criado em 29 jul. 2013  ·  3Comentários  ·  Fonte: golang/groupcache

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

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.

Todos 3 comentários

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!

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

abennett picture abennett  ·  3Comentários

orcaman picture orcaman  ·  9Comentários

cowboyrushforth picture cowboyrushforth  ·  5Comentários

AlexanderChen1989 picture AlexanderChen1989  ·  6Comentários

wagenet picture wagenet  ·  14Comentários