Varnish e caching di applicazioni Rails        RubyDay 2011      Antonio Carpentieri
Disclaimer
l’applicazione
All’inizio andava tutto          bene
Poi è arrivato il momento    di mettere online       store.inter.it
Che si fa?
Reverse Proxy“Varnish is a reverse Web accelerator designed for content-heavydynamic web sites. In contrast to other HTTP ...
Quali vantaggi otteniamo?
Come si configura?
Come si configura?• NON con un file in cui abiliti e disabiliti opzioni
Come si configura?• NON con un file in cui abiliti e disabiliti opzioni• Varnish Configuration Language (VCL)
Come si configura?• NON con un file in cui abiliti e disabiliti opzioni• Varnish Configuration Language (VCL)• il VCL un DSL ...
Come si configura?• NON con un file in cui abiliti e disabiliti opzioni• Varnish Configuration Language (VCL)• il VCL un DSL ...
Come si configura?• NON con un file in cui abiliti e disabiliti opzioni• Varnish Configuration Language (VCL)• il VCL un DSL ...
Come si configura?• NON con un file in cui abiliti e disabiliti opzioni• Varnish Configuration Language (VCL)• il VCL un DSL ...
Gli hook points    • vcl_recv         Arriva la richiesta, qui decidi cosa farne    • vcl_fetch      E’ stata recuparata l...
Varnish non “casha” niente che sia “privato” o che abbia un           cookie...
e Rails ci mette del suo per non farsi cachare
Cookie di sessione
Middlewarehttp://www.coffeepowered.net/2011/01/29/rails-varnish-cookie-sessions-and-csrf-tokens/
Middleware
cache-control private
helper method
helper method in     action
Risultato
Vogliamo parlare dei tracking cookies?
Filtriamoli
Invalidare la cache
PURGE
PURGEvarnishadm -T 1.2.3.4:6082 purge.url ‘url_da_invalidare’
PURGEvarnishadm -T 1.2.3.4:6082 purge.url ‘url_da_invalidare’
Usando gli sweepers  # Gemfile  gem schoefmax-klarlack, :require => ‘klarlack’  # environment.rb  VARNISH = Varnish::Clien...
The “Vary” Pitfalls
User agentsUser-Agent: TwengaBot-2.0 (http://www.twenga.com/bot.html)User-Agent: Mozilla/5.0 (compatible; Yahoo! Slurp; ht...
Accept-languages
Accept-languagesAccept-Language: it
Accept-languagesAccept-Language: itAccept-Language: it-IT
Accept-languagesAccept-Language: itAccept-Language: it-ITAccept-Language: it-it,it;q=0.8,en-us;q=0.5
Accept-languagesAccept-Language:   itAccept-Language:   it-ITAccept-Language:   it-it,it;q=0.8,en-us;q=0.5Accept-Language:...
Accept-languagesAccept-Language:   itAccept-Language:   it-ITAccept-Language:   it-it,it;q=0.8,en-us;q=0.5Accept-Language:...
Accept-languageshttps://github.com/cosimo/varnish-accept-language/
Accept-encoding
Accept-encodingAccept-Encoding:gzip
Accept-encodingAccept-Encoding:gzipAccept-Encoding:gzip,deflate
Accept-encodingAccept-Encoding:gzipAccept-Encoding:gzip,deflateAccept-Encoding:deflate,gzip
Accept-encodingAccept-Encoding:gzipAccept-Encoding:gzip,deflateAccept-Encoding:deflate,gzipAccept-Encoding:deflate, gzip
Accept-encodingAccept-Encoding:gzipAccept-Encoding:gzip,deflateAccept-Encoding:deflate,gzipAccept-Encoding:deflate, gzipAc...
Accept-encoding
Quali tools offre?
Quali tools offre?•varnishtop
Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent
Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent • varnishtop -i RxUrl
Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent • varnishtop -i RxUrl • varnishtop -i RxHeader -I ^R...
Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent • varnishtop -i RxUrl • varnishtop -i RxHeader -I ^R...
Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent • varnishtop -i RxUrl • varnishtop -i RxHeader -I ^R...
Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent • varnishtop -i RxUrl • varnishtop -i RxHeader -I ^R...
Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent • varnishtop -i RxUrl • varnishtop -i RxHeader -I ^R...
Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent • varnishtop -i RxUrl • varnishtop -i RxHeader -I ^R...
Dove siamo arrivati?
VARNISH 3.0Key Features • Compression support including ESI • Plugin support in Varnish with VMODs • Much improved tools a...
Grazie per l’attenzione!   antonio.carpentieri@xpeppers.com   @acarpe   http://acarpe.wordpress.com
Varnish e caching di applicazioni Rails
Upcoming SlideShare
Loading in …5
×

Varnish e caching di applicazioni Rails

15,271 views

Published on

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
15,271
On SlideShare
0
From Embeds
0
Number of Embeds
1,325
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

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
  • Varnish e caching di applicazioni Rails

    1. 1. Varnish e caching di applicazioni Rails RubyDay 2011 Antonio Carpentieri
    2. 2. Disclaimer
    3. 3. l’applicazione
    4. 4. All’inizio andava tutto bene
    5. 5. Poi è arrivato il momento di mettere online store.inter.it
    6. 6. Che si fa?
    7. 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. 8. Quali vantaggi otteniamo?
    9. 9. Come si configura?
    10. 10. Come si configura?• NON con un file in cui abiliti e disabiliti opzioni
    11. 11. Come si configura?• NON con un file in cui abiliti e disabiliti opzioni• Varnish Configuration Language (VCL)
    12. 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. 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. 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. 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. 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. 17. Varnish non “casha” niente che sia “privato” o che abbia un cookie...
    18. 18. e Rails ci mette del suo per non farsi cachare
    19. 19. Cookie di sessione
    20. 20. Middlewarehttp://www.coffeepowered.net/2011/01/29/rails-varnish-cookie-sessions-and-csrf-tokens/
    21. 21. Middleware
    22. 22. cache-control private
    23. 23. helper method
    24. 24. helper method in action
    25. 25. Risultato
    26. 26. Vogliamo parlare dei tracking cookies?
    27. 27. Filtriamoli
    28. 28. Invalidare la cache
    29. 29. PURGE
    30. 30. PURGEvarnishadm -T 1.2.3.4:6082 purge.url ‘url_da_invalidare’
    31. 31. PURGEvarnishadm -T 1.2.3.4:6082 purge.url ‘url_da_invalidare’
    32. 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. 33. The “Vary” Pitfalls
    34. 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. 35. Accept-languages
    36. 36. Accept-languagesAccept-Language: it
    37. 37. Accept-languagesAccept-Language: itAccept-Language: it-IT
    38. 38. Accept-languagesAccept-Language: itAccept-Language: it-ITAccept-Language: it-it,it;q=0.8,en-us;q=0.5
    39. 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. 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. 41. Accept-languageshttps://github.com/cosimo/varnish-accept-language/
    42. 42. Accept-encoding
    43. 43. Accept-encodingAccept-Encoding:gzip
    44. 44. Accept-encodingAccept-Encoding:gzipAccept-Encoding:gzip,deflate
    45. 45. Accept-encodingAccept-Encoding:gzipAccept-Encoding:gzip,deflateAccept-Encoding:deflate,gzip
    46. 46. Accept-encodingAccept-Encoding:gzipAccept-Encoding:gzip,deflateAccept-Encoding:deflate,gzipAccept-Encoding:deflate, gzip
    47. 47. Accept-encodingAccept-Encoding:gzipAccept-Encoding:gzip,deflateAccept-Encoding:deflate,gzipAccept-Encoding:deflate, gzipAccept-Encoding:gzip,deflate,sdch
    48. 48. Accept-encoding
    49. 49. Quali tools offre?
    50. 50. Quali tools offre?•varnishtop
    51. 51. Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent
    52. 52. Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent • varnishtop -i RxUrl
    53. 53. Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent • varnishtop -i RxUrl • varnishtop -i RxHeader -I ^Referer
    54. 54. Quali tools offre?•varnishtop • varnishtop -i RxHeader -I ^User-Agent • varnishtop -i RxUrl • varnishtop -i RxHeader -I ^Referer•varnishadm
    55. 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. 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. 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. 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. 59. Dove siamo arrivati?
    60. 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. 61. Grazie per l’attenzione! antonio.carpentieri@xpeppers.com @acarpe http://acarpe.wordpress.com

    ×