Trabalho há alguns anos com HAProxy e Varnish, duas excelentes tecnologias opensource para aumentar a alta disponibilidade de sites web, mitigar ataques DoS e DDoS e melhorar a performance e o tempo de resposta de requisições HTTP.

Acontece que uma solução não substitui a outra. Vamos enter o por quê ?

Mas antes, vamos ver quais são os pontos em comum:

  • reverse-proxy mode
  • advanced HTTP features
  • no SSL offloading
  • client-side HTTP 1.1 with keepalive
  • tunnel mode available
  • high performance
  • basic load-balancing
  • server health checking
  • IPv6 ready
  • Management socket (CLI)
  • Professional services and training available

E agora, as diferenças entre cada um deles.

Primeiro, as funcionalidades que existem no Varnish e que não existem no HAProxy:

  • caching
  • grace mode (stale content delivery)
  • saint mode (manages origin server errors)
  • modular software (with a lot of modules available)
  • intuitive VCL configuration language
  • HTTP 1.1 on server side
  • TCP connection re-use
  • Edge side includes (ESI)
  • a few command line tools for stats (varnishstat, varnishhist, etc…)
  • powerful live traffic analyzer (varnishlog)
  • possibilidade de utilizar o fail2ban para bloquear ips graças ao varnishlog
  • varnishlog podem ser gerados no padrão w3c, tendo assim uma maior facilidade quanto a análise de tráfego e objetos

Nota: O Varnish até que faz, e bem, balanceamento de carga e com a possibilidade de utilizar um health check, mas a performance do HAProxy o supera e muito .

E por último, as funcionalidades que só são presentes no HAProxy:

  • advanced load-balancer
  • multiple persistence methods
  • DOS and DDOS mitigation
  • Advanced and custom logging
  • Web interface
  • Server / application protection through queue management, slow start, etc…
  • SNI content switching
  • Named ACLs
  • Full HTTP 1.1 support on server side, but keep-alive
  • Can work at TCP level with any L7 protocol
  • Proxy protocol for both client and server
  • powerful log analyzer tool (halog)

Alguns pontos importantes:

  • As boas práticas quanto a utilização do HAProxy requerem que vc tenha, no mínimo, 3 servidores. 1 dedicado ao HAProxy e os outros dois responsáveis por receberem o tráfego balanceado.
  • Não adianta nada vc ter um HAProxy bem configurado e instalado em um S.O. que não esteja tunado. Estou falando de parâmetros no /etc/sysctl.conf e nas configurações do limits.
  • Outro ponto é quanto a instalação e configuração de um firewall no HAProxy. Que seja um Iptables, mas que esteja configurado. Mesmo com ele instalado no HAProxy, haverá necessidade de ter um instalado no Varnish, já que o mesmo possui integração com o fail2ban.
  • E aí vai outra dica. Uma segunda camada de Varnish não faz mal a ninguém, que o diga o pessoal da R7.com e da Globo.com

Arquitetura:

WEB ==> HAProxy Server ==> Server 1 ==> Server 2

E uma info importante – caso vc esteja utilizando o serviço de Cloud da Amazon, pense, e muito bem, em migrá-lo para a Digital Ocean, utilizando o HAProxy, pois eles possuem ip internos privados, melhorando e muito a performance do seu ambiente Web, além do custo ser bem mais atraente. Mas cuidado com a largura de banda, já que a DO não possui nenhuma solução anti-DDoS.

Eu por exemplo, tive que utilizar a cloudflrare para aguentar o tranco contra o blog. Melhor do que pagar uma fortuna de tráfego a RackSpace ou Amazon.

P.S.: tudo isso que foi dito, e mais um pouco, será abordado no curso de Varnish+Nginx+Apache do Coruja de TI, versão 2.0