8. Reverse Proxy
“Varnish is a reverse Web accelerator designed for content-heavy
dynamic web sites. In contrast to other HTTP accelerators, many
of which began life as client-side proxies or origin servers,
Varnish was designed from the ground up as an accelerator for
incoming traffic.”
12. Come si configura?
• NON con un file in cui abiliti e disabiliti opzioni
• Varnish Configuration Language (VCL)
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
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
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
16. 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
17. 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 completa
Gli altri hooks:
vcl_deliver, vcl_miss, vcl_hit, vcl_error, vcl_discard, vcl_timeout,
vcl_pipe, vcl_pass
33. 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)
end
end
35. User agents
User-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.1
User-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; .NE
User-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) C
User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.91
User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
User-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.77
User-Agent: Opera/9.80 (Windows NT 6.1; U; ja) Presto/2.8.131 Version/11.11
User-Agent: Googlebot-Image/1.0
User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; it-it) AppleWebKit/533.21.1 (KHTML, lik
User-Agent:YottaaMonitor
User-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, l
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.91
User-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, like
User-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.91
User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.4; en-US; rv:1.9.2.17) Gecko/20110420 Firefo
User-Agent: Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; it-it) AppleWebKit/533.17.9 (KHTML, l
User-Agent: ELB-HealthChecker/1.0
61. VARNISH 3.0
Key Features
• Compression support including ESI
• Plugin support in Varnish with VMODs
• Much improved tools and performance
Other 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.
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 &#xE8; situato di solito tra il client ed il server che ha la risorsa richiesta, un reverse proxy &#xE8; solitamente situato pi&#xF9; vicino al server e ritorner&#xE0; 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&#xE8; 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