ESTRATÉGIASDE CACHE 
PARA TUNAR SUA 
APLICAÇÃO RAILS
CIRDES HENRIQUE 
ENGENHEIRO DA COMPUTAÇÃO - UFPE 
ORGANIZADOR DO ABRIL PRO RUBY 
C0-FUNDADOR E DEV DO EVENTICK
335 MIL TICKETS EMITIDOS 
3600 ORGANIZADORES 
1200 EVENTOS FUTUROS
RECIFE
RECIFE
O EVENTICK FICOU 
FORA DO AR 
POR 30 MINUTOS
ANTES DA SOLUÇÃO, UM PASSO ATRÁS: 
MONITORAR A APLICAÇÃO 
NewRelic 
Nazar.io 
HoneyBadger 
Logentries 
Inspectlet 
The Inf...
SOA?
SINGLE RAILS APP 
LIKE SHOPIFY
70% DAS REQUISIÇÕES 
BATEM NA CACHE
O QUE É CACHE?
Cache é um componente que guarda 
informações de forma TRANSPARENTE 
para que futuras requisições 
sejam mais RÁPIDAS
QUAL A 
CARACTERÍSTICA 
DA CACHE?
O QUE USA CACHE?
DO QUE É 
CONSTITUÍDA 
UMA CACHE?
CACHE = CASH
ARQUITETURA DE MEMÓRIA
CACHE HIT / CACHE MISS / CACHE RATIO
COMO MAXIMIZAR 
O CACHE HIT?
BÉLÁDY’S ALGORITHM
RANDOM 
REPLACEMENT 
(RR)
LEAST-FREQUENTLY 
USED 
(LFU)
LEAST-RECENTLY 
USED 
(LRU)
O QUE É 
WEBCACHING?
REQUISIÇÃO 
Rails App 
Reverse 
Proxy 
Browser 
CDN Proxy
CACHE 
SERVER-SIDE 
CACHE 
CLIENT-SIDE
PAGE 
CACHE 
ACTION 
CACHE 
FRAGMENT 
CACHE 
RAILS 
CACHE
PAGE CACHE 
WRITE ON DISK 
BYPASS RAILS APPLICATION ENTIRE 
STATELESS PAGES 
NÃO FUNCIONA NO HEROKU
PAGE CACHE 
class WeblogController < ActionController::Base 
caches_page :show, :new 
def update 
expire_page action: 'sho...
ACTION CACHE 
SIMILAR TO PAGE CACHE 
RUN FILTERS
ACTION CACHE 
class PostsController < ActionController::Base 
caches_action :show, expires_in: 1.hour 
end
DEPRECATED
FRAGMENT CACHE 
HTML CACHE AVAILABLE IN RAILS 4
RAILS CACHE 
FRAGMENT AND ACTION CACHE BUILD ON RAILS.CACHE 
CONFIG.ACTION_CONTROLLER.PERFORM_CACHING = TRUE
ActiveSupport::Cache::Store 
FileStore 
MemoryStore 
NullStore 
MemCacheStore
HOW TO USE IT 
Rails.cache.write 'foo', 'bar' 
Rails.cache.fetch 'foo' 
Rails.cache.write :foo, {a: 'b'}
FRAGMENT CACHING 
Rais.cache.fetch 'key', 
expires_in: 5.minutes, 
race_condition_ttl: 10.seconds do 
#code 
end
FRAGMENT CACHING 
<% cache "event-#{event.id}" do %> 
<%= render event %> 
<% end %>
FRAGMENT CACHING 
<% cache “event-#{event.id}”, expires_in: 1.year do %> 
<%= render event %> 
<% end %>
FRAGMENT CACHING 
def update 
expire_fragment("event-#{event.id}") 
end
FRAGMENT CACHING 
<% cache [:recent, event] do %> 
<%= render event %> 
<% end %>
FRAGMENT CACHING 
ACTIVESUPPORT::CACHE.EXPAND_CACHE_KEY [:RECENT, EVENT] 
=> "RECENT/EVENTS/12510-20141128131506743910000"
FRAGMENT CACHING 
<% cache :recent_attendees, expires_in: 5.minutes do %> 
<%= render partial: 'recent', 
collection: Atte...
FRAGMENT CACHING 
<% cache(cache_key_for_attendees) do %> 
<%= render partial: 'recent', collection: 
Attendees.recent %> ...
FRAGMENT CACHING 
module AttendeesHelper 
def cache_key_for_attendees 
count = Attendee.count 
max_updated_at = 
Attendee....
FRAGMENT CACHING 
<% cache(cache_key_for_attendees) do %> 
<%= render partial: 'recent', collection: 
Attendees.recent %> ...
PROBLEMA 
COM TEMPLATE
CACHE Digests 
<!-- app/views/events/show.html.erb --> 
<% cache ["v1", @event] do%> 
<h1>Team: <%= @event.title %></h1> 
...
CACHE Digests
Como construir uma Aplicação que consuma e produza updates no Twitter usando Python
Como construir uma Aplicação que consuma e produza updates no Twitter usando Python
Como construir uma Aplicação que consuma e produza updates no Twitter usando Python
Como construir uma Aplicação que consuma e produza updates no Twitter usando Python
Como construir uma Aplicação que consuma e produza updates no Twitter usando Python
Como construir uma Aplicação que consuma e produza updates no Twitter usando Python
Como construir uma Aplicação que consuma e produza updates no Twitter usando Python
Upcoming SlideShare
Loading in …5
×

Como construir uma Aplicação que consuma e produza updates no Twitter usando Python

1,822 views
1,767 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,822
On SlideShare
0
From Embeds
0
Number of Embeds
118
Actions
Shares
0
Downloads
25
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Como construir uma Aplicação que consuma e produza updates no Twitter usando Python

  1. 1. ESTRATÉGIASDE CACHE PARA TUNAR SUA APLICAÇÃO RAILS
  2. 2. CIRDES HENRIQUE ENGENHEIRO DA COMPUTAÇÃO - UFPE ORGANIZADOR DO ABRIL PRO RUBY C0-FUNDADOR E DEV DO EVENTICK
  3. 3. 335 MIL TICKETS EMITIDOS 3600 ORGANIZADORES 1200 EVENTOS FUTUROS
  4. 4. RECIFE
  5. 5. RECIFE
  6. 6. O EVENTICK FICOU FORA DO AR POR 30 MINUTOS
  7. 7. ANTES DA SOLUÇÃO, UM PASSO ATRÁS: MONITORAR A APLICAÇÃO NewRelic Nazar.io HoneyBadger Logentries Inspectlet The Informant
  8. 8. SOA?
  9. 9. SINGLE RAILS APP LIKE SHOPIFY
  10. 10. 70% DAS REQUISIÇÕES BATEM NA CACHE
  11. 11. O QUE É CACHE?
  12. 12. Cache é um componente que guarda informações de forma TRANSPARENTE para que futuras requisições sejam mais RÁPIDAS
  13. 13. QUAL A CARACTERÍSTICA DA CACHE?
  14. 14. O QUE USA CACHE?
  15. 15. DO QUE É CONSTITUÍDA UMA CACHE?
  16. 16. CACHE = CASH
  17. 17. ARQUITETURA DE MEMÓRIA
  18. 18. CACHE HIT / CACHE MISS / CACHE RATIO
  19. 19. COMO MAXIMIZAR O CACHE HIT?
  20. 20. BÉLÁDY’S ALGORITHM
  21. 21. RANDOM REPLACEMENT (RR)
  22. 22. LEAST-FREQUENTLY USED (LFU)
  23. 23. LEAST-RECENTLY USED (LRU)
  24. 24. O QUE É WEBCACHING?
  25. 25. REQUISIÇÃO Rails App Reverse Proxy Browser CDN Proxy
  26. 26. CACHE SERVER-SIDE CACHE CLIENT-SIDE
  27. 27. PAGE CACHE ACTION CACHE FRAGMENT CACHE RAILS CACHE
  28. 28. PAGE CACHE WRITE ON DISK BYPASS RAILS APPLICATION ENTIRE STATELESS PAGES NÃO FUNCIONA NO HEROKU
  29. 29. PAGE CACHE class WeblogController < ActionController::Base caches_page :show, :new def update expire_page action: 'show', id: params[:list][:id] end end
  30. 30. ACTION CACHE SIMILAR TO PAGE CACHE RUN FILTERS
  31. 31. ACTION CACHE class PostsController < ActionController::Base caches_action :show, expires_in: 1.hour end
  32. 32. DEPRECATED
  33. 33. FRAGMENT CACHE HTML CACHE AVAILABLE IN RAILS 4
  34. 34. RAILS CACHE FRAGMENT AND ACTION CACHE BUILD ON RAILS.CACHE CONFIG.ACTION_CONTROLLER.PERFORM_CACHING = TRUE
  35. 35. ActiveSupport::Cache::Store FileStore MemoryStore NullStore MemCacheStore
  36. 36. HOW TO USE IT Rails.cache.write 'foo', 'bar' Rails.cache.fetch 'foo' Rails.cache.write :foo, {a: 'b'}
  37. 37. FRAGMENT CACHING Rais.cache.fetch 'key', expires_in: 5.minutes, race_condition_ttl: 10.seconds do #code end
  38. 38. FRAGMENT CACHING <% cache "event-#{event.id}" do %> <%= render event %> <% end %>
  39. 39. FRAGMENT CACHING <% cache “event-#{event.id}”, expires_in: 1.year do %> <%= render event %> <% end %>
  40. 40. FRAGMENT CACHING def update expire_fragment("event-#{event.id}") end
  41. 41. FRAGMENT CACHING <% cache [:recent, event] do %> <%= render event %> <% end %>
  42. 42. FRAGMENT CACHING ACTIVESUPPORT::CACHE.EXPAND_CACHE_KEY [:RECENT, EVENT] => "RECENT/EVENTS/12510-20141128131506743910000"
  43. 43. FRAGMENT CACHING <% cache :recent_attendees, expires_in: 5.minutes do %> <%= render partial: 'recent', collection: Attendees.recent %> <% end %>
  44. 44. FRAGMENT CACHING <% cache(cache_key_for_attendees) do %> <%= render partial: 'recent', collection: Attendees.recent %> <% end %>
  45. 45. FRAGMENT CACHING module AttendeesHelper def cache_key_for_attendees count = Attendee.count max_updated_at = Attendee.maximum(:updated_at).try(:utc).try(:to_s, :number) "attendees/all-#{count}-#{max_updated_at}" end end
  46. 46. FRAGMENT CACHING <% cache(cache_key_for_attendees) do %> <%= render partial: 'recent', collection: Attendees.recent %> <% end %>
  47. 47. PROBLEMA COM TEMPLATE
  48. 48. CACHE Digests <!-- app/views/events/show.html.erb --> <% cache ["v1", @event] do%> <h1>Team: <%= @event.title %></h1> <%= render @event.attendees %> <% end %> <!-- app/views/attendees/_attendee.html.erb --> <% cache ["v1", attendee] do %> <span><%= attendee.name %></span> <span><%= attendee.email %></span> <% end %>
  49. 49. CACHE Digests

×