nginx, apache e varnish

20
Nginx | Apache | Varnish Ricardo Martins http://ricardomartins.com.br

Upload: ricardo-martins-

Post on 15-Apr-2017

709 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Nginx, Apache e Varnish

Nginx | Apache | VarnishRicardo Martins

http://ricardomartins.com.br

Page 2: Nginx, Apache e Varnish

Nginx· Engine-X

· Servidor de Proxy Reverso para HTTP, HTTPS, SMTP, POP3 e IMAP. No entanto, muito utilizado também como load balancer, servidor de cache HTTP e WebServer.

· Escrito para quebrar a barreira C10k (http://kegel.com/c10k.html)

· Algoritmo baseado no funcionamento assíncrono e não-bloqueante de eventos o que permite processar um número muito maior de pedidos em uma única (ou, pelo menos, em muito poucas) thread(s). Desta forma, a principal vantagem é a escalabilidade com pouco consumo de recursos.

Page 3: Nginx, Apache e Varnish

Nginx· Faz spawn de processos chamados de workers, onde cada um pode tratar milhares de conexões. Os processos workers fazem isto através da implementação de um mecanismo de looping que continuamente verifica e processa eventos.

Page 4: Nginx, Apache e Varnish

Nginx | Instalação· yum install nginx | apt-get install nginx

Page 5: Nginx, Apache e Varnish

Nginx | Estrutura do arquivo de configuração· Consiste em modulos controlados por diretivas

· Pode possuir um único arquivo de configuração ou um arquivo principal com include em outros

· Diretivas são divididas em diretivas simples e diretivas em blocos

· Simples: Consiste no nome e parâmetros, separados por espaços e terminados com ;

· Em blocos: Similar à simples, porém termina um conjunto de instruções adicionais entre chaves {}. Se uma diretiva em blocos possuir outras diretivas dentro das chaves, é chamado de contexto (events, http, server e location).

Page 6: Nginx, Apache e Varnish

Nginx | Estrutura do arquivo de configuração· nginx.conf

Page 7: Nginx, Apache e Varnish

Apache· Servidor usado por 56% dos websites no mundo

· Inicialmente baseado em processo (mpm_prefork) onde cada conexão simultânea requer uma thread, o que era pouco performático por conta do alto overhead. Posteriormente com o lançamento do Apache2 foram inseridos novos módulos de multi-processamento, permitindo a troca de como as requests são tratadas: mpm_worker (com base em threads) e mpm_event (com base em eventos).

Page 8: Nginx, Apache e Varnish

Apache· mpm_prefork: Faz o spawn de processos com uma única thread para tratar cada request. Cada processo filho consegue gerenciar uma única conexão por vez. Enquanto o número de requests for menor que o número de processos, o MPM performa muito bem, no entanto caso o número de requests passe a ser maior que o número de processos, a performance diminui bastante.

· mpm_worker: Faz o spawn de processos de modo que cada processo consegue tratar múltiplas threads. Cada thread consegue gerenciar apenas uma conexão. O uso de threads é mais eficiente que o de processos, fazendo com que este módulo seja melhor que o anterior. Novas conexões podem usar imediatamente uma thread livre ao invés de ter que esperar por um processo livre.

Page 9: Nginx, Apache e Varnish

Apache· mpm_event: É similar o módulo worker em algumas situações, mas é otimizado para lidar com conexões keep-alive. Quando se usa mpm_worker, a conexão irá manter uma thread por todo tempo que a conexão estiver ativa, por outro lado, quando se utiliza o mpm_event, ele irá manter as conexões ativas reservando threads dedicadas para o tratamento de conexões keep-alive e passando requests ativos para outras threads, o que evita ele que fique preso com conexões keep-alive, permitindo uma execução mais rápida.

Page 10: Nginx, Apache e Varnish

Apache | Estrutura do arquivo de configuração · De modo geral a configuração é similar ao Nginx.

· Pode possuir toda a configuração em um arquivo principal, ou utilizar includes com outros arquivos para configurações individuais/específicas;

Page 11: Nginx, Apache e Varnish

Apache | Estrutura do arquivo de configuração Configuração básica: apache.conf.basic

Configuração mais completa: apache.conf.complex

Page 12: Nginx, Apache e Varnish

Conteúdo estático e dinâmicoAmbos possuem maneiras diferentes de solicitações de conteúdo estático.

· Apache:

- Lida com conteúdos estáticos usando seus métodos baseados em arquivos convencionais.

- Consegue processar conteúdo dinâminco através de mecanismos internos para a linguagem em questão para cada instância worker, o que permite executar conteúdo dinâmico internamente sem recorrer a componentes externos. Estes macanismos internos podem ser habilitados através do carregamento dinâmico de módulos no arquivo de configuração.

Page 13: Nginx, Apache e Varnish

Conteúdo estático e dinâmico· Nginx:

- Não possui mecanismos internos para processar conteúdo dinâmico nativamente. Para processar requisições PHP por exemplo, ele precisa repassar a requisição para um mecanismo externo executar e aguardar o conteúdo renderizado ser trazido de volta. Isto pode resultar em um delay para o cliente.

- Esta comunicação precisa ser configurada entre o Nginx e um dos seguintes protocolos que o Nginx saiba tratar: http, FastCGI, SCGI, uWSGI, memcache.

Page 14: Nginx, Apache e Varnish

Conteúdo estático e dinâmico· Nginx:

- Entretanto, este modo de funcionamento pode trazer alguns benefícios. Como o worker não possui um interpretador dinâmico embutido, todo este overhead só é percebido em conteúdo dinâmico. Conteúdos estáticos podem ser servidos de forma simples e direta e um interpretador só é acionado quando necessário.

Page 15: Nginx, Apache e Varnish

Varnish· Um serviço que fica à frente do Servidor Web fazendo uma ponte entre o usuário e o servidor, da mesma forma que um proxy reverso.

· Acelera uma conexão HTTP analisando conteúdos mais acessados e armazenando uma cópia em cache (RAM).

· O servidor Web só é acessado quando o conteúdo do cache no Varnish expira ou é alterado, diminuindo a carga no servidor Web. Por esta razão, em sites com grandes volumes de acessos, é recomendável utilizá-lo ao invés de utilizar o recurso de cache do próprio servidor Web por exemplo, para que o servidor web lide apenas com o gerenciamento dos requests e não também do gerenciamento do cache.

Page 16: Nginx, Apache e Varnish

Varnish· Por não sobrecarregar o servidor Web, permite um maior volume de visitas simultâneas.

Page 17: Nginx, Apache e Varnish

Varnish | Estrutura do arquivo de configuração/etc/sysconfig/varnish

DAEMON_OPTS="-a :80 -T localhost:6082 -f /etc/varnish/default.vcl -u varnish -g varnish -S /etc/varnish/secret -s file,/var/lib/varnish/varnish_storage.bin,2G"

Page 18: Nginx, Apache e Varnish

Varnish | Estrutura do arquivo de configuração/etc/varnish/default.vcl

backend default { .host = "127.0.0.1"; .port = "8080";}

sub vcl_recv { if (req.request == "GET") { return (lookup); }}

sub vcl_fetch { set beresp.ttl = 30s; return (deliver);}

Page 19: Nginx, Apache e Varnish

Varnish | Resposta do servidorHTTP/1.1 200 OKServer: nginx/1.2.9Content-Type: text/htmlContent-Length: 168Accept-Ranges: bytesDate: Wed, 11 Sep 2013 18:49:28 GMTX-Varnish: 1487051254Age: 0Via: 1.1 varnishConnection: keep-aliveRepare estas linhas:

Server: nginx/1.2.9X-Varnish: 1487051254

Page 20: Nginx, Apache e Varnish

Perguntas?