Temos um aplicativo RoR na AWS Beijing. A AWS Beijing não possui a rota 53 (não podemos usar o alias para aplicar o ELB ao domínio Apex); portanto, devemos usar um servidor front-end executando o Nginx na frente do ELB.
Agora nossa arquitetura gosta abaixo:
Front-end (Nginx) - ELB --- Aplicativo- (1 ~ n) (Nginx - Unicorn)
Percebemos as palavras do Unicorndescrição abaixo: "O Unicorn nunca deve ser exposto a clientes lentos, pois nunca usará coisas novas, como E / S de soquete sem bloqueio, threads, epoll ou kqueue. O Unicorn deve ser usado com um proxy reverso com buffer completo, como o nginx for clientes lentos ".
Então minha pergunta é:
1. Antes do Unicorn, precisamos do nginx no App Server?
2. Se removermos o nginx no App Server, o nginx no servidor front-end pode executar esse efeito, como a descrição do unicórnio?
Respostas:
1 para resposta № 1Eu recomendaria substituir o ELB pelo HAProxynesse cenário em que você não tem o recurso de alias do Route53 para apontar para o seu domínio principal. Colocar uma instância do Nginx na frente do ELB não parece uma boa ideia, pois você está adicionando uma nova camada apenas porque pode "t referenciar o ELB no Route53. Você também perde o benefício de alta disponibilidade colocando uma instância do Nginx na frente do ELB.
Minha sugestão é que você mantenha uma instância deNginx em cada servidor de aplicativos na frente do Unicorn e use o HAProxy como balanceador de carga: HAProxy> [Nginx> Unicorn]. Em uma configuração simples do HAProxy, você também não tem a mesma disponibilidade do ELB, mas pode definir uma configuração de alta disponibilidade, se necessário.
0 para resposta № 2
1) O Nginx deve estar sempre na frente do Unicorn porque o Unicorn não pode lidar com clientes lentos com eficiência, apenas bloqueado por esses clientes
2) Nunca fale com o Unicorn via rede, isso significa que cada servidor de aplicativos precisa ter seu próprio Nginx. O Nginx como Load Balancer é muito melhor que a caixa preta do ELB.