Lanzamiento del balanceador de carga HTTP/TCP HAProxy 2.0

Publicado lanzamiento del balanceador de carga HAProxy 2.0, que permite distribuir el tráfico HTTP y las solicitudes TCP arbitrarias entre un grupo de servidores, teniendo en cuenta múltiples factores (por ejemplo, verifica la disponibilidad de los servidores, evalúa el nivel de carga, cuenta con herramientas contra DDoS) y realiza un filtrado inicial de datos (por ejemplo, se pueden analizar los encabezados HTTP, filtrar la transmisión de parámetros de solicitud incorrectos, bloquear inyecciones SQL y XSS, conectar agentes de procesamiento de contenido). HAProxy también puede utilizarse para coordinar la interacción de componentes en sistemas basados en microservicios. El código del proyecto está escrito en C y se entrega se publica bajo la licencia GPLv2. El proyecto se utiliza en muchos sitios grandes, incluidos Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter y Vimeo.

Características clave de la versión:

  • Se presenta una nueva API Data Plan, que permite gestionar sobre la marcha la configuración de HAProxy a través de REST Web API. Incluye la capacidad de agregar y eliminar dinámicamente backends y servidores, crear ACL, modificar el enrutamiento de solicitudes y cambiar las asignaciones de controladores a IP;
  • Se ha añadido la directiva nbthread, que permite configurar el número de hilos utilizados en HAProxy para optimizar el funcionamiento en CPU multinúcleo. De forma predeterminada, el número de hilos de trabajo se selecciona en función de los núcleos de CPU disponibles en el entorno actual, y en entornos de nube se establece un solo hilo por defecto. Para establecer límites estrictos, se han añadido las opciones de compilación MAX_THREADS y MAX_PROCS, que limitan el número máximo de hilos y procesos;
  • Se ha simplificado el uso de la directiva bind para vincular controladores a direcciones de red. Al configurarlo, ahora no es necesario definir los parámetros del proceso: por defecto, las conexiones se distribuirán entre los hilos en función del número de conexiones activas.
  • Se ha simplificado la configuración de registros al ejecutarse en contenedores aislados: ahora se pueden dirigir los registros a stdout y stderr, así como a cualquier descriptor de archivo existente (por ejemplo, «log fd@1 local0»);
  • Por defecto, se ha habilitado el soporte para HTX (Representación HTTP Nativa), lo que permite garantizar el balanceo de carga al aplicar características avanzadas como HTTP/2 de extremo a extremo, Reintentos en la Capa 7 y gRPC. HTX no reemplaza los encabezados en su lugar, sino que reduce la operación de modificación a la eliminación y adición de un nuevo encabezado al final de la lista, lo que permite manipular cualquier variante avanzada del protocolo HTTP, manteniendo la semántica original de los encabezados y logrando un mayor rendimiento al traducir de HTTP/2 a HTTP/1.1 y viceversa;
  • Se ha añadido soporte oficial para el modo HTTP/2 de extremo a extremo (procesamiento de todas las etapas en HTTP/2, incluyendo las llamadas al backend, no solo la interacción del proxy con el cliente);
  • Se ha implementado un soporte completo para el proxy bidireccional del protocolo gRPC con la capacidad de descomponer flujos gRPC, destacando mensajes individuales, reflejando el tráfico gRPC en el registro y filtrando mensajes mediante ACL. gRPC permite organizar el trabajo de microservicios en varios lenguajes de programación que interactúan entre sí a través de una API universal. La interacción de red en gRPC se implementa sobre el protocolo HTTP/2 y se basa en el uso de Protocol Buffers para la serialización de datos.
  • Se ha añadido soporte para el modo 'Reintentos en la Capa 7', que permite enviar solicitudes HTTP repetidas en caso de fallos del software que no estén relacionados con problemas de conexión de red (por ejemplo, si no hay respuesta o hay una respuesta vacía a una solicitud POST). Para deshabilitar este modo, se ha añadido la bandera 'disable-l7-retry' a la opción 'http-request', y para un ajuste fino, la opción 'retry-on' ha sido añadida en las secciones defaults, listen y backend. Están disponibles los siguientes indicadores para el reenvío: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, así como vinculación a los códigos de estado devueltos (404, etc.);
  • Se ha implementado un nuevo gestor de procesos (Process Manager), que permite configurar la llamada a archivos ejecutables externos con controladores para HAProxy.
    Por ejemplo, se ha implementado un controlador externo como API Data Plan (/usr/sbin/dataplaneapi), así como diferentes motores de procesamiento Offload;
  • Para .NET Core, Go, Lua y Python se han añadido enlaces para el desarrollo de extensiones SPOE (Motor de Procesamiento en Streaming Offload) y SPOP (Protocolo de Procesamiento en Streaming Offload). Anteriormente, solo se admitía el desarrollo de extensiones en C;
  • Se ha añadido un manejador externo spoa-mirror (\/usr\/sbin\/spoa-mirror) para la mirrorización de solicitudes en un servidor separado (por ejemplo, para copiar parte del tráfico de trabajo para probar un entorno experimental bajo carga real);
  • Presentado Controlador Ingress de HAProxy Kubernetes para garantizar la integración con la plataforma Kubernetes;
  • Se ha añadido soporte integrado para exportar estadísticas al sistema de monitoreo Prometheus;
  • Se ha ampliado el protocolo Peers Protocol, utilizado para intercambiar información con otros nodos con HAProxy. Se ha añadido soporte para Heartbeat y transmisión de datos cifrados;
  • Se ha añadido el parámetro "sample" en la directiva "log", que permite registrar solo una parte de las solicitudes, por ejemplo, 1 de cada 10, para la formación de una muestra analítica;
  • Se ha añadido un modo de perfilado automático (directiva profiling.tasks, que puede tomar los valores auto, on y off). El perfilado automático se activa si el promedio de latencia supera los 1000 ms. Se ha añadido el comando "show profiling" en la Runtime API para ver los datos de perfilado o la opción de reiniciar las estadísticas en el log;
  • Se ha añadido soporte para acceder a los servidores backend utilizando el protocolo SOCKS4;
  • Se ha añadido soporte de extremo a extremo (end-to-end, en su camino de procesamiento de la solicitud, abarcando el backend) para el mecanismo de apertura rápida de conexiones TCP (TFO — TCP Fast Open, RFC 7413), que permite reducir el número de pasos en el establecimiento de la conexión combinando en una sola solicitud los primeros dos pasos del clásico proceso de tres etapas de negociación y permite el envío de datos en la etapa inicial del establecimiento de la conexión;
  • Se han añadido nuevas acciones:
    • "http-request replace-uri" para reemplazar la URL utilizando expresiones regulares;
    • "tcp-request content do-resolve" y "http-request do-resolve" para resolver el nombre de host;
    • "tcp-request content set-dst" y "tcp-request content set-dst-port" para sustituir la dirección IP y el puerto de destino.
  • Se han añadido nuevos módulos de conversión:
    • aes_gcm_dev para descifrar flujos utilizando algoritmos AES128-GCM, AES192-GCM y AES256-GCM;
    • protobuf para extraer campos de mensajes de Protocol Buffers;
    • ungrpc para extraer campos de mensajes gRPC.

    Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster