Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Nginx, Apache e Varnish

843 views

Published on

Apresentação básica mostrando um pouco sobre os diferentes aspectos do Nginx, Apache e o Varnish.

Published in: Technology
  • Be the first to comment

Nginx, Apache e Varnish

  1. 1. Nginx | Apache | Varnish Ricardo Martins http://ricardomartins.com.br
  2. 2. 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.
  3. 3. 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.
  4. 4. Nginx | Instalação · yum install nginx | apt-get install nginx
  5. 5. 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).
  6. 6. Nginx | Estrutura do arquivo de configuração · nginx.conf
  7. 7. 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).
  8. 8. 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.
  9. 9. 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.
  10. 10. 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;
  11. 11. Apache | Estrutura do arquivo de configuração Configuração básica: apache.conf.basic Configuração mais completa: apache.conf.complex
  12. 12. Conteúdo estático e dinâmico Ambos 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.
  13. 13. 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.
  14. 14. 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.
  15. 15. 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.
  16. 16. Varnish · Por não sobrecarregar o servidor Web, permite um maior volume de visitas simultâneas.
  17. 17. 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"
  18. 18. 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); }
  19. 19. Varnish | Resposta do servidor HTTP/1.1 200 OK Server: nginx/1.2.9 Content-Type: text/html Content-Length: 168 Accept-Ranges: bytes Date: Wed, 11 Sep 2013 18:49:28 GMT X-Varnish: 1487051254 Age: 0 Via: 1.1 varnish Connection: keep-alive Repare estas linhas: Server: nginx/1.2.9 X-Varnish: 1487051254
  20. 20. Perguntas?

×