
tengo ungrupo de instancia regionalcon 2 instancias funcionando en el puerto 8000, sin escalado automático habilitado.
Este grupo de instancias es el backend de unBalanceador de carga de aplicaciones externas globales.
El servidor web de las instancias ejecuta flask y cada solicitud tardará 1 segundo en procesarse:
@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
Puedo confirmar el comportamiento presionando la IP pública del balanceador de carga global, es decir, toma 1 segundo obtener una respuesta.
Si ejecuto 2 solicitudes al mismo tiempo, como hay 2 instancias, espero que cada solicitud vaya a una instancia diferente, en lugar de eso, siempre van a la misma instancia y se ponen en cola en ella, por lo que:
- una solicitud tomará 1 segundo
- la otra solicitud tardará 2 segundos
Intenté cambiar a Locality load balancing policy
y , Round-Robin
pero siempre obtengo el mismo comportamiento.Least-Request
Random
¿Estoy entendiendo correctamente que Locality load balancing policy
solo se trata de qué backend se elegirá? En caso afirmativo, ¿cómo se configura la política de equilibrio de carga dentro de un backend (es decir, un grupo de instancias)?
Gracias
Configuración
grupo de instancias
- Regional
- Forma de distribución objetivo: uniforme
- [x] Permitir la redistribución de instancias
- Escala automática activada: mínimo 2, máximo 2
- Señal de escalado automático: equilibrio de carga HTTP al 100%
- Periodo de inicialización: 60s
- Chequeo de salud:
- Ruta: /salud
- Protocolo: HTTP
- Puerto: 8000
- Intervalo: 30 segundos
- Tiempo de espera: 30 segundos
- Umbral saludable: 1
- Umbral insalubre: 10
equilibrador de carga
- Interfaz:
- Protocolo: HTTP
- IP: xxxx
- Nivel de red: Premium
- Tiempo de espera de mantenimiento de HTTP: 610 segundos
- Reglas de enrutamiento: todas incomparables
- Servicios de back-end:
- Protocolo de punto final: HTTP
- Puerto con nombre: web
- Tiempo de espera: 300 segundos
- CDN en la nube: deshabilitado
- Registro: habilitado (frecuencia de muestreo: 1)
- Afinidad de sesión: ninguna
- Tiempo de espera de drenaje de conexión: 300 segundos
- Política de tráfico:
- Política de equilibrio de carga de localidad: round robin
- Detección de valores atípicos: deshabilitada
- Política de seguridad de backend: Ninguna
- Política de seguridad perimetral: ninguna
- Proxy con reconocimiento de identidad: deshabilitado
- Modo de equilibrio: máx. RPS: 1 (por instancia)
- Capacidad: 100%
Prueba
siege \
--concurrent 1 \
--time 60s \
"http://x.x.x.x"
Con 2 nodos:
concurrent=1
: promedio 1,02 segundosconcurrent=2
: promedio 1,66 segundosconcurrent=4
: promedio 3,35 segundosconcurrent=8
: promedio 5,54 segundos
Con 4 nodos:
concurrent=1
: promedio 1,02 segundosconcurrent=2
: promedio 1,18 segundosconcurrent=4
: promedio 2,70 segundosconcurrent=8
: promedio 3,83 segundosconcurrent=16
: promedio 7,26 segundos
Con 8 nodos:
concurrent=2
: promedio 1,20 segundosconcurrent=4
: promedio 1,85 segundosconcurrent=16
: promedio 4,40 segundosconcurrent=64
: promedio 14,06 segconcurrent=128
: promedio 19,04 seg
Comportamiento esperado
Habría asumido resultados como:
- 2 nodos:
concurrent=1
: 1 segundoconcurrent=2
: 1 segundoconcurrent=4
: ~2 segundosconcurrent=8
: ~4 seg.
- 4 nodos:
concurrent=1
: 1 segundoconcurrent=2
: 1 segundoconcurrent=4
: 1 segundoconcurrent=8
: ~2 segundosconcurrent=16
: ~4 seg.
Actualización 1
Si cambio a a Classic proxy network load balancer
y envío 100 solicitudes:
- 56 ir a vm0
- 44 ir a vm1
En lugar de un LB HTTP:
- 99 ir a vm0
- 1 ir a vm1
Respuesta1
Residencia enBalanceador de carga de aplicaciones externo globalGFE (Google Front End) estima qué instancias de backend tienen capacidad para recibir solicitudes. Puede escanear el enlace compartido para saber más sobre la distribución del tráfico.
Si cree que el round-robin no le funciona, le sugiero que utilicemodo de equilibriodonde el concepto o configuración es distribuir el tráfico de manera uniforme.
También encontré estoenlaceuna pregunta de stackoverflow que podría ser útil al usar el modo de equilibrio.