56
ESTRATÉGIASDE CACHE PARA TUNAR SUA APLICAÇÃO RAILS

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

Embed Size (px)

Citation preview

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

ESTRATÉGIASDE CACHE PARA TUNAR SUA APLICAÇÃO RAILS

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

CIRDES HENRIQUEENGENHEIRO DA COMPUTAÇÃO - UFPE ORGANIZADOR DO ABRIL PRO RUBY C0-FUNDADOR E DEV DO EVENTICK

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

335 MIL TICKETS EMITIDOS 3600 ORGANIZADORES

1200 EVENTOS FUTUROS

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

RECIFE

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

RECIFE

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

O EVENTICK FICOU

FORA DO AR POR 30 MINUTOS

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

ANTES DA SOLUÇÃO, UM PASSO ATRÁS:MONITORAR A APLICAÇÃO

NewRelic Nazar.io

HoneyBadger Logentries Inspectlet

The Informant

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

SOA?

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

SINGLE RAILS APP LIKE SHOPIFY

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

70% DAS REQUISIÇÕES BATEM NA CACHE

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

O QUE É CACHE?

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

Cache é um componente que guarda informações de forma TRANSPARENTE

para que futuras requisições

sejam mais RÁPIDAS

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

QUAL ACARACTERÍSTICA

DA CACHE?

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

O QUE USA CACHE?

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

DO QUE É CONSTITUÍDA UMA CACHE?

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

CACHE = CASH

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

ARQUITETURA DE MEMÓRIA

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

CACHE HIT / CACHE MISS / CACHE RATIO

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

COMO MAXIMIZAR O CACHE HIT?

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

BÉLÁDY’S ALGORITHM

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

RANDOMREPLACEMENT

(RR)

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

LEAST-FREQUENTLY USED(LFU)

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

LEAST-RECENTLY USED(LRU)

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

O QUE É WEBCACHING?

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

REQUISIÇÃO

Rails App

Reverse Proxy

CDN Proxy

Browser

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

CACHE SERVER-SIDE

CACHE CLIENT-SIDE

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

PAGE CACHE

ACTIONCACHE

FRAGMENTCACHE

RAILSCACHE

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

WRITE ON DISK

BYPASS RAILS APPLICATION ENTIRE

STATELESS PAGES

NÃO FUNCIONA NO HEROKU

PAGE CACHE

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

PAGE CACHE

class WeblogController < ActionController::Base caches_page :show, :new def update expire_page action: 'show', id: params[:list][:id] end end

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

SIMILAR TO PAGE CACHE

RUN FILTERS

ACTION CACHE

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

ACTION CACHE

class PostsController < ActionController::Base caches_action :show, expires_in: 1.hour end

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

DEPRECATED

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

HTML CACHE AVAILABLE IN RAILS 4

FRAGMENT CACHE

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

RAILS CACHE

FRAGMENT AND ACTION CACHE BUILD ON RAILS.CACHECONFIG.ACTION_CONTROLLER.PERFORM_CACHING = TRUE

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

ActiveSupport::Cache::Store

FileStore MemoryStore

NullStore MemCacheStore

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

HOW TO USE IT

Rails.cache.write 'foo', 'bar' Rails.cache.fetch 'foo' Rails.cache.write :foo, {a: 'b'}

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

FRAGMENT CACHING

Rais.cache.fetch 'key', expires_in: 5.minutes, race_condition_ttl: 10.seconds do #code end

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

FRAGMENT CACHING

<% cache "event-#{event.id}" do %><%= render event %>

<% end %>

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

FRAGMENT CACHING

<% cache “event-#{event.id}”, expires_in: 1.year do %><%= render event %>

<% end %>

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

FRAGMENT CACHING

def update expire_fragment("event-#{event.id}")end

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

FRAGMENT CACHING

<% cache [:recent, event] do %><%= render event %>

<% end %>

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

FRAGMENT CACHING

ACTIVESUPPORT::CACHE.EXPAND_CACHE_KEY [:RECENT, EVENT] => "RECENT/EVENTS/12510-20141128131506743910000"

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

FRAGMENT CACHING

<% cache :recent_attendees, expires_in: 5.minutes do %><%= render partial: 'recent',

collection: Attendees.recent %><% end %>

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

FRAGMENT CACHING

<% cache(cache_key_for_attendees) do %><%= render partial: 'recent', collection:Attendees.recent %>

<% end %>

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

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

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

FRAGMENT CACHING

<% cache(cache_key_for_attendees) do %><%= render partial: 'recent', collection:Attendees.recent %>

<% end %>

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

PROBLEMA COM TEMPLATE

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

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 %>

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

CACHE Digests

����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  VIEWS/V1/ATTENDEES/1-20121220141922����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  VIEWS/V1/ATTENDEES/2-20121220141922����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  VIEWS/V1/EVENTS/2-20121220141922����������� ������������������  

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

CACHE Digests

����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  VIEWS/ATTENDEES/1-20121220141922/74865FCB3E2752A0928FA4F89B3E4426����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  VIEWS/ATTENDEES/2-20121220141922/74865FCB3E2752A0928FA4F89B3E4426����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  VIEWS/EVENTS/2-20121220141922/4277F85C137009873C093088EF609E60����������� ������������������  

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

RUSSIAN DOLL

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

Russian Doll

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

Russian Doll

<% cache(cache_key_for_attendees) do %>All available attendees:<% Attendee.all.each do |a| %><% cache(a) do %><p><%= a.name %></p>

<% end %><% end %>

<% end %>

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

KNOWING ISNOT ENOUGH WE MUST APPLY

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

WILLING ISNOT ENOUGH WE MUST DO