If you can't read please download the document
Upload
tiago-albineli-motta
View
1.721
Download
2
Embed Size (px)
Citation preview
Escalando sites com Nginx
Um servidor web com cdigoRUUUUUUSSO
Porque Nginx?
Escalando sites com Nginx
Sites de contedo esttico
Sites de contedo dinmicos
Sites de contedo do usurio
Porque no esttico?
Top fs
Relacionados
Notcias
Top msicas
Gneros
Comentrios
Playlists
Contedo dinmico...
Tempo de resposta alto
Sobrecarga no servidor
Requisies enfileiradas
Queries desnecessrias
Comeando do bsico
Solucionando com Nginx
Cache
Nginx
Server dinmico
Cache
Confs no nginx
proxy_cache_path /opt/projeto/nginx/cache levels=2:2:2 keys_zone=cache_local:200m max_size=2000m inactive=7d;
proxy_cache_key "$host$uri";
proxy_cache_valid 301 302 120m; proxy_cache_valid 200 404 20m;
proxy_temp_path /tmp/proxy 2 2 2; proxy_read_timeout 5; proxy_connect_timeout 20; proxy_send_timeout 20;
location ~ ^/ { proxy_pass http://localhost:3000; proxy_cache cache_local;}
Verificando se funcionou
log_format proxy '[$time_local] $uri $status $upstream_cache_status $upstream_status'; access_log /var/log/nginx/proxy.log proxy;
> ab -n 3 -c 1 http://localhost/pessoa/1> tail -f /var/log/nginx/proxy.log[26/Apr/2012:23:03:04 -0300] /pessoas/1 200 MISS 200[26/Apr/2012:23:03:04 -0300] /pessoas/1 200 MISS 200[26/Apr/2012:23:03:04 -0300] /pessoas/1 200 MISS 200
No aceitamos biscoitos
location ~ ^/ { proxy_pass http://localhost:3000; proxy_ignore_headers "Expires" "Cache-Control" "Set-Cookie"; proxy_cache cache_local;}
A sim!!!
> ab -n 3 -c 1 http://localhost/pessoa/1> tail -f /var/log/nginx/proxy.log[26/Apr/2012:23:09:04 -0300] /pessoas/1 200 MISS 200[26/Apr/2012:23:09:04 -0300] /pessoas/1 200 HIT -[26/Apr/2012:23:09:04 -0300] /pessoas/1 200 HIT -
Acessos Simultneos
1. 100 requisies simultneas na url X
2. Nginx verifica 100 vezes que url X no est no cache
3. Nginx envia 100 vezes requisio da url X para server
dinmico
4. Nginx cacheia 100 vezes url X
O problema na prtica
> ab -n 10 -c 10 http://localhost/pessoa/4> tail -f /var/log/nginx/proxy.log[26/Apr/2012:23:17:26 -0300] /pessoas/4 200 EXPIRED 200[26/Apr/2012:23:17:44 -0300] /pessoas/4 200 EXPIRED 200[26/Apr/2012:23:17:44 -0300] /pessoas/4 200 EXPIRED 200[26/Apr/2012:23:17:44 -0300] /pessoas/4 200 EXPIRED 200[26/Apr/2012:23:17:44 -0300] /pessoas/4 200 EXPIRED 200[26/Apr/2012:23:17:44 -0300] /pessoas/4 200 EXPIRED 200[26/Apr/2012:23:17:44 -0300] /pessoas/4 200 EXPIRED 200[26/Apr/2012:23:17:44 -0300] /pessoas/4 200 EXPIRED 200[26/Apr/2012:23:17:44 -0300] /pessoas/4 200 EXPIRED 200[26/Apr/2012:23:17:44 -0300] /pessoas/4 200 EXPIRED 200
Stale updating
NginxStale
Server dinmico
Cache
consultacache
gravacache
Stale para erros e timeouts
NginxStale
Server dinmico
Cache
consultacache
X
Confs do stale no nginx
proxy_cache_path /opt/projeto/nginx/cache levels=2:2:2 keys_zone=cache_local:200m max_size=2000m inactive=7d;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_read_timeout 5; proxy_connect_timeout 20; proxy_send_timeout 20;
Solucionado
> ab -n 10 -c 10 http://localhost/pessoa/4> tail -f /var/log/nginx/proxy.log[26/Apr/2012:23:19:27 -0300] /pessoas/4 200 UPDATING -[26/Apr/2012:23:19:27 -0300] /pessoas/4 200 UPDATING -[26/Apr/2012:23:19:27 -0300] /pessoas/4 200 UPDATING -[26/Apr/2012:23:19:27 -0300] /pessoas/4 200 UPDATING -[26/Apr/2012:23:19:27 -0300] /pessoas/4 200 UPDATING -[26/Apr/2012:23:19:27 -0300] /pessoas/4 200 UPDATING -[26/Apr/2012:23:19:27 -0300] /pessoas/4 200 UPDATING -[26/Apr/2012:23:19:27 -0300] /pessoas/4 200 UPDATING -[26/Apr/2012:23:19:27 -0300] /pessoas/4 200 UPDATING -[26/Apr/2012:23:19:30 -0300] /pessoas/4 200 EXPIRED 200
Primeiro request :(
NginxStale
Server dinmicoCache
consultacache
gravacache
Busy Lock
proxy_cache_lock on;
Flood de timeouts
Server dinmico demorando pra responder
Nginx no atualiza cache
Efeito cumulativo
Flood de timeout na prtica
def show sleep 10end
> ab -n 3 -c 1 http://localhost/pessoa/4> tail -f /var/log/nginx/proxy.log[26/Apr/2012:23:29:02 -0300] /pessoas/4 200 STALE 200[26/Apr/2012:23:29:07 -0300] /pessoas/4 200 STALE 200[26/Apr/2012:23:29:12 -0300] /pessoas/4 200 STALE 200
tail -f log/development.log | grep "pessoas/4"Started GET "/pessoas/4" for 127.0.0.1 at 2012-04-26 23:28:57 -0300Started GET "/pessoas/4" for 127.0.0.1 at 2012-04-26 23:29:07 -0300Started GET "/pessoas/4" for 127.0.0.1 at 2012-04-26 23:29:17 -0300
Soluo do Colin Saliceti
Nginx 2Stale
Server dinmico
Cache
Nginx 1staleCache
TimeoutBaixo
TimeoutAlto
Exemplo
proxy_cache_path /opt/projeto/nginx/cache/fe levels=2:2:2 keys_zone=frontend:200m max_size=2000m inactive=7d;
proxy_cache_path /opt/projeto/nginx/cache/be levels=2:2:2 keys_zone=backend:200m max_size=2000m inactive=7d;
#...
proxy_read_timeout 5;
server { listen 127.0.0.1:80; location ~ ^/ { proxy_pass http://localhost:81; # ... proxy_read_timeout: 5s; proxy_cache frontend; }}server { listen 127.0.0.1:81; location ~ ^/ { proxy_pass http://localhost:3000; # proxy_ignore_client_abort on; proxy_read_timeout 30s; proxy_cache backend; }}
Flood resolvido
> ab -n 3 -c 1 http://localhost/pessoa/8> tail -f /var/log/nginx/proxy.log[27/Apr/2012:01:27:17 -0300] /pessoas/8 200 STALE 200 5.001[27/Apr/2012:01:27:17 -0300] /pessoas/8 200 UPDATING - -[27/Apr/2012:01:27:17 -0300] /pessoas/8 200 EXPIRED 200 0.001[27/Apr/2012:01:27:17 -0300] /pessoas/8 200 HIT - -[27/Apr/2012:01:27:22 -0300] /pessoas/8 200 EXPIRED 200 10.010
tail -f log/development.log | grep "pessoas/8"Started GET "/pessoas/8" for 127.0.0.1 at 2012-04-27 01:27:12 -0300
Escalando
Nginx 2Stale
Server dinmico
Nginx 1staleNginx 2Stale
Server dinmico
Nginx 1staleNginx 2Stale
Server dinmico
Nginx 1staleBalanceador
Concluso
Estvel
Performtico
Escalvel
Baixo custo
Sossego
Mantenha contato
@timotta
http://programandosemcafeina.blogspot.com
Muokkaa otsikon tekstimuotoa napsauttamalla
Muokkaa jsennyksen tekstimuotoa napsauttamallaToinen jsennystasoKolmas jsennystasoNeljs jsennystasoViides jsennystasoKuudes jsennystasoSeitsems jsennystasoKahdeksas jsennystasoYhdekss jsennystaso