A configuração do Load Balancer e do Proxy na AWS exibe um desempenho irregular

1

Antecedentes

Uma solicitação HTTP enviada por um usuário final para www.stuff.com/things é processada da seguinte forma:

  1. Recebido por um aplicativo Load Balancer (o balanceador de carga público) que faz o balanceamento de carga para um proxy reverso NGINX (Vamos chamar isso de proxy de segurança).
  2. O proxy de segurança roteia a solicitação para um balanceador de carga de aplicativo particular.
  3. O balanceador de carga particular direciona o tráfego com base no URL. se a URL for /things/... , a solicitação será roteada para outro proxy NGINX.
  4. Esse segundo proxy NGINX (permite chamar isso de things proxy) direciona todas as solicitações para um balanceador de carga clássico.
  5. O balanceador de carga clássico escuta nas portas 80 e 50000 e equilibra solicitações para instâncias que hospedam o aplicativo things .

Então, para recapitular: tenho o balanceador de carga público , o proxy de segurança , o balanceador de carga particular , o things proxy e o balanceador de carga clássico.

O problema

Quando um usuário tenta visitar www.stuff.com/things , ele espera, aguarda e acaba recebendo um HTTP 504: tempo limite do gateway. Ou a página é carregada imediatamente. Ou, alguns elementos são carregados rapidamente enquanto outros são interrompidos.

Depuração

Eu tentei solicitar solicitações de vários lugares da cadeia:

  1. curl do balanceador de carga clássico , a resposta é instantânea
  2. curl a things proxy , a resposta é instantânea
  3. curl o balanceador de carga particular , a resposta é instantânea
  4. curl do proxy de segurança , a resposta é instantânea
  5. curl do balanceador de carga público , a resposta é slooooow ... exceto quando é rápido .

Talvez eu precise reconfigurar meus proxies?

Configuração de proxy

O proxy things é configurado da seguinte forma:

events {
    worker_connections 1024;
}
http {
    server {
        location ^~ /proxycheck {
            return 200 'available';
            add_header Content-Type text/plain;
        }

        location / {
            proxy_pass ${PROXY_ADDRESS};
        }
    }
}

O proxy de segurança é configurado da seguinte forma:

events {
    worker_connections 1024;
}
http {
    server {
        location ^~ /proxycheck {
            return 200 'available';
            add_header Content-Type text/plain;
        }

        location / {
            proxy_pass ${PROXY_ADDRESS};
            proxy_read_timeout 90;
            proxy_redirect default;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

No futuro, o proxy de segurança verificará os certificados. Até então, eu tenho esse outro problema.

Alguma sugestão?

    
por Liam M 05.03.2017 / 17:30

1 resposta

0

Parece que isso deve ter sido um problema transitório com a AWS (relacionado ao incidente muito divulgado sobre dedos gordos), porque não consegui reproduzi-lo desde que publiquei essa pergunta.

    
por 12.03.2017 / 05:32