Al configurar el proxy HA, ¿cómo decide qué valores asignar a los tiempos de espera? He leído media docena de muestras en varios blogs, y todos usan diferentes tiempos de espera y nadie discute por qué.
HAProxy parece específicamente preocupado por el cliente, la conexión y el servidor, sobre lo cual HAPRoxy lanza una advertencia si se deja completamente sin configurar:
While not properly invalid, you will certainly encounter various problems
with such a configuration. To fix this, please ensure that all following
timeouts are set to a non-zero value: 'client', 'connect', 'server'.
La documentación no es útil a este respecto: sugiere "un poco por encima de los múltiplos de 3 segundos", pero no por qué elegiría un múltiplo de 1 frente a 100 o 42.
El RPM que estoy usando (repositorio de Amazon Linux) establece estos valores predeterminados:
timeout connect 10s
timeout client 1m
timeout server 1m
Dos de los cuales son múltiplos exactos de 3 segundos, violando el único consejo oficial que he visto.
Si no tiene un consejo de ajuste específico, tal vez una pregunta más fácil es: ¿qué debo esperar que salga mal con tiempos de espera realmente cortos o muy largos?
Prefacio
He estado ajustando HAProxy por un tiempo y he realizado muchas pruebas de rendimiento. Desde 100 solicitudes HTTP / s hasta 50 000 solicitudes HTTP / s.
El primer consejo es habilitar la página de estadísticas en HAProxy . NECESITA monitoreo, sin excepción. También necesitará un ajuste fino si tiene la intención de superar las 10,000 solicitudes / s.
Los tiempos de espera son una bestia confusa porque tienen una gran variedad de valores posibles, la mayoría de ellos sin diferencias observables. Todavía tengo que ver que algo falle debido a un número 5% menor o 5% mayor. 10000 vs 11000 milisegundos, ¿a quién le importa? Probablemente no sea tu sistema.
Configuración
En buena conciencia, no puedo dar un par de números como "los mejores tiempos de espera para todos".
Lo que sí puedo decir son los tiempos de espera MÁS agresivos que siempre son aceptables para el equilibrio de carga HTTP (S). Si encuentra más bajo que estos, es hora de reconfigurar su equilibrador de carga.
cliente de tiempo de espera:
Leer : este es el tiempo máximo para recibir encabezados de solicitud HTTP del cliente.
3G / 4G / 56k / satélite puede ser lento a veces. Aún así, deberían poder enviar encabezados HTTP en unos segundos, NO 30.
Si alguien tiene una conexión tan mala que necesita más de 30 segundos para solicitar una página (luego más de 10 * 30 segundos para solicitar las 10 imágenes incrustadas / CSS / JS), creo que es aceptable rechazarlo.
servidor de tiempo de espera:
Leer : este es el tiempo máximo para recibir encabezados de respuesta HTTP del servidor (después de que recibió la solicitud completa del cliente). Básicamente, este es el tiempo de procesamiento de sus servidores, antes de que comience a enviar la respuesta.
Si su servidor es tan lento que requiere más de 30 segundos para comenzar a dar una respuesta, entonces creo que es aceptable considerarlo muerto.
Caso especial : algunos servicios RAROS que realizan un procesamiento muy pesado pueden tardar un minuto o más en responder. Es posible que sea necesario aumentar mucho este tiempo de espera para este uso específico. (Nota: es probable que este sea un caso de mal diseño, use una comunicación de estilo asíncrono o no use HTTP en absoluto).
tiempo de espera de conexión:
Leer : el tiempo máximo que un servidor tiene para aceptar una conexión TCP.
Los servidores están en la misma LAN que HAProxy, por lo que debería ser rápido. Déle al menos 5 segundos porque ese es el tiempo que puede tomar cuando ocurre algo inesperado (un paquete TCP perdido para retransmitir, un servidor que bifurca un nuevo proceso para tomar las nuevas solicitudes, un aumento en el tráfico).
Caso especial : cuando los servidores están en una LAN diferente o sobre un enlace poco confiable. Es posible que sea necesario aumentar mucho este tiempo de espera. (Nota: es probable que esto sea un caso de mala arquitectura).
verificación de tiempo de espera:
Leer : Al realizar una comprobación de estado, el servidor
timeout connect
debe aceptar la conexión y luegotimeout check
dar la respuesta.Todos los servidores DEBEN tener una comprobación de estado HTTP (S) configurada. Esa es la única forma para que el equilibrador de carga sepa si hay un servidor disponible. El chequeo de salud es una
/isalive
página simple que siempre respondeOK
.Dé a este tiempo de espera al menos 5 segundos porque es el tiempo que puede tomar cuando sucede algo inesperado (un paquete TCP perdido para retransmitir, un servidor que bifurca un nuevo proceso para tomar las nuevas solicitudes, un pico en el tráfico).
Historia de guerra : Mucha gente cree erróneamente que el servidor siempre puede responder a esta página simple en 3 ms. Establecieron un tiempo de espera agresivo (<2000 ms) con conmutación por error agresiva (2 comprobaciones fallidas = servidor muerto). He visto sitios web enteros cayendo debido a eso. Por lo general, hay un ligero aumento en el tráfico, los servidores de fondo se vuelven más lentos, los controles de salud se retrasan ... hasta que de repente se agotan todos juntos, HAProxy cree que TODOS los servidores murieron de inmediato y todo el sitio se cae.
fuente