Tenho certeza de que esta é uma solução fácil, mas não estou muito familiarizado com o funcionamento do DNS ou se isso está relacionado a esse problema.
Se estou executando um serviço web no Amazon EC2, distribuído em muitas instâncias, como posso fazer com que um único nome de domínio possa ser usado para acessar todo o conjunto de servidores, que mudará de tempos em tempos?
Como as instâncias podem estar presentes em um segundo, mas desaparecer no próximo (e vice-versa), preciso encontrar uma maneira de escolher aleatoriamente um membro ativo do cluster para o qual rotear. As atualizações teriam que ser instantâneas. Isso é possível, com cache de DNS e tudo?
Responder1
Existem várias abordagens para isso, algumas das quais estão ao seu alcance.
No seu caso, recomendo simplesmente ter vários registros DNS, com um TTL relativamente curto. A distribuição não é ideal e os clientes podem não escolher o nó de menor latência. No entanto, é extremamente simples: tudo que você precisa fazer é poder adicionar registros DNS. Esta é uma técnica amplamente utilizada e testada.
Caso você precise remover um servidor do pool, basta remover seus registros DNS e a maioria dos clientes deixará de usá-lo depois que o TTL expirar. O mesmo vale para novos servidores: adicione-os e, após o tempo de expiração do TTL, os clientes começarão a usá-los.
O Google, por exemplo, usa isso como parte de suas técnicas de balanceamento:
$ dig A google.com
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 297 IN A 74.125.77.99
google.com. 297 IN A 74.125.77.104
google.com. 297 IN A 74.125.77.147
O Google estende isso, uma vez que você acessa o site deles, redirecionando você para uma versão hospedada perto de você (e no seu idioma), com base no país em que eles acham que você está.
Responder2
As atualizações teriam que ser instantâneas. Isso é possível, com cache de DNS e tudo?
Não, não é possível com DNS.Os registros DNS são servidos com um Time To Live (TTL), que especifica por quanto tempo os caches podem usar o registrosemverificando novamente com o servidor DNS oficial. E por vários motivos, os TTLs de DNS não podem efetivamente ser inferiores a 10 minutos. O round robing de DNS énãoa solução para balanceamento de carga, pelo menos não se você precisar de tempo de atividade do serviço. Veja corrigir issopergunta mais antiga de Jeff Atwood.
VocêpodeusarServiços DNS de terceiros que combinam DNS Round Robin com monitoramento proativodos servidores e remover automaticamente servidores mortos do DNS. Não é uma boa solução, mas pode ser boa o suficiente para sites menos importantes e é fácil de configurar usando fx DNSMadeEasy ou EdgeDirector.
A maneira padrão da indústria de lidar com a disponibilidade do servidor web éBalanceador de carga de Camada 4 ou Camada 7na frente dos servidores web.
serviço web no amazon ec2, distribuído em muitas instâncias, como posso fazer com que um único nome de domínio possa ser usado para acessar todo o conjunto de servidores
A Amazon oferece um serviço plug'n'play para isso,chamado AmazonBalanceamento de carga elástico. Basicamente, é um serviço gerenciado da Amazon, que configura um balanceador de carga de Camada 7 (HTTP) ou Camada 4 (TCP) na frente de seus servidores web EC2.
Outra opção comum é configurar uma instância EC2 com um balanceador de carga L7 como nginx, HAProxy, Apsis Pound, Apache 2.2, Zeus Load Balancer ou qualquer outro (existem vários). Mas se você seguir esse caminho, precisará gerenciar o software de balanceamento de carga OS + por conta própria e considerar como tornar a própria instância do balanceador de carga EC2 suficientemente altamente disponível.