Os requisitos: ter uma solução prática que funcione para nuvem ou qualquer tipo de ambiente em que não haja acesso a balanceadores de carga de hardware, protocolos BGP e tudo mais.
O número de solicitação de renda de um aplicativo é desconhecido, mas deve ser alto o suficiente para atender a uma expectativa de carga aumentada sem medo.
Vamos encontrar um aplicativo com natureza semelhante de carga, por exemplo, loja de log e aplicativo de pesquisa. Eu encontrei um .
O que eles querem:
- Equilibre a carga entre os coletores
- Oferecer tolerância a falhas, permitindo continuar a ingestão de dados se um dos coletores morrer ou estiver com problemas
- Dimensione horizontalmente com o crescimento de nossos volumes de log
O que eles tentaram e aprenderam sobre o ELB:
- Não funciona como esperado
- Problemas de latência devido ao aumento de carga
- Instalação de monitoramento insuficiente
- Limitação demais (número de portas e protocolos abertos)
Por que eles escolheram com o Route53:
- "O round robin é um balanceamento de carga bastante básico, mas funciona bem para nós do ponto de vista da eficiência"
- "Aproveitamos as verificações de integridade de failover da Rota 53".
- "Se houver um problema com um colecionador, o Route 53 o retirará automaticamente do serviço; nossos clientes não verão nenhum impacto".
- Não é necessário pré-aquecimento com o Route 53
A rota 53 acabou sendo a melhor maneira de a Loggly tirar proveito de nossos coletores de alto desempenho, dados nossos enormes volumes de toras, variações imprevisíveis e crescimento constante em nossos negócios. Ele se alinha aos principais objetivos dos coletores: coletar dados na velocidade da linha de rede com perda zero e nos permite beneficiar da elasticidade de todos os serviços da AWS que usamos na Loggly.
Esse exemplo em particular mostra que, em alguns cenários (coletor de logs, serviço de anúncios ou similar), o balanceador de carga é redundante e a "solução de rodízio de verificação de integridade do DNS" faz seu trabalho muito bem.
Vamos ver o que a AWS diz sobre o failover de DNS:
Com o Failover de DNS, o Route 53 pode detectar uma interrupção do seu site e redirecionar seus usuários finais para locais alternativos ou de backup que você especificar. O Failover de DNS da rota 53 depende de verificações de integridade - fazendo regularmente solicitações da Internet para os terminais de seus aplicativos de vários locais ao redor do mundo - para determinar se cada terminal de seu aplicativo está ativo ou inativo.
Essa técnica também torna o ELB (não obrigatório, apenas para uma observação) mais robusto, mais uma vez, é baseado no RR + Health Check:
O failover de DNS da rota 53 lida com todos esses cenários de falha, integrando-se ao ELB nos bastidores. Uma vez ativado, o Route 53 configura e gerencia automaticamente verificações de integridade de nós ELB individuais.
Vamos agora ver como funciona nos bastidores. A pergunta óbvia é como lidar com o cache do DNS:
No entanto, o cache do DNS ainda pode ser um problema aqui (consulte nossa postagem anterior, onde o problema da "cauda longa" é abordado) se o TTL não for respeitado por todas as camadas entre o cliente e o Route 53. Você poderá aplicar uma técnica de "impedimento de cache": envie uma solicitação para um domínio único
("http://<unique-id>.<your-domain>")
e defina um Recurso Curinga
Record "*.<your-domain>" to match it.
A Algolia introduziu a "estratégia de nova tentativa do cliente", que funciona muito bem se o seu cliente (JS no seu caso) puder lidar com isso:
Acabamos implementando uma estratégia básica de repetição em nossos clientes de API. Cada cliente da API foi desenvolvido para poder acessar três máquinas diferentes. Três registros DNS diferentes representavam cada usuário: USERIDID-1.algolia.io, USERID-2.algolia.io e USERID-3.algolia.io. Nossa primeira implementação foi selecionar aleatoriamente um dos registros e tentar novamente com outro diferente em caso de falha.