Escalando sites com Nginx    Um servidor web com código         RUUUUUUSSO                  
Porque Nginx?             
Escalando sites com Nginx    ●   Sites de conteúdo estático    ●   Sites de conteúdo dinâmicos    ●   Sites de conteúdo do...
Porque não estático?                      Top fãs    Top músicas       Relacionados       Gêneros        Notícias         ...
Conteúdo dinâmico...    ●   Tempo de resposta alto    ●   Sobrecarga no servidor    ●   Requisições enfileiradas    ●   Qu...
Solucionando com Nginx    Começando do básico              
Cache                     Server        Nginx                    dinâmico        Cache                 
Confs no nginx    proxy_cache_path                        location ~ ^/ {      /opt/projeto/nginx/cache                 pr...
Verificando se funcionoulog_format proxy [$time_local] $uri $status $upstream_cache_status $upstream_status;access_log /va...
Não aceitamos biscoitos     location ~ ^/ {        proxy_pass http://localhost:3000;        proxy_ignore_headers          ...
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...
Acessos Simultâneos1. 100 requisições simultâneas na url X2. Nginx verifica 100 vezes que url X não está no cache3. Nginx ...
O problema na prática> ab -n 10 -c 10 http://localhost/pessoa/4> tail -f /var/log/nginx/proxy.log[26/Apr/2012:23:17:26 -03...
Stale updating                 Nginx                Server                 Stale               dinâmico      consulta     ...
Stale para erros e timeouts      consulta                 Nginx                 Stale                             XServer ...
Confs do stale no nginx    proxy_cache_path      /opt/projeto/nginx/cache      levels=2:2:2      keys_zone=cache_local:200...
Solucionado> ab -n 10 -c 10 http://localhost/pessoa/4> tail -f /var/log/nginx/proxy.log[26/Apr/2012:23:19:27 -0300] /pesso...
Primeiro request :(                 Nginx                Server                 Stale               dinâmico      consulta...
Busy Lock    proxy_cache_lock on;              
Flood de timeouts→ Server dinâmico demorando pra responder→ Nginx não atualiza cache→ Efeito cumulativo                   ...
Flood de timeout na práticadef show  sleep 10end> ab -n 3 -c 1 http://localhost/pessoa/4> tail -f /var/log/nginx/proxy.log...
Solução do Colin Saliceti    Nginx 1             Nginx 2              Server     stale    Timeout    Stale    Timeout   di...
Exemplo                                 server { proxy_cache_path                    listen 127.0.0.1:80;   /opt/projeto/n...
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] /pes...
Escalando              Nginx 1       Nginx 2    Server               stale         Stale    dinâmico              Nginx 1 ...
Conclusão    ●   Estável    ●   Performático    ●   Escalável    ●   Baixo custo    ●   Sossego                        
Mantenha contatotimotta@gmail.com@timottahttp://programandosemcafeina.blogspot.com                      
Upcoming SlideShare
Loading in …5
×

Escalando Sites com Nginx

1,729 views

Published on

Slides da apresentação feita no Fisl de Porto Alerge. Uma versão menos completa foi apresentada alguns meses atrás no Flisol de Salvador.

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,729
On SlideShare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
31
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Escalando Sites com Nginx

  1. 1. Escalando sites com Nginx Um servidor web com código RUUUUUUSSO   
  2. 2. Porque Nginx?   
  3. 3. Escalando sites com Nginx ● Sites de conteúdo estático ● Sites de conteúdo dinâmicos ● Sites de conteúdo do usuário   
  4. 4. Porque não estático? Top fãs Top músicas Relacionados Gêneros Notícias Playlists Comentários   
  5. 5. Conteúdo dinâmico... ● Tempo de resposta alto ● Sobrecarga no servidor ● Requisições enfileiradas ● Queries desnecessárias   
  6. 6. Solucionando com Nginx Começando do básico   
  7. 7. Cache Server Nginx dinâmico Cache   
  8. 8. Confs no nginx proxy_cache_path location ~ ^/ { /opt/projeto/nginx/cache proxy_pass http://localhost:3000; levels=2:2:2 proxy_cache cache_local; 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;   
  9. 9. Verificando se funcionoulog_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   
  10. 10. Não aceitamos biscoitos location ~ ^/ { proxy_pass http://localhost:3000; proxy_ignore_headers "Expires" "Cache-Control" "Set-Cookie"; proxy_cache cache_local; }   
  11. 11. 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 -   
  12. 12. Acessos Simultâneos1. 100 requisições simultâneas na url X2. Nginx verifica 100 vezes que url X não está no cache3. Nginx envia 100 vezes requisição da url X para server dinâmico4. Nginx cacheia 100 vezes url X   
  13. 13. O problema na prática> 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   
  14. 14. Stale updating Nginx Server Stale dinâmico consulta cache grava cache Cache   
  15. 15. Stale para erros e timeouts consulta Nginx Stale XServer dinâmico cache Cache   
  16. 16. 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;   
  17. 17. 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   
  18. 18. Primeiro request :( Nginx Server Stale dinâmico consulta cache grava cache Cache   
  19. 19. Busy Lock proxy_cache_lock on;   
  20. 20. Flood de timeouts→ Server dinâmico demorando pra responder→ Nginx não atualiza cache→ Efeito cumulativo   
  21. 21. Flood de timeout na práticadef 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 200tail -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    
  22. 22. Solução do Colin Saliceti Nginx 1 Nginx 2 Server stale Timeout Stale Timeout dinâmico Baixo Alto Cache Cache   
  23. 23. Exemplo server { proxy_cache_path listen 127.0.0.1:80; /opt/projeto/nginx/cache/fe location ~ ^/ { levels=2:2:2 proxy_pass http://localhost:81; keys_zone=frontend:200m # ... max_size=2000m proxy_read_timeout: 5s; inactive=7d; proxy_cache frontend; }proxy_cache_path } /opt/projeto/nginx/cache/be server { levels=2:2:2 listen 127.0.0.1:81; keys_zone=backend:200m location ~ ^/ { max_size=2000m proxy_pass http://localhost:3000; inactive=7d; #… proxy_ignore_client_abort on; #... proxy_read_timeout 30s; proxy_cache backend; proxy_read_timeout 5; }   }  
  24. 24. 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.010tail -f log/development.log | grep "pessoas/8"Started GET "/pessoas/8" for 127.0.0.1 at 2012-04-27 01:27:12 -0300    
  25. 25. Escalando Nginx 1 Nginx 2 Server stale Stale dinâmico Nginx 1 Nginx 2 ServerBalanceador stale Stale dinâmico Nginx 1 Nginx 2 Server stale Stale dinâmico   
  26. 26. Conclusão ● Estável ● Performático ● Escalável ● Baixo custo ● Sossego   
  27. 27. Mantenha contatotimotta@gmail.com@timottahttp://programandosemcafeina.blogspot.com   

×