Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cache em aplicações web

Cache em aplicações web

Há uma famosa frase que dita ser invalidação de cache uma das mais difícil tarefas da Ciências da Computação. Esta palestra traz diferentes abordagens para armazenar dados em cache para aplicações Web. Tecnologias como HTTP, NGINX, Redis, cache em memória entre outras serão analisadas juntamente com algumas práticas para endereçar cache em diferentes lev

Jean Carlo Emer

September 24, 2016
Tweet

More Decks by Jean Carlo Emer

Other Decks in Technology

Transcript

  1. Cache is a hardware or software component that stores data

    so future requests for that data can be served faster - Wikipedia
  2. There are only two 
 hard things in computer science:

    cache invalidation and naming things. - Phil Karlton
  3. Onde pode haver cache? • navegador do usuário • rede

    mundial de computadores • servidor da sua aplicação
  4. Caching would be useless if it did not significantly improve

    performance - HTTP/1.1 specification
  5. • documentos • imagens • scripts e folhas de estilo

    • requisições assíncronas O que pode ser cacheado? por alguns minutos por alguns meses por alguns meses por alguns minutos
  6. GET /main.css HTTP/1.1 Host: jcemer.com HTTP/1.1 200 Date: Tue, 13

    Sep 2016 13:32:50 GMT Cache-Control: max-age=604800 guarde por 7 dias!
  7. permite que a resposta da requisição seja armazenada no cache

    Cache-Control: max-age=604800 Cabeçalho de resposta
  8. Novas requisições são disparadas quando o recurso está expirado ou

    o usuário força a atualização da página
  9. permitem adicionar mais informações sobre o recurso Last-Modified: Mon, 12

    Sep 2016 22:06:39 GMT
 Etag: W/"337e7-8HrLmYe6UGIUDolQeGLoyw" Cabeçalhos de resposta
  10. GET /main.css HTTP/1.1 Host: jcemer.com HTTP/1.1 200 OK Date: Tue,

    13 Sep 2016 13:32:50 GMT Last-Modified: Mon, 12 Sep 2016 15:23:17 GMT Cache-Control: max-age=604800 informação nova
  11. permitem reaproveitar o recurso caso a cópia em cache ainda

    seja válida If-Modified-Since: Mon, 12 Sep 2016 15:23:17 GMT If-Match: W/"337e7-8HrLmYe6UGIUDolQeGLoyw" Cabeçalhos de requisição
  12. GET /main.css HTTP/1.1 Host: jcemer.com If-Modified-Since: Mon, 12 Sep 2016

    15:23:17 GMT HTTP/1.1 304 Not Modified Date: Tue, 13 Sep 2016 13:32:50 GMT Last-Modified: Mon, 12 Sep 2016 15:23:17 GMT Cache-Control: max-age=604800 <EOF>
  13. Documentação de como fazer cache dos vídeos da globo.com TL;DR

    
 respeite os cabeçalhos das respostas https://github.com/globocom/Globo-Live-Cache
  14. • imagens • scripts e folhas de estilo • documentos

    comuns a todos os usuários O que pode ser cacheado? por alguns meses por alguns meses por alguns minutos
  15. Varnish e Squid possuem estratégias melhores para revalidar o cache

    sem penalizar o usuário http://serverfault.com/questions/576402/nginx-serving-stale-cache- response-while-updating
  16. Cache na aplicação é utilizado para diminuir o tempo de

    resposta de determinadas operações
  17. def program @program = Program.find(program_id) unless 
 defined? @program end

    https://github.com/rails/rails/commit/ 36253916b0b788d6ded56669d37c96ed05c92c5c Video class
  18. Objetos instanciados uma única vez no ciclo de vida da

    aplicação servem como 
 in-memory cache
  19. when the cache exceeds the allotted size, a cleanup will

    occur which tries to prune the cache down ActiveSupport::Cache:: MemoryStore
  20. Never assumes that anything cached in memory or on disk

    will be available on 
 a future request https://12factor.net/processes
  21. noeviction allkeys-lru 
 evict keys trying to remove the less

    recently used keys first volatile-lru 
 equals allkeys-lru but only among keys that have an expire set http://redis.io/topics/lru-cache
  22. Redis suporta tolerância a falhas através de persistência em disco,

    replicação e sentinel http://redis.io/topics/persistence
 http://redis.io/topics/replication
 http://redis.io/topics/sentinel
  23. Sharding pode escalar o cache horizontalmente e melhorar a tolerância

    a falhas https://github.com/twitter/twemproxy