= Cache = [[PageOutline(1-3, Conteúdo)]] 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: [[Image(sampleArquiteture.png, 60%?)]][[BR]] ^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....).