wiki:cache

Cache

Este documento tem por finalidade demonstrar a o uso de cache( servidor, php, http ).

Cache Servidor

Diversas ferramentas ( frameworks ) implementam a funcionalidade de cache de dados no servidor, hoje uma das mais utilizadas visto sua propriedade de escalabilidade entre servidores é memcache ( memory object caching system ), em segunda camada de cache muito utilizado fica o cache de códigos compilados, hoje já incorporado ao php e muito utilizado encontra-se o APC ( Alternativo PHP cache );

Cache via Http

O protocolo HTTP nos permite informar "instruções" para que proxy, gateway e browsers armazenem cache de "dados" sobre determinadas condições, aumentando significativamente a performace/esbalabilidade da aplicação.

Proposta de Implementação

A proposta aqui abordada levando em considerações as tecnologias e ferramentas hoje disponíveis, vem a servir como complemento a API Rest sendo desenvolvida a fim de aumentar a performance e escalabilidade. Para esta esta meta, é mostrada a seguinte arquitetura:

No image "sampleArquiteture.png" attached to cache
Figura 1: Exemplo demonstrativo da arquitetura

Conforme ilustrado acima:

HTTP: Conforme nos possibilita o protocolo HTTP podemos utilizar os recursos compartilhados ( proxy e gateway ) e recursos privados ( browser ) para cachear dados, sendo que quando o dado é encontrado sob posse deste recursos a resposta é quase que instantânea ao cliente. Os recursos compartilhados (proxy e gateway) cacheiam as informações somente quando o cabeçalho HTTP informar que o controle do cache é publico ( public ), sendo que quando o mesmo é usado deve cuidar o tipo de informação a se informar visto que o cache será de "domínio" público. Para que os dados sejam cacheados apenas no browser deve ser informado que cache é de domínio privado, fazendo com que os recursos compartilhados ignorem e os dados.

As tags mais utilizadas nas requisições HTTP:

max-age=[segundos] -> Parecido com o expires, informa em segundos o tempo em que o cache será considerado novo ( valido ou aceitável );

s-maxage=[segundor] -> Parecido com o maz-age contudo aplica-se apenas a recursos compartilhados;

public -> Informa que o cache será de "domínio" público onde todos os recursos poderão cachear esta informação;

private -> Informa deve ser cacheado apenas no cliente ( browser );

no-cache -> Informa que não deve usar cache nesta requisição;

no-store -> Informa que o esta "requisição" não deve ser cacheada sob nenhum recurso;

must-revalidate -> Informa que deve ser revalidado aquele o cache sobre uma informação, onde no servidor é validado a informação e é refrescado sobre os demais recursos as alterações;

proxy-revalidate -> Parecido ao must-revalidate, contudo aplica-se apenas aos proxys;

Etags -> É um identificador único sobre um recurso;

Exemplo de uso:

cache-control:max-age-6000,must-revalidate.

APC (Cache alternativo do PHP): Foi desenvolvido para prover um framework livre, aberto e robusto para cache e otimização do código intermediário do PHP. Em nossa abordagem escolhemos o APC entre diversos frameworks devido sua integração com o php, e por nos trazer os recursos que precisamos com grande performance. Nesta arquitetura sendo abordada a proposta para utilização do APC para cache de códigos PHP compilados, conforme estudos, o mesmo melhora em média 3x tempo de reposta sobre as requisições.

Memcache (Memory object caching system): Poderoso fremework para cache, um de seus maiores benefícios é escalabilidade para vários servidores. Nesta proposta o mesmo está sendo direcionado a guardar resultados de processamentos(resultados de buscas, acls de usuários....).