
eu tenho umgrupo de instâncias regionaiscom duas instâncias servindo na porta 8000, sem escalonamento automático ativado.
Este grupo de instâncias é o back-end de umBalanceador de carga de aplicativo externo global.
O servidor web nas instâncias está executando flask e cada solicitação levará 1 segundo para ser processada:
@app.route("/", methods=["GET"])
def main() -> Response:
sleep(1)
response = jsonify(
success=True,
hostname=gethostname(),
)
response.status_code = 200
response.headers["Access-Control-Allow-Origin"] = "*"
return response
Posso confirmar o comportamento acessando o ip público do balanceador de carga global, ou seja, leva 1 segundo para obter uma resposta.
Se eu executar 2 solicitações ao mesmo tempo, como há 2 instâncias, espero que cada solicitação vá para uma instância diferente, em vez disso, elas sempre vão para a mesma instância e ficam na fila dela, então:
- uma solicitação levará 1 segundo
- a outra solicitação levará 2 segundos
Tentei mudar para Locality load balancing policy
, Round-Robin
e Least-Request
, Random
mas sempre obtenho o mesmo comportamento.
Estou entendendo corretamente que Locality load balancing policy
se trata apenas de qual back-end será escolhido? Se sim, como você configura a política de balanceamento de carga dentro de um back-end (ou seja, grupo de instâncias)?
Obrigado
Configuração
Grupo de instâncias
- Regional
- Formato de distribuição alvo: Par
- [x] Permitir redistribuição de instâncias
- Escalonamento automático ativado: mínimo 2, máximo 2
- Sinal de escalonamento automático: balanceamento de carga HTTP 100%
- Período de inicialização: 60 anos
- Exame de saúde:
- Caminho: /saúde
- Protocolo: HTTP
- Porto: 8000
- Intervalo: 30 seg.
- Tempo limite: 30 seg.
- Limiar saudável: 1
- Limite insalubre: 10
Balanceador de carga
- Front-end:
- Protocolo: HTTP
- IP: xxxx
- Nível de rede: Premium
- Tempo limite de manutenção de atividade HTTP: 610 segundos
- Regras de roteamento: todas incomparáveis
- Serviços de back-end:
- Protocolo de terminal: HTTP
- Porta nomeada: web
- Tempo limite: 300 segundos
- Cloud CDN: desativado
- Logging: Habilitado (taxa de amostragem: 1)
- Afinidade da sessão: Nenhuma
- Tempo limite de drenagem da conexão: 300 segundos
- Política de trânsito:
- Política de balanceamento de carga de localidade: Round robin
- Detecção de valores discrepantes: Desativado
- Política de segurança de back-end: nenhuma
- Política de segurança de borda: Nenhuma
- Proxy com reconhecimento de identidade: desativado
- Modo de equilíbrio: Máx. RPS: 1 (por instância)
- Capacidade: 100%
Teste
siege \
--concurrent 1 \
--time 60s \
"http://x.x.x.x"
Com 2 nós:
concurrent=1
: média 1,02 seg.concurrent=2
: média 1,66 seg.concurrent=4
: média 3,35 seg.concurrent=8
: média 5,54 seg.
Com 4 nós:
concurrent=1
: média 1,02 seg.concurrent=2
: média 1,18 seg.concurrent=4
: média 2,70 seg.concurrent=8
: média 3,83 seg.concurrent=16
: média 7,26 seg.
Com 8 nós:
concurrent=2
: média 1,20 seg.concurrent=4
: média 1,85 seg.concurrent=16
: média 4,40 seg.concurrent=64
: média 14,06 seg.concurrent=128
: média 19,04 seg.
Comportamento esperado
Eu teria assumido resultados como:
- 2 nós:
concurrent=1
: 1 segundoconcurrent=2
: 1 segundoconcurrent=4
: ~2 seg.concurrent=8
: ~4 seg.
- 4 nós:
concurrent=1
: 1 segundoconcurrent=2
: 1 segundoconcurrent=4
: 1 segundoconcurrent=8
: ~2 seg.concurrent=16
: ~4 seg.
Atualização 1
Se eu mudar para a Classic proxy network load balancer
e enviar 100 solicitações:
- 56 vá para vm0
- 44 vá para vm1
Em vez disso, para um HTTP LB:
- 99 vá para vm0
- 1 vou para vm1
Responder1
Baseado emBalanceador de carga de aplicativo externo globalO GFE (Google Front End) estima quais instâncias de back-end têm capacidade para receber solicitações. Você pode digitalizar o link compartilhado para saber mais sobre a distribuição do tráfego.
Se você acha que o round-robin não está funcionando para você, sugiro usarmodo de balanceamentoem que o conceito ou configuração é distribuir o tráfego uniformemente.
Eu também encontrei issolinkuma pergunta do stackoverflow que pode ser útil no uso do modo de balanceamento.