Como construir uma Aplicação que consuma e produza updates no Twitter usando Python
-
Upload
cirdes-filho -
Category
Technology
-
view
1.691 -
download
0
Transcript of Como construir uma Aplicação que consuma e produza updates no Twitter usando Python
![Page 1: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/1.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/2.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/3.jpg)
![Page 4: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/4.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/5.jpg)
RECIFE
![Page 6: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/6.jpg)
RECIFE
![Page 7: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/7.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/8.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/9.jpg)
SOA?
![Page 10: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/10.jpg)
SINGLE RAILS APP LIKE SHOPIFY
![Page 11: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/11.jpg)
70% DAS REQUISIÇÕES BATEM NA CACHE
![Page 12: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/12.jpg)
O QUE É CACHE?
![Page 13: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/13.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/14.jpg)
QUAL ACARACTERÍSTICA
DA CACHE?
![Page 15: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/15.jpg)
O QUE USA CACHE?
![Page 16: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/16.jpg)
DO QUE É CONSTITUÍDA UMA CACHE?
![Page 17: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/17.jpg)
CACHE = CASH
![Page 18: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/18.jpg)
ARQUITETURA DE MEMÓRIA
![Page 19: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/19.jpg)
CACHE HIT / CACHE MISS / CACHE RATIO
![Page 20: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/20.jpg)
COMO MAXIMIZAR O CACHE HIT?
![Page 21: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/21.jpg)
BÉLÁDY’S ALGORITHM
![Page 22: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/22.jpg)
RANDOMREPLACEMENT
(RR)
![Page 23: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/23.jpg)
LEAST-FREQUENTLY USED(LFU)
![Page 24: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/24.jpg)
LEAST-RECENTLY USED(LRU)
![Page 25: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/25.jpg)
O QUE É WEBCACHING?
![Page 26: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/26.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/27.jpg)
CACHE SERVER-SIDE
CACHE CLIENT-SIDE
![Page 28: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/28.jpg)
PAGE CACHE
ACTIONCACHE
FRAGMENTCACHE
RAILSCACHE
![Page 29: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/29.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/30.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/31.jpg)
SIMILAR TO PAGE CACHE
RUN FILTERS
ACTION CACHE
![Page 32: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/32.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/33.jpg)
DEPRECATED
![Page 34: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/34.jpg)
HTML CACHE AVAILABLE IN RAILS 4
FRAGMENT CACHE
![Page 35: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/35.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/36.jpg)
ActiveSupport::Cache::Store
FileStore MemoryStore
NullStore MemCacheStore
![Page 37: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/37.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/38.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/39.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/40.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/41.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/42.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/43.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/44.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/45.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/46.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/47.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/48.jpg)
PROBLEMA COM TEMPLATE
![Page 49: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/49.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/50.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/51.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/52.jpg)
RUSSIAN DOLL
![Page 53: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/53.jpg)
Russian Doll
![Page 54: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/54.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/55.jpg)
KNOWING ISNOT ENOUGH WE MUST APPLY
![Page 56: Como construir uma Aplicação que consuma e produza updates no Twitter usando Python](https://reader036.fdocument.pub/reader036/viewer/2022062406/5597aafb1a28ab583a8b4685/html5/thumbnails/56.jpg)
WILLING ISNOT ENOUGH WE MUST DO