Lanzamento do equilibrador HTTP/TCP HAProxy 2.0

publicado liberación do equilibrador de carga HA Proxy 2.0, que permite distribuír tráfico HTTP e solicitudes TCP arbitrarias entre un grupo de servidores, tendo en conta moitos factores (por exemplo, comproba a dispoñibilidade dos servidores, avalía o nivel de carga, ten contramedidas DDoS) e realiza un filtrado de datos primario ( por exemplo, pode analizar cabeceiras HTTP, filtrar parámetros de consulta incorrectos de transmisión, bloquear a substitución de SQL e XSS, conectar axentes de procesamento de contido). HAProxy tamén pode aplicar para coordinar a interacción de compoñentes en sistemas baseados na arquitectura de microservizos. O código do proxecto está escrito en C e subministrado licenciado baixo GPLv2. O proxecto úsase en moitos sitios grandes, incluíndo Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter e Vimeo.

Características clave do lanzamento:

  • Nova API introducida Plan de datos, que che permite xestionar a configuración de HAProxy ao voo a través da API web REST. Incluíndo, pode engadir e eliminar de forma dinámica backends e servidores, crear ACL, cambiar o enrutamento de solicitudes, cambiar as ligazóns do controlador a IP;
  • Engadiuse a directiva nbthread, que lle permite configurar o número de fíos utilizados en HAProxy para optimizar o rendemento nas CPU de varios núcleos. De forma predeterminada, selecciónase o número de fíos de traballo dependendo dos núcleos de CPU dispoñibles no ambiente actual, e nos contornos de nube o predeterminado é un fío. Para establecer límites estrictos, engadíronse as opcións de montaxe MAX_THREADS e MAX_PROCS, que limitan o límite superior do número de fíos e procesos;
  • Simplificouse o uso da directiva bind para vincular controladores a enderezos de rede. Ao configurar, xa non é necesario definir os parámetros do proceso; por defecto, as conexións distribuiranse entre os fíos dependendo do número de conexións activas.
  • Simplificouse a configuración de rexistros cando se executan en contedores illados: agora o rexistro pódese enviar a stdout e stderr, así como a calquera descritor de ficheiro existente (por exemplo, “log fd@1 local0”);
  • A compatibilidade con HTX (Representación HTTP nativa) está activada de forma predeterminada, o que permite o equilibrio cando se usan funcións avanzadas como HTTP/2 de extremo a extremo, Reintentos de capa 7 e gRPC. HTX non substitúe as cabeceiras no seu lugar, pero reduce a operación de modificación a eliminar e engadir unha nova cabeceira ao final da lista, o que lle permite manipular calquera variante estendida do protocolo HTTP, preservando a semántica orixinal das cabeceiras e permitíndolle para conseguir un maior rendemento ao traducir HTTP/2 a HTTP/1.1 e viceversa;
  • Engadido soporte oficial para o modo HTTP/2 de extremo a extremo (procesamento de todas as fases en HTTP/2, incluídas as chamadas ao backend, e non só a interacción entre o proxy e o cliente);
  • Implementouse o soporte completo para o proxy bidireccional do protocolo gRPC coa capacidade de analizar fluxos gRPC, resaltar mensaxes individuais, reflectir o tráfico gRPC no rexistro e filtrar mensaxes mediante ACL. gRPC permítelle organizar o traballo dos microservizos en varias linguaxes de programación que interactúan entre si mediante unha API universal. A comunicación de rede en gRPC está implementada enriba do protocolo HTTP/2 e baséase no uso de búfers de protocolo para a serialización de datos.
  • Engadido soporte para o modo "Reintentos de capa 7", que permite enviar solicitudes HTTP repetidas en caso de fallos de software que non estean relacionados con problemas para establecer unha conexión de rede (por exemplo, se non hai resposta ou unha resposta baleira a un solicitude POST). Para desactivar o modo, engadiuse a marca "disable-l7-retry" á opción "http-request" e engadiuse a opción "retry-on" para axustar con precisión as seccións predeterminadas, escoitar e back-end. Os seguintes signos están dispoñibles para reenviar: erros de todos os reintentos, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, así como vinculación para devolver códigos de estado (404, etc.) ;
  • Implementouse un novo xestor de procesos, que permite configurar a chamada de ficheiros executables externos con controladores para HAProxy.
    Por exemplo, a API do plan de datos (/usr/sbin/dataplaneapi), así como varios motores de procesamento de fluxos de descarga, están implementados en forma de controlador externo;

  • Engadíronse ligazóns para .NET Core, Go, Lua e Python para desenvolver extensións SPOE (Stream Processing Offload Engine) e SPOP (Stream Processing Offload Protocol). Anteriormente, só se admitía o desenvolvemento de extensións en C;
  • Engadiuse un controlador de espello spoa externo (/usr/sbin/spoa-mirror) para duplicar solicitudes nun servidor separado (por exemplo, para copiar parte do tráfico de produción para probar un ambiente experimental baixo unha carga real);
  • Presentado Controlador de entrada HAProxy Kubernetes para garantir a integración coa plataforma Kubernetes;
  • Engadido soporte integrado para exportar estatísticas ao sistema de seguimento Prometeu;
  • Estendeuse o protocolo Peers, usado para intercambiar información con outros nodos que executan HAProxy. Incluíndo soporte adicional para Heartbeat e transmisión de datos cifrados;
  • Engadiuse o parámetro "mostra" á directiva "log", que lle permite verter só unha parte das solicitudes no rexistro, por exemplo 1 de cada 10, para formar unha mostra analítica;
  • Engadiuse o modo de perfil automático (directiva profileing.tasks, que pode tomar os valores automático, activado e desactivado). O perfil automático está habilitado se a latencia media supera os 1000 ms. Para ver os datos de perfil, engadiuse o comando "mostrar perfilado" á API de execución ou é posible restablecer as estatísticas no rexistro;
  • Engadiuse compatibilidade para acceder aos servidores backend mediante o protocolo SOCKS4;
  • Engadiuse compatibilidade de extremo a extremo para o mecanismo de apertura rápida de conexións TCP (TFO - TCP Fast Open, RFC 7413), que permite reducir o número de pasos de configuración de conexión combinando o primeiro nunha solicitude e o segundo paso de o proceso clásico de negociación de conexión en 3 pasos e permite enviar datos na fase inicial do establecemento dunha conexión;
  • Novas accións engadidas:
    • "http-request replace-uri" para substituír o URL mediante unha expresión regular;
    • "tcp-request content do-resolve" e "http-request do-resolve" para resolver o nome do servidor;
    • "tcp-request content set-dst" e "tcp-request content set-dst-port" para substituír o enderezo IP e o porto de destino.
  • Engadíronse novos módulos de conversión:
    • aes_gcm_dev para descifrar fluxos utilizando os algoritmos AES128-GCM, AES192-GCM e AES256-GCM;
    • protobuf para extraer campos das mensaxes de Protocol Buffers;
    • ungrpc para extraer campos das mensaxes gRPC.

    Fonte: opennet.ru

Engadir un comentario