Como um domínio pode ser roteado para um pool de servidores em constante mudança?

2

Tenho certeza de que essa é uma solução fácil. Não estou muito familiarizado com o funcionamento do DNS ou se isso está relacionado a esse problema.

Se eu estiver executando um serviço da web no amazon ec2, distribuído em várias instâncias, como posso fazer com que um único nome de domínio possa ser usado para acessar todo o pool de servidores, que será alterado de tempos em tempos?

Como as instâncias podem estar presentes por um segundo, mas foram para o próximo (e vice-versa), preciso de uma maneira de escolher aleatoriamente um membro ativo do cluster para o roteamento. As atualizações teriam que ser instantâneas. Isso é possível, com cache de dns e tudo mais?

    
por ryeguy 22.12.2010 / 20:26

2 respostas

2

Existem várias abordagens para isso, algumas das quais estão ao seu alcance.

No seu caso, eu 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 usada e testada.

Se você precisar remover um servidor do pool, basta remover seus registros DNS e a maioria dos clientes parará de usá-lo após a expiração do TTL. 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 amplia isso, depois que você acessar o website, redirecionando você para uma versão que é hospedada perto de você (e no seu idioma), com base no país em que você acredita estar. não precisa.

    
por 22.12.2010 / 20:32
2

The updates would have to be instantaneous. Is this even possible, with dns caching and all?

Não, não é possível com o DNS. Os registros DNS são servidos com um Time To Live (TTL), que especifica a quantidade de caches de tempo que podem usar o registro sem verificar novamente com o servidor DNS autoritativo. E por vários motivos, os TTLs de DNS não podem ser efetivamente inferiores a 10 minutos. O round robing de DNS não é a solução para balanceamento de carga, pelo menos não se você precisar de tempo de atividade de serviço. Veja fx esta pergunta mais antiga de Jeff Atwood .

Você pode usar serviços DNS de terceiros que combina o DNS Round Robin com o monitoramento proativo dos servidores e remove automaticamente os servidores mortos do DNS. Não é uma boa solução, mas pode ser boa o suficiente para sites menos importantes, e é fácil configurar usando fx DNSMadeEasy ou EdgeDirector.

A maneira padrão do setor de lidar com a disponibilidade de servidores da Web é um balanceador de carga de Camada 4 ou Camada 7 na frente dos servidores da Web.

web service on amazon ec2, distributed across many instances, how can I make it so a single domain name can be used to access the entire pool of servers

A Amazon oferece um serviço plug'n'play para isso, chamado Elastic Load Balancing da Amazon . 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 da Web EC2.

Outra opção comum é configurar uma instância do EC2 com um balanceador de carga L7, como o nginx, o HAProxy, o Apsis Pound, o Apache 2.2, o Zeus Load Balancer ou outra coisa (existem vários). Mas, se você seguir esse caminho, precisará gerenciar o software de balanceamento de carga do SO + e considerar como tornar a instância do balanceador de carga do EC2 disponível com bastante disponibilidade.

    
por 22.12.2010 / 23:23