Load balance com máquinas virtuais no Azure

Esse post foi migrado do blog antigo. A publicação original foi no dia 12/03/2014

Estou fazendo alguns testes no Azure para cenários mais avançados e acabei achando o exemplo de load balance com máquinas virtuais muito simples. Eu sempre achei que fosse super complicado, mas, no Azure, é um procedimento quase que trivial.

O que é load balance?

Load Balance é uma técnica para distribuir a carga de processamento de uma aplicação entre várias máquinas. Funciona assim:

À medida que as requisições chegam, elas vão para o Azure Load Balancer, que é responsável por dividir as requisições entre as máquinas que estão disponíveis e com mais recursos livres.

Criando as máquinas

Aproveitando os posts anteriores sobre como utilizar o Azure pela linha de comando e criar uma VM no Azure, vou criar as duas máquinas para esta demonstração.

Esses comandos devem ser rodados no terminal.

C:\Program Files\ConEmu>azure vm create vm-teste-lb a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201402.01-en.us-127GB.vhd usuario Senha@123 --location "East US" --vm-size "small"  
info: Executing command vm create
+ Looking up image a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201402.01-en.us-127GB.vhd
+ Looking up cloud service
+ Creating cloud service
+ Retrieving storage accounts
+ Creating VM
info: vm create command OK

C:\Program Files\ConEmu>azure vm create --connect vm-teste-lb a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201402.01-en.us-127GB.vhd usuario Senha@123 --vm-size "small"
info: Executing command vm create
+ Looking up image a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201402.01-en.us-127GB.vhd
+ Looking up cloud service
+ Getting cloud service properties
+ Looking up deployment
+ Retrieving storage accounts
+ Creating VM
info: vm create command OK
O segredo do segundo comando é o — connect vm-teste-lb. Este comando faz com que a máquina criada seja criada sob o mesmo Cloud Service.

E agora?

Temos duas máquinas virtuais apontando para o mesmo endereço DNS. Mas qual VM vai receber o Request de um usuário que acessar http://vm-teste-lb.cloudapp.net/?

Na primeira máquina, vamos configurar assim:

Depois de ser informado que a operação foi realizada, vamos configurar a segunda máquina virtual assim:

BAM! Você já tem um load balance pronto para ser usado!

Divisão de processamento

Para testar este cenário, vou botar dois arquivos html diferentes em cada uma das máquinas. Na máquina 1:

<!DOCTYPE html>  
<html>
<head>
<title>1</title>
</head>
<body>
Máquina 1
</body>
</html>

Na máquina 2:

<!DOCTYPE html>  
<html>
<head>
<title>2</title>
</head>
<body>
Máquina 2
</body>
</html>

Resultado:

http://luisrudgenet.blob.core.windows.net/files/lb-1.mp4

Legal, né? Eu sou aleatoriamente jogado de uma máquina para outra, fazendo com que os recursos de cada máquina sejam otimizados ao máximo.

Prevenção contra falhas

Outro cenário interessante é o de quando uma máquina, por qualquer motivo, pára de funcionar. Para fazer esse teste, vou desligar a máquina 1 pelo terminal:

C:\Program Files\ConEmu>azure vm shutdown vm-teste-lb  
info: Executing command vm shutdown
+ Getting virtual machines
+ Shutting down VM
info: vm shutdown command OK

A partir de agora, somente a máquina 2 está recebendo minhas requisições e o site não parou de funcionar nem por um segundo.

http://luisrudgenet.blob.core.windows.net/files/lb-2.mp4

Interessante, né? É uma solução muito simples para um problema MUITO grande.

Agora… Tem desculpa pra fazer feio na black friday?
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.