Configuração

Configuração

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-Robine Least-Request, Randommas sempre obtenho o mesmo comportamento.

Estou entendendo corretamente que Locality load balancing policyse 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 segundo
    • concurrent=2: 1 segundo
    • concurrent=4: ~2 seg.
    • concurrent=8: ~4 seg.
  • 4 nós:
    • concurrent=1: 1 segundo
    • concurrent=2: 1 segundo
    • concurrent=4: 1 segundo
    • concurrent=8: ~2 seg.
    • concurrent=16: ~4 seg.

Atualização 1

Se eu mudar para a Classic proxy network load balancere 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.

informação relacionada