Load Balancing with DNS

Você pode ler este post em português também

Hello!

The article of this month will show how is easy to balance the load of an application using your DNS.

However, you must be able to do the following actions:

  1. Take from your web server the responsibility of storing the session data of your application;
  2. To have access to the DNS server that holds the records of your domain;
  3. To have more than one web server to holds the requests (obvious, but it’s good to say…).

If your application is written in PHP, you can treat the first item above trough the session_set_save_handler. It’s beyond the scope of this post to show how to do this, but a visit in PHP website will detail the use.

The big trick is really on the configuration at DNS server (2nd item). You must configure, to the same A record of your application, the both (or more) IP address which can handle the requests. The piece of code bellow has been taken from a zone configuration file of a DNS server:


ns1 IN A 192.168.0.1
www IN A 192.168.0.2
mta IN A 192.168.0.3
app IN A 192.168.0.4
app IN A 192.168.0.5

This feature of balancing the hits of a host to different IP addresses at DNS server could be done via SRV records.

The screenshot below shows us (by Apache logs) that both servers are treating the hits.

Application Load Balancing with DNS
Application Load Balancing with DNS

The scenario will complicate a little bit more if your application needs to receive data via upload, which will implies in a common place to save the files.

See you 😉

Load Balancing com DNS

You’re able to see this post in english too.

Olá!

O artigo deste mês mostrará como é fácil balancear a carga de uma aplicação utilizando seu DNS.

No entanto, você deve ser capaz de realizar as seguintes ações:

  1. Retirar do seu servidor web a responsabilidade de guardar os dados de sessão da aplicação;
  2. Ter acesso ao servidor DNS que realiza os apontamentos de sua aplicação;
  3. Ter mais de um servidor web para processar as requisições da aplicação (óbvio, mas é bom dizer…).

Se a aplicação é escrita em PHP, pode-se tratar o primeiro item acima via função session_set_save_handler. Está fora do escopo deste post mostrar como fazer isso, mas uma visita no website do PHP lhe detalhará o uso.

O grande truque está realmente na configuração realizada no servidor DNS (2º item). Configure, para o mesmo registro do tipo A de sua aplicação, os dois (ou mais) endereços IP que possam processar as requisições web. O trecho de código abaixo foi retirado do arquivo de configuração de zonas do servidor DNS responsável por um domínio fictício qualquer:


ns1 IN A 192.168.0.1
www IN A 192.168.0.2
mta IN A 192.168.0.3
app IN A 192.168.0.4
app IN A 192.168.0.5


Esta característica de balancear as requisições de um host para diferentes endereços IP direto no DNS também pode ser realizada via registros do tipo SRV.

A tela abaixo evidencia (pelos logs do Apache) que ambos servidores estão tratando as requisições.

Load Balancing de aplicação com DNS
Load Balancing de aplicação com DNS

O cenário se complicará caso sua aplicação necessite receber dados via upload, o que implicará na necessidade de um ponto único para armazenamento dos arquivos.

Até 😉