Lanzamiento del equilibrador HTTP/TCP HAProxy 2.0

publicado lanzamiento del balanceador de carga HAProxy 2.0, que le permite distribuir el tráfico HTTP y solicitudes TCP arbitrarias entre un grupo de servidores, teniendo en cuenta muchos factores (por ejemplo, verifica la disponibilidad de los servidores, evalúa el nivel de carga, tiene contramedidas DDoS) y realiza el filtrado de datos primario ( por ejemplo, puede analizar encabezados HTTP, filtrar la transmisión de parámetros de consulta incorrectos, bloquear la sustitución de SQL y XSS, conectar agentes de procesamiento de contenido). HAProxy también puede aplicar coordinar la interacción de componentes en sistemas basados ​​en arquitectura de microservicios. El código del proyecto está escrito en C y suministrado Licenciado bajo GPLv2. El proyecto se utiliza en muchos sitios grandes, incluidos Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter y Vimeo.

Características clave del lanzamiento:

  • Nueva API introducida Plan de datos, que le permite administrar la configuración de HAProxy sobre la marcha a través de la API web REST. Incluyendo, puede agregar y eliminar dinámicamente backends y servidores, crear ACL, cambiar el enrutamiento de solicitudes, cambiar los enlaces del controlador a IP;
  • Se agregó la directiva nbthread, que le permite configurar la cantidad de subprocesos utilizados en HAProxy para optimizar el rendimiento en CPU de múltiples núcleos. De forma predeterminada, la cantidad de subprocesos de trabajo se selecciona según los núcleos de CPU disponibles en el entorno actual y, en entornos de nube, el valor predeterminado es un subproceso. Para establecer límites estrictos, se han agregado las opciones de ensamblaje MAX_THREADS y MAX_PROCS, lo que limita el límite superior en la cantidad de subprocesos y procesos;
  • Se ha simplificado el uso de la directiva de vinculación para vincular controladores a direcciones de red. Al configurar, ya no es necesario definir los parámetros del proceso; de forma predeterminada, las conexiones se distribuirán entre subprocesos según la cantidad de conexiones activas.
  • Se ha simplificado la configuración de registros cuando se ejecuta en contenedores aislados: el registro ahora se puede enviar a stdout y stderr, así como a cualquier descriptor de archivo existente (por ejemplo, “log fd@1 local0”);
  • La compatibilidad con HTX (representación HTTP nativa) está habilitada de forma predeterminada, lo que permite el equilibrio cuando se utilizan funciones avanzadas como HTTP/2 de extremo a extremo, reintentos de capa 7 y gRPC. HTX no reemplaza los encabezados existentes, pero reduce la operación de modificación a eliminar y agregar un nuevo encabezado al final de la lista, lo que le permite manipular cualquier variante extendida del protocolo HTTP, preservando la semántica original de los encabezados y permitiéndole lograr un mayor rendimiento al traducir HTTP/2 a HTTP/1.1 y viceversa;
  • Se agregó soporte oficial para el modo HTTP/2 de extremo a extremo (procesamiento de todas las etapas en HTTP/2, incluidas las llamadas al backend, y no solo la interacción entre el proxy y el cliente);
  • Se implementó soporte completo para el proxy bidireccional del protocolo gRPC con la capacidad de analizar transmisiones de gRPC, resaltar mensajes individuales, reflejar el tráfico de gRPC en el registro y filtrar mensajes mediante ACL. gRPC le permite organizar el trabajo de microservicios en varios lenguajes de programación que interactúan entre sí mediante una API universal. La comunicación de red en gRPC se implementa sobre el protocolo HTTP/2 y se basa en el uso de búferes de protocolo para la serialización de datos.
  • Se agregó soporte para el modo “Reintentos de Capa 7”, que le permite enviar solicitudes HTTP repetidas en caso de fallas de software que no están relacionadas con problemas al establecer una conexión de red (por ejemplo, si no hay respuesta o una respuesta vacía a un solicitud POST). Para deshabilitar el modo, se agregó el indicador “disable-l7-retry” a la opción “http-request”, y se agregó la opción “retry-on” para realizar ajustes en las secciones predeterminadas, de escucha y de backend. Los siguientes signos están disponibles para reenviar: todos los errores reintentables, ninguno, error de conexión, respuesta vacía, respuesta basura, tiempo de espera de respuesta, 0rtt-rechazado, así como vinculación a códigos de estado de devolución (404, etc.) ;
  • Se ha implementado un nuevo administrador de procesos, que le permite configurar la llamada a archivos ejecutables externos con controladores para HAProxy.
    Por ejemplo, la API del plan de datos (/usr/sbin/dataplaneapi), así como varios motores de procesamiento de flujo de descarga, se implementan en forma de dicho controlador externo;

  • Se han agregado enlaces para .NET Core, Go, Lua y Python para desarrollar extensiones SPOE (Stream Processing Offload Engine) y SPOP (Stream Processing Offload Protocol). Anteriormente, el desarrollo de extensiones solo se admitía en C;
  • Se agregó un controlador de espejo spoa externo (/usr/sbin/spoa-mirror) para duplicar solicitudes a un servidor separado (por ejemplo, para copiar parte del tráfico de producción para probar un entorno experimental bajo una carga real);
  • Presentado por Controlador de ingreso HAProxy Kubernetes asegurar la integración con la plataforma Kubernetes;
  • Se agregó soporte integrado para exportar estadísticas al sistema de monitoreo. Prometeo;
  • Se ha ampliado el protocolo Peers, utilizado para intercambiar información con otros nodos que ejecutan HAProxy. Incluye soporte adicional para Heartbeat y transmisión de datos cifrados;
  • Se agregó el parámetro "muestra" a la directiva "registro", que le permite volcar solo una parte de las solicitudes en el registro, por ejemplo 1 de 10, para formar una muestra analítica;
  • Se agregó el modo de creación de perfiles automático (directiva perfiling.tasks, que puede tomar los valores automáticamente, activarlos y desactivarlos). La creación de perfiles automática está habilitada si la latencia promedio supera los 1000 ms. Para ver los datos de creación de perfiles, se agregó el comando "mostrar perfiles" a la API de Runtime o es posible restablecer las estadísticas en el registro;
  • Se agregó soporte para acceder a servidores backend utilizando el protocolo SOCKS4;
  • Se agregó soporte de extremo a extremo para el mecanismo para abrir rápidamente conexiones TCP (TFO - TCP Fast Open, RFC 7413), que le permite reducir la cantidad de pasos de configuración de la conexión combinando el primero en una sola solicitud y el segundo paso de el clásico proceso de negociación de conexión de 3 pasos y permite enviar datos en la etapa inicial de establecimiento de una conexión;
  • Nuevas acciones agregadas:
    • "http-request replace-uri" para reemplazar la URL usando una expresión regular;
    • “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 agregaron nuevos módulos de conversión:
    • aes_gcm_dev para descifrar transmisiones utilizando los 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

Añadir un comentario