NGiNX, o motor da sua aplicação web

39
NGiNX, o motor da sua aplicação Web Ernani Azevedo

description

Presentation made at FISL 15, Porto Alegre, RS, Brasil on May, Saturday 10 2014. Note: Presentation in Brazilian Portuguese.

Transcript of NGiNX, o motor da sua aplicação web

Page 1: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Ernani Azevedo

Page 2: NGiNX, o motor da sua aplicação web

• O que é o NGiNX;

• A Web 2.0 e o futuro;

• O HTML5, e como isso muda a Web;

• Protocolo SPDY;

• Preparando servidores para grandes cargas;

• Servidores de aplicação, escolha a sua linguagem;

• Balanceamento de carga entre servidores;

• SSL em tudo, sem sobrecarregar sua aplicação;

• Conteúdo estático;

• Cache de conteúdo dinâmico;

• Perguntas e encerramento.

NGiNX, o motor da sua aplicação Web

Roteiro

Page 3: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

O que é o NGiNX

• O que é o NGiNX;

• A Web 2.0 e o futuro;

• O HTML5, e como isso muda a Web;

• Protocolo SPDY;

• Preparando servidores para grandes cargas;

• Servidores de aplicação, escolha a sua linguagem;

• Balanceamento de carga entre servidores;

• SSL em tudo, sem sobrecarregar sua aplicação;

• Conteúdo estático;

• Cache de conteúdo dinâmico;

• Perguntas e encerramento.

Page 4: NGiNX, o motor da sua aplicação web

• Pronuncia-se “Engine X” (motor X);

• Distribuído sob licença BSD;

• Escrito por Igor Sysoev;

• Utilizado em grandes portais da Internet (17,82% dos top 1M);

• Servidor de alta performance e proxy reverso HTTP;

• Suporte a IMAP/POP3;

• 10 anos em 2014;

• Escrito tendo em mente quebrar a barreira C10K (http://kegel.com/c10k.html);

• Estrutura assíncrona de eventos;

• Baixo consumo de recursos (memória e CPU);

• Utilizado em diversos grandes sites, como Facebook, Netflix, Pinterest, CloudFare, GitHub,

WordPress.com, Thumblr, Instagram, Cnet, Time.com, SoundCloud, Dropbox, MaxCDN, etc...

NGiNX, o motor da sua aplicação Web

O que é o NGiNX

Page 5: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

O que é o NGiNX

Fonte: Netcrafthttp://news.netcraft.com/archives/2014/04/02/april-2014-web-server-survey.html

Page 6: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

O que é o NGiNX

Fonte: W3Techshttp://w3techs.com/technologies/cross/web_server/ranking

Page 7: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

O que é o NGiNX

Fonte: The Atlantichttp://www.theatlantic.com/technology/archive/2013/12/welcome-to-the-internet-of-thingies-615-of-web-traffic-is-not-human/282309/

Page 8: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

A Web 2.0 e o futuro

• O que é o NGiNX;

• A Web 2.0 e o futuro;

• O HTML5, e como isso muda a Web;

• Protocolo SPDY;

• Preparando servidores para grandes cargas;

• Servidores de aplicação, escolha a sua linguagem;

• Balanceamento de carga entre servidores;

• SSL em tudo, sem sobrecarregar sua aplicação;

• Conteúdo estático;

• Cache de conteúdo dinâmico;

• Perguntas e encerramento.

Page 9: NGiNX, o motor da sua aplicação web

• Navegadores web mais robustos;

• A era do JavaScript;

• O navegador como interface para todas aplicações;

• Serviços de streaming cada vez mais populares;

• Volume de tráfego cada vez maior, devido a banda larga;

• Compiladores C para web;

• Aplicações cada vez mais dependentes de requisições AJAX.

NGiNX, o motor da sua aplicação Web

A Web 2.0 e o futuro

Page 10: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

O HTML5, e como isso muda a Web

• O que é o NGiNX;

• A Web 2.0 e o futuro;

• O HTML5, e como isso muda a Web;

• Protocolo SPDY;

• Preparando servidores para grandes cargas;

• Servidores de aplicação, escolha a sua linguagem;

• Balanceamento de carga entre servidores;

• SSL em tudo, sem sobrecarregar sua aplicação;

• Conteúdo estático;

• Cache de conteúdo dinâmico;

• Perguntas e encerramento.

Page 11: NGiNX, o motor da sua aplicação web

• Uso massivo de multi mídia;

• WebSocket possibilitando aplicações P2P;

• Guarda de dados locais (local storage);

• Geo localização em massa.

NGiNX, o motor da sua aplicação Web

O HTML5, e como isso muda a Web

Page 12: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Protocolo SPDY

• O que é o NGiNX;

• A Web 2.0 e o futuro;

• O HTML5, e como isso muda a Web;

• Protocolo SPDY;

• Preparando servidores para grandes cargas;

• Servidores de aplicação, escolha a sua linguagem;

• Balanceamento de carga entre servidores;

• SSL em tudo, sem sobrecarregar sua aplicação;

• Conteúdo estático;

• Cache de conteúdo dinâmico;

• Perguntas e encerramento.

Page 13: NGiNX, o motor da sua aplicação web

• Pronuncia-se Speedy (veloz);

• Criado principalmente pela Google (marca registrada);

• Objetivo de reduzir a latência em páginas web;

• Reduz o número de conexões ativas com o servidor;

• Criptografia de dados utilizando TLS/SSL;

• Compressão dos dados (gzip ou deflate), incluindo cabeçalhos;

• Multiplexação do conteúdo;

• Suportado pelo Google Chrome e o Chromium, e utilizado para muitos serviços da Google;

• Suportado pelo Firefox 11 e SeaMonkey 2.8, mas habilitado por padrão apenas no Firefox 13 ou

superior;

• Suportado pelo Opera 12.10;

• Suportado pelo Internet Explorer 11 (exceto para Windows 7).

NGiNX, o motor da sua aplicação Web

Protocolo SPDY

Page 14: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Preparando o servidores para grandes cargas

• O que é o NGiNX;

• A Web 2.0 e o futuro;

• O HTML5, e como isso muda a Web;

• Protocolo SPDY;

• Preparando servidores para grandes cargas;

• Servidores de aplicação, escolha a sua linguagem;

• Balanceamento de carga entre servidores;

• SSL em tudo, sem sobrecarregar sua aplicação;

• Conteúdo estático;

• Cache de conteúdo dinâmico;

• Perguntas e encerramento.

Page 15: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Preparando o servidores para grandes cargas

• Habilitar uso de eventos via epoll (Linux kernel 2.5.44 e glibc 2.3.2);

• No FreeBSD, utilizar kqueue;

• Habilitar workers para o número máximo de CPU's (veja o lscpu):

Page 16: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Preparando o servidores para grandes cargas

• Alterar o limite de recursos de arquivos por worker para 100000;

• Alterar o limite de coneões por worker para 2048;

• Habilitar múltiplas conexões;

• Configuração básica para grandes cargas:worker_processes 16;worker_rlimit_nofile 100000;

events { worker_connections 2048; use epoll; multi_accept on;}

Page 17: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Preparando o servidores para grandes cargas

• Habilitar compressão gzip no módulo HTTP;

• Podemos aumentar o tempo limite de keepalive, lembrando que conexões inativas não consomem CPU e pouquíssima memória (e no máximo 200

requisições por conexão);

http { keepalive_timeout 65; keepalive_requests 200; gzip on; gzip_min_length 256; gzip_comp_level 3; gzip_types text/plain text/css application/json application/x-javascript text/html application/xml application/xml+rss text/javascript; default_type application/octet-stream; include /etc/nginx/mime.types;}

Page 18: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Preparando o servidores para grandes cargas

• Habilitar cache de metadados no módulo HTTP;

• Esta configuração não possui parâmetro “on”, apesar de existir parâmetro “off”;

• Configuração básica de cache de metadados no módulo HTTP:

http { open_file_cache max=10000 inactive=30s; open_file_cache_valid 60s; open_file_cache_min_uses 2; open_file_cache_errors on;}

Page 19: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Preparando o servidores para grandes cargas

• Habilitar reset para conexões inativas;

• Habilitar sendfile para otimizar envio de arquivos;

• Habilitar tcp_nopush (enviar cabeçalhos em apenas um pacote).

http { reset_timedout_connection on; sendfile on; tcp_nopush on;}

Page 20: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Preparando o servidores para grandes cargas

• Tuning da pilha TCP no kernel do Linux, para suportar 100k conexões ativas ou mais;

• Alterando o tempo de reciclagem de conexões TCP em Time Wait;

• Editar o arquivo /etc/sysctl.conf, alterando:

# Tuning geral de gigabit:net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.ipv4.tcp_rmem = 4096 87380 16777216net.ipv4.tcp_wmem = 4096 65536 16777216

# Habilitar mais memória para a pilha TCP# para suportar muitas (100k+) conexões# ativas:net.ipv4.tcp_mem = 50576 64768 98152net.core.netdev_max_backlog = 2500

# Tuning da reciclagem Time Wait do TCP:net.ipv4.tcp_tw_recycle=1net.ipv4.tcp_fin_timeout=15

Page 21: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Servidores de apl icação, escolha a sua l inguagem

• O que é o NGiNX;

• A Web 2.0 e o futuro;

• O HTML5, e como isso muda a Web;

• Protocolo SPDY;

• Preparando servidores para grandes cargas;

• Servidores de aplicação, escolha a sua linguagem;

• Balanceamento de carga entre servidores;

• SSL em tudo, sem sobrecarregar sua aplicação;

• Conteúdo estático;

• Cache de conteúdo dinâmico;

• Perguntas e encerramento.

Page 22: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Servidores de aplicação, escolha a sua l inguagem

InternetInternet

ApachePHP

InternetInternet

NGiNX

PHP-FPM

Page 23: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Servidores de aplicação, escolha a sua l inguagem

• Protocolo FastCGI:

– PHP-FPM;

– uWSGI (Python, Ruby, Perl, .Net);

• Protocolo proxy HTTP:

– Java;

– Ruby (mongrel);

– BOSH (XMPP over HTTP);

– Outros servidores HTTP.

Page 24: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Servidores de aplicação, escolha a sua l inguagem

• FastCGI, uma implementação similar ao CGI para processos persistentes;

• Controle de cabeçalhos e tratamento de erros;

• Exemplo de uso (sessão html da configuração do NGiNX):

location ~ [^/]\.php(/|$) { fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; include fastcgi_params;

# Via TCP/IP: # fastcgi_pass 127.0.0.1:3100;

# Via UNIX Socket: fastcgi unix:/var/run/php-fpm/php.sock;}

Page 25: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Servidores de aplicação, escolha a sua l inguagem

• Proxy HTTP, possibilitando a integração com praticamente quaisquer linguagem web;

• Exemplo de uso (sessão html da configuração do NGiNX):

location ~ ^/http-bind { proxy_buffering off; proxy_intercept_errors on; tcp_nodelay on; keepalive_timeout 55; proxy_read_timeout 360;

proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass http://web1.local:8080;}

Page 26: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Balanceamento de carga entre servidores

• O que é o NGiNX;

• A Web 2.0 e o futuro;

• O HTML5, e como isso muda a Web;

• Protocolo SPDY;

• Preparando servidores para grandes cargas;

• Servidores de aplicação, escolha a sua linguagem;

• Balanceamento de carga entre servidores;

• SSL em tudo, sem sobrecarregar sua aplicação;

• Conteúdo estático;

• Cache de conteúdo dinâmico;

• Perguntas e encerramento.

Page 27: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Balanceamento de carga entre servidores

InternetInternet

IPVS

InternetInternet

NGiNX

PHP-FPM PHP-FPMApache

PHPApache

PHP

Page 28: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Balanceamento de carga entre servidores

• Utilização de clusters com balanceamento de carga por Round Robin, com possibilidade de uso de IP Hash;

• Pode ser misturado conexões TCP e UNIX Socket;

• Exemplo de uso:

upstream backend { server web1.intra weight=5; server web2.intra:8080; server unix:/tmp/server3;

server backup1.intra:81 backup; server backup2.intra:81 backup;}

server { location / { proxy_pass http://backend; }}

Page 29: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Balanceamento de carga entre servidores

InternetInternet

NGiNX

PHP-FPM

Cache

Cluster 1

PHP-FPM

PHP-FPM

Cluster 2

PHP-FPM

PHP-FPM

PHP-FPM

PHP-FPM

Cluster 3

PHP-FPM

MEMCACHED

MEMCACHED

MEMCACHED

Page 30: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

SSL em tudo, sem sobrecarregar sua aplicação

• O que é o NGiNX;

• A Web 2.0 e o futuro;

• O HTML5, e como isso muda a Web;

• Protocolo SPDY;

• Preparando servidores para grandes cargas;

• Servidores de aplicação, escolha a sua linguagem;

• Balanceamento de carga entre servidores;

• SSL em tudo, sem sobrecarregar sua aplicação;

• Conteúdo estático;

• Cache de conteúdo dinâmico;

• Perguntas e encerramento.

Page 31: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

SSL em tudo, sem sobrecarregar sua aplicação

• Configuração de SSL extremamente simples;

• Desonera o servidor de aplicação, deixando o trabalho de criptografia para o proxy web;

• Exemplo de uso:

server { listen 10.0.0.1:443; server_name intranet.local; root /var/www/html; index index.html index.htm;

ssl on; ssl_certificate /tmp/intranet.crt; ssl_certificate_key /tmp/intranet.key;}

Page 32: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Conteúdo estático

• O que é o NGiNX;

• A Web 2.0 e o futuro;

• O HTML5, e como isso muda a Web;

• Protocolo SPDY;

• Preparando servidores para grandes cargas;

• Servidores de aplicação, escolha a sua linguagem;

• Balanceamento de carga entre servidores;

• SSL em tudo, sem sobrecarregar sua aplicação;

• Conteúdo estático;

• Cache de conteúdo dinâmico;

• Perguntas e encerramento.

Page 33: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Conteúdo estático

• Possibilidade de comprimir o conteúdo estático em disco para entrega em deflate ou gzip;

• Desonera o servidor de aplicação, que não precisa servir conteúdo estático;

• Exemplo de compressão gzip:

http { gzip on; gzip_static on; gzip_http_version 1.1; gzip_min_length 1400; gzip_vary on; gzip_comp_level 9; gzip_proxied any; gzip_types text/plain text/css …; gzip_buffers 16 8k; gzip_disable "MSIE [1-6].(?!.*SV1)";}

Page 34: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Cache de conteúdo dinâmico

• O que é o NGiNX;

• A Web 2.0 e o futuro;

• O HTML5, e como isso muda a Web;

• Protocolo SPDY;

• Preparando servidores para grandes cargas;

• Servidores de aplicação, escolha a sua linguagem;

• Balanceamento de carga entre servidores;

• SSL em tudo, sem sobrecarregar sua aplicação;

• Conteúdo estático;

• Cache de conteúdo dinâmico;

• Perguntas e encerramento.

Page 35: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Cache de conteúdo dinâmico

InternetInternet

NGiNX

PHP-FPM Cache

Page 36: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Cache de conteúdo dinâmico

InternetInternet

NGiNX

PHP-FPM Cache

PHP-FPM

Local

.css

.js

.html

.xml

.jpg

.gif

.mp3

...

} gzip -9 (.gz)

Page 37: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Perguntas e encerramento

• O que é o NGiNX;

• A Web 2.0 e o futuro;

• O HTML5, e como isso muda a Web;

• Protocolo SPDY;

• Preparando servidores para grandes cargas;

• Servidores de aplicação, escolha a sua linguagem;

• Balanceamento de carga entre servidores;

• SSL em tudo, sem sobrecarregar sua aplicação;

• Conteúdo estático;

• Cache de conteúdo dinâmico;

• Perguntas e encerramento.

Page 38: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Perguntas e encerramento

Perguntas?

Page 39: NGiNX, o motor da sua aplicação web

NGiNX, o motor da sua aplicação Web

Perguntas e encerramento

Obrigado!

Ernani Azevedo

[email protected]

+55 51 92425885