Your SlideShare is downloading. ×
0
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Varnish e caching di applicazioni Rails
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Varnish e caching di applicazioni Rails

13,409

Published on

Varnish e caching di applicazioni Rails

Varnish e caching di applicazioni Rails

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

No Downloads
Views
Total Views
13,409
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • \n
  • Vi avverto faccio delle battute che non fanno ridere... a volte non rido nemmeno io dopo averle fatte\n
  • \n
  • Porting incrementale\ncon una macchina XL 8 core teniamo tutti gli store\n
  • 400k\ntutto rallenta drasticamente 3 macchine xl non bastano e tempi di risposta anche di 8secondi!\n
  • analizzato il traffico\nmaggior parte visitatori senza carrello\nprima cache poi ottimizzazione codice\n
  • \n
  • Mentre un forward proxy è situato di solito tra il client ed il server che ha la risorsa richiesta, un reverse proxy è solitamente situato più vicino al server e ritornerà solo un insieme preconfigurato di risorse\n
  • possiamo bilanciare il carico tra il nostro cluster di server\npossiamo avere una cache centralizzata\npossiamo utilizzare della logica avanzata per determinare come e quando cachare o servire dalla cache\nmeglio di squid perchè delega al sistema operativo la gestione della memoria\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • A rails non piace il caching\nBasta guardare agli headers http\n
  • \n
  • \n
  • Per i cookie si risolve aggiungendo al middleware una classe che rimuove il cookie se non contiene altre info\n
  • \n
  • da aggiungere sulle action che si vuole cachare\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • per ogni pagina ci possono essere anche centinaia di versioni\n
  • come si fa a normalizzarli?\n
  • ottimo vcl per la normalizzazione dei linguaggi \n
  • ottimo vcl per la normalizzazione dei linguaggi \n
  • ottimo vcl per la normalizzazione dei linguaggi \n
  • ottimo vcl per la normalizzazione dei linguaggi \n
  • ottimo vcl per la normalizzazione dei linguaggi \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript

    • 1. Varnish e caching di applicazioni Rails RubyDay 2011 Antonio Carpentieri
    • 2. Disclaimer
    • 3. l’applicazione
    • 4. All’inizio andava tutto bene
    • 5. Poi è arrivato il momento di mettere online store.inter.it
    • 6. Che si fa?
    • 7. Reverse Proxy“Varnish is a reverse Web accelerator designed for content-heavydynamic web sites. In contrast to other HTTP accelerators, manyof which began life as client-side proxies or origin servers,Varnish was designed from the ground up as an accelerator forincoming traffic.”
    • 8. Quali vantaggi otteniamo?
    • 9. Come si configura?
    • 10. Come si configura?• NON con un file in cui abiliti e disabiliti opzioni
    • 11. Come si configura?• NON con un file in cui abiliti e disabiliti opzioni• Varnish Configuration Language (VCL)
    • 12. Come si configura?• NON con un file in cui abiliti e disabiliti opzioni• Varnish Configuration Language (VCL)• il VCL un DSL che viene compilato in codice C
    • 13. Come si configura?• NON con un file in cui abiliti e disabiliti opzioni• Varnish Configuration Language (VCL)• il VCL un DSL che viene compilato in codice C• Espone gli hookpoint per gestire il cliclo di vita della richiesta
    • 14. Come si configura?• NON con un file in cui abiliti e disabiliti opzioni• Varnish Configuration Language (VCL)• il VCL un DSL che viene compilato in codice C• Espone gli hookpoint per gestire il cliclo di vita della richiesta• Può essere caricato senza fermare il servizio
    • 15. Come si configura?• NON con un file in cui abiliti e disabiliti opzioni• Varnish Configuration Language (VCL)• il VCL un DSL che viene compilato in codice C• Espone gli hookpoint per gestire il cliclo di vita della richiesta• Può essere caricato senza fermare il servizio• Si può switchare a caldo da una configurazione ad un’altra
    • 16. Gli hook points • vcl_recv Arriva la richiesta, qui decidi cosa farne • vcl_fetch E’ stata recuparata la risorsa dal backend, la puoi modificare prima di mandarla al client • vcl_hash Calcola l’hash key per la ricerca, di default è solo l’URL completaGli altri hooks:vcl_deliver, vcl_miss, vcl_hit, vcl_error, vcl_discard, vcl_timeout,vcl_pipe, vcl_pass
    • 17. Varnish non “casha” niente che sia “privato” o che abbia un cookie...
    • 18. e Rails ci mette del suo per non farsi cachare
    • 19. Cookie di sessione
    • 20. Middlewarehttp://www.coffeepowered.net/2011/01/29/rails-varnish-cookie-sessions-and-csrf-tokens/
    • 21. Middleware
    • 22. cache-control private
    • 23. helper method
    • 24. helper method in action
    • 25. Risultato
    • 26. Vogliamo parlare dei tracking cookies?
    • 27. Filtriamoli
    • 28. Invalidare la cache
    • 29. PURGE
    • 30. PURGEvarnishadm -T 1.2.3.4:6082 purge.url ‘url_da_invalidare’
    • 31. PURGEvarnishadm -T 1.2.3.4:6082 purge.url ‘url_da_invalidare’
    • 32. Usando gli sweepers  # Gemfile  gem schoefmax-klarlack, :require => ‘klarlack’  # environment.rb  VARNISH = Varnish::Client.new(‘1.2.3.4:6082’)class ProductSweeper < ActionController::Caching::Sweeper  observe Product # This sweeper is going to keep an eye on the Product model include ActionController::UrlWriter   # If our sweeper detects that a Product was created call this  def after_create(product)          expire_cache_for(product)  end   # If our sweeper detects that a Product was updated call this  def after_update(product)          expire_cache_for(product)  end   # If our sweeper detects that a Product was deleted call this  def after_destroy(product)          expire_cache_for(product)  end   private  def expire_cache_for(product)    VARNISH.purge :url, product_path(product)  endend
    • 33. The “Vary” Pitfalls
    • 34. User agentsUser-Agent: TwengaBot-2.0 (http://www.twenga.com/bot.html)User-Agent: Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NEUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) CUser-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.91User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.User-Agent: Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.77User-Agent: Opera/9.80 (Windows NT 6.1; U; ja) Presto/2.8.131 Version/11.11User-Agent: Googlebot-Image/1.0User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; it-it) AppleWebKit/533.21.1 (KHTML, likUser-Agent:YottaaMonitorUser-Agent: Mozilla/5.0 (compatible; FatBot 2.0; http://www.thefind.com/crawler)User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit/533.21.1 (KHTML, lUser-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.91User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; ar) AppleWebKit/533.21.1 (KHTML, likeUser-Agent: Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.91User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.4; en-US; rv:1.9.2.17) Gecko/20110420 FirefoUser-Agent: Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; it-it) AppleWebKit/533.17.9 (KHTML, lUser-Agent: ELB-HealthChecker/1.0
    • 35. Accept-languages
    • 36. Accept-languagesAccept-Language: it
    • 37. Accept-languagesAccept-Language: itAccept-Language: it-IT
    • 38. Accept-languagesAccept-Language: itAccept-Language: it-ITAccept-Language: it-it,it;q=0.8,en-us;q=0.5
    • 39. Accept-languagesAccept-Language: itAccept-Language: it-ITAccept-Language: it-it,it;q=0.8,en-us;q=0.5Accept-Language: it, en-us;q=0.8, en;q=0.7
    • 40. Accept-languagesAccept-Language: itAccept-Language: it-ITAccept-Language: it-it,it;q=0.8,en-us;q=0.5Accept-Language: it, en-us;q=0.8, en;q=0.7Accept-Language: it, en-us;q=0.8, en;q=0.3
    • 41. Accept-languageshttps://github.com/cosimo/varnish-accept-language/
    • 42. Accept-encoding
    • 43. Accept-encodingAccept-Encoding:gzip
    • 44. Accept-encodingAccept-Encoding:gzipAccept-Encoding:gzip,deflate
    • 45. Accept-encodingAccept-Encoding:gzipAccept-Encoding:gzip,deflateAccept-Encoding:deflate,gzip
    • 46. Accept-encodingAccept-Encoding:gzipAccept-Encoding:gzip,deflateAccept-Encoding:deflate,gzipAccept-Encoding:deflate, gzip
    • 47. Accept-encodingAccept-Encoding:gzipAccept-Encoding:gzip,deflateAccept-Encoding:deflate,gzipAccept-Encoding:deflate, gzipAccept-Encoding:gzip,deflate,sdch
    • 48. Accept-encoding
    • 49. Quali tools offre?
    • 50. Quali tools offre?•varnishtop
    • 51. Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent
    • 52. Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent • varnishtop -i RxUrl
    • 53. Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent • varnishtop -i RxUrl • varnishtop -i RxHeader -I ^Referer
    • 54. Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent • varnishtop -i RxUrl • varnishtop -i RxHeader -I ^Referer•varnishadm
    • 55. Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent • varnishtop -i RxUrl • varnishtop -i RxHeader -I ^Referer•varnishadm • vcl.load newconf /etc/conf2011.vcl
    • 56. Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent • varnishtop -i RxUrl • varnishtop -i RxHeader -I ^Referer•varnishadm • vcl.load newconf /etc/conf2011.vcl • purge.url “^/stylesheets/”
    • 57. Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent • varnishtop -i RxUrl • varnishtop -i RxHeader -I ^Referer•varnishadm • vcl.load newconf /etc/conf2011.vcl • purge.url “^/stylesheets/”•varnishstat
    • 58. Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent • varnishtop -i RxUrl • varnishtop -i RxHeader -I ^Referer•varnishadm • vcl.load newconf /etc/conf2011.vcl • purge.url “^/stylesheets/”•varnishstat•varnishhist
    • 59. Dove siamo arrivati?
    • 60. VARNISH 3.0Key Features • Compression support including ESI • Plugin support in Varnish with VMODs • Much improved tools and performanceOther Features • Enhanced ESI support including stiching together compressed ESI fragments. • Saint and Grace mode. • DNS, Random, Hashing and Client IP based Directors. • A much improved VCL. • Preliminary support for Streaming support, both on miss and on pass.
    • 61. Grazie per l’attenzione! antonio.carpentieri@xpeppers.com @acarpe http://acarpe.wordpress.com

    ×