NGiNX, o motor da sua aplicação Web Ernani Azevedo
R o te iro 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.
O q u e é o N G in X 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.
O q u e é o N G in X 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...
O q u e é o N G in X Fonte: Netcraft http://news.netcraft.com/archives/2014/04/02/april-2014-web-server-survey.html
O q u e é o N G in X Fonte: W3Techs http://w3techs.com/technologies/cross/web_server/ranking
O q u e é o N G in X Fonte: The Atlantic http://www.theatlantic.com/technology/archive/2013/12/welcome-to-the-internet-of-thingies-615-of-web-traffic-is-not-human/282309/
A W e b 2.0 e o fu tu ro 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.
A W e b 2.0 e o fu tu ro 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.
O H T M L 5, e c o m o is s o m u d a a W e b 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.
O H T M L 5, e c o m o is s o m u d a a W e b Uso massivo de multi mídia; WebSocket possibilitando aplicações P2P; Guarda de dados locais (local storage); Geo localização em massa.
P ro to c o lo S P D Y 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.
P ro to c o lo S P D Y 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 W indows 7).
P re p a ra n d o o s e rv id o re s p a ra g ra n d e s c a rg a s 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.
P re p a ra n d o o s e rv id o re s p a ra g ra n d e s c a rg a s 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):
P re p a ra n d o o s e rv id o re s p a ra g ra n d e s c a rg a s 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; }
P re p a ra n d o o s e rv id o re s p a ra g ra n d e s c a rg a s 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; }
P re p a ra n d o o s e rv id o re s p a ra g ra n d e s c a rg a s 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; }
P re p a ra n d o o s e rv id o re s p a ra g ra n d e s c a rg a s 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; }
P re p a ra n d o o s e rv id o re s p a ra g ra n d e s c a rg a s 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 net.core.rmem_max net.core.wmem_max net.ipv4.tcp_rmem net.ipv4.tcp_wmem gigabit: = 16777216 = 16777216 = 4096 87380 16777216 = 4096 65536 16777216 # Habilitar mais memória para a pilha TCP # para suportar muitas (100k+) conexões # ativas: net.ipv4.tcp_mem = 50576 64768 98152 net.core.netdev_max_backlog = 2500 # Tuning da reciclagem Time Wait do TCP: net.ipv4.tcp_tw_recycle=1 net.ipv4.tcp_fin_timeout=15
S e rv id o re s d e a p lic a ç ã o, e s c o lh a a s u a lin g u a g e 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.
S e rv id o re s d e a p lic a ç ã o, e s c o lh a a s u a lin g u a g e Internet Internet Internet Internet Apache PHP NGiNX PHP-FPM
S e rv id o re s d e a p lic a ç ã o, e s c o lh a a s u a lin g u a g e Protocolo FastCGI: PHP-FPM; uw SGI (Python, Ruby, Perl,.Net); Protocolo proxy HTTP: Java; Ruby (mongrel); BOSH (XMPP over HTTP); Outros servidores HTTP.
S e rv id o re s d e a p lic a ç ã o, e s c o lh a a s u a lin g u a g e 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; }
S e rv id o re s d e a p lic a ç ã o, e s c o lh a a s u a lin g u a g e 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;
B a la n c e a m e n to d e c a rg a e n tre s e rv id o re s 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.
B a la n c e a m e n to d e c a rg a e n tre s e rv id o re s Apache PHP Internet Internet Internet Internet IPVS NGiNX Apache PHP PHP-FPM PHP-FPM
B a la n c e a m e n to d e c a rg a e n tre s e rv id o re s 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 server server server backend { web1.intra weight=5; web2.intra:8080; unix:/tmp/server3; server backup1.intra:81 backup; server backup2.intra:81 backup; } server { location / { proxy_pass http://backend; } }
B a la n c e a m e n to d e c a rg a e n tre s e rv id o re s Internet Internet NGiNX Cluster 1 PHP-FPM PHP-FPM Cache Cluster 2 M E M C A C H E D PHP-FPM PHP-FPM PHP-FPM PHP-FPM Cluster 3 M E M C A C H E D PHP-FPM PHP-FPM M E M C A C H E D
S S L e m tu d o, s e m s o b re c a rre g a r s u a a p lic a ç ã 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.
S S L e m tu d o, s e m s o b re c a rre g a r s u a a p lic a ç ã 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;
C o n te ú d o e s tá tic 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.
C o n te ú d o e s tá tic o 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)"; }
C a c h e d e c o n te ú d o d in â m ic 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.
C a c h e d e c o n te ú d o d in â m ic o Internet Internet NGiNX PHP-FPM Cache
C a c h e d e c o n te ú d o d in â m ic o Internet Internet NGiNX PHP-FPM PHP-FPM Cache Local }.css.js.html.xml.jpg.gif.mp3... gzip -9 (.gz)
P e rg u n ta s e e n c e rra m e n to 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.
P e rg u n ta s e e n c e rra m e n to Perguntas?
P e rg u n ta s e e n c e rra m e n to Obrigado! Ernani Azevedo ernaniaz@gmail.com +55 51 92425885 http://www.intellinews.com.br/