Escalando Sites com Nginx

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

[email protected]

@timotta

http://programandosemcafeina.blogspot.com

Muokkaa otsikon tekstimuotoa napsauttamalla

Muokkaa jsennyksen tekstimuotoa napsauttamallaToinen jsennystasoKolmas jsennystasoNeljs jsennystasoViides jsennystasoKuudes jsennystasoSeitsems jsennystasoKahdeksas jsennystasoYhdekss jsennystaso