lancement du rĂ©partiteur de charge , permettant de rĂ©partir le trafic HTTP et les requĂȘtes TCP arbitraires entre un groupe de serveurs, en tenant compte de nombreux facteurs (par exemple, vĂ©rifie la disponibilitĂ© des serveurs, Ă©value le niveau de charge, dispose de moyens de lutte contre les attaques DDoS) et effectue un filtrage initial des donnĂ©es (comme la possibilitĂ© d'analyser les en-tĂȘtes HTTP, de filtrer la transmission de paramĂštres de requĂȘte incorrects, de bloquer l'injection SQL et les XSS, et de connecter des agents de traitement de contenu). HAProxy peut Ă©galement pour coordonner l'interaction des composants dans les systĂšmes basĂ©s sur l'architecture des microservices. Le code du projet est Ă©crit en langage C et sous licence GPLv2. Le projet est utilisĂ© sur de nombreux grands sites, y compris Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter et Vimeo.
Fonctionnalités clés de la version :
- Nouveau API , permettant de gĂ©rer dynamiquement les paramĂštres de HAProxy via REST Web API. Il est notamment possible d'ajouter et de supprimer dynamiquement des backends et des serveurs, de crĂ©er des ACL, de modifier le routage des requĂȘtes, de changer les liaisons des gestionnaires aux IP ;
- Ajout de la directive nbthread, permettant de configurer le nombre de threads utilisĂ©s par HAProxy pour optimiser le fonctionnement sur les processeurs multicĆurs. Par dĂ©faut, le nombre de threads de travail est choisi en fonction des cĆurs de CPU disponibles dans l'environnement actuel, tandis que dans les environnements cloud, un seul thread est par dĂ©faut configurĂ©. Pour dĂ©finir des limites strictes, des options de compilation MAX_THREADS et MAX_PROCS ont Ă©tĂ© ajoutĂ©es, limitant le plafond sur le nombre de threads et de processus ;
- Simplification de l'utilisation de la directive bind pour lier les gestionnaires aux adresses réseau. Lors de la configuration, il n'est plus nécessaire de définir les paramÚtres du processus - par défaut, les connexions seront réparties sur les threads en fonction du nombre de connexions actives.
- Simplification de la configuration des journaux lors du dĂ©marrage dans des conteneurs isolĂ©s - le journal peut maintenant ĂȘtre dirigĂ© vers stdout et stderr, ainsi que vers tout descripteur de fichier existant (comme «log fd@1 local0»);
- La prise en charge de HTX (Native HTTP Representation) est activĂ©e par dĂ©faut, permettant d'assurer la rĂ©partition de la charge lors de l'utilisation de fonctionnalitĂ©s avancĂ©es telles que HTTP/2 de bout en bout, les tentatives de connexion de niveau 7 et gRPC. HTX ne remplace pas les en-tĂȘtes sur place, mais rĂ©duit l'opĂ©ration de modification Ă la suppression et l'ajout d'un nouvel en-tĂȘte Ă la fin de la liste, ce qui permet de manipuler toutes les variantes avancĂ©es du protocole HTTP tout en prĂ©servant la sĂ©mantique d'origine des en-tĂȘtes et en atteignant une performance amĂ©liorĂ©e lors de la traduction de HTTP/2 vers HTTP/1.1 et vice versa;
- Ajout du support officiel du mode de bout en bout HTTP/2 (traitement de toutes les étapes en HTTP/2, y compris les appels au backend, et pas seulement l'interaction du proxy avec le client);
- Support complet du proxy bidirectionnel pour le protocole gRPC avec la capacitĂ© d'analyser des flux gRPC, en extrayant des messages distincts, en reflĂ©tant le trafic gRPC dans les logs et en filtrant les messages Ă l'aide d'un ACL. gRPC permet d'organiser le travail des microservices dans diffĂ©rents langages de programmation, qui interagissent entre eux via une API universelle. Les interactions rĂ©seau dans gRPC sont mises en Ćuvre sur le protocole HTTP/2 et reposent sur l'utilisation des Protocol Buffers pour la sĂ©rialisation des donnĂ©es.
- Ajout du soutien pour le mode « Layer 7 Retries », permettant d'envoyer des requĂȘtes HTTP rĂ©pĂ©tĂ©es en cas d'Ă©checs logiciels non liĂ©s Ă des problĂšmes de connexion rĂ©seau (par exemple, en l'absence de rĂ©ponse ou en cas de rĂ©ponse vide Ă une requĂȘte POST). Pour dĂ©sactiver ce mode, un flag « disable-l7-retry » a Ă©tĂ© ajoutĂ© Ă l'option « http-request », et pour un rĂ©glage fin, une option « retry-on » est dĂ©sormais disponible dans les sections defaults, listen et backend. Les critĂšres suivants sont disponibles pour la rĂ©pĂ©tition : all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, ainsi que la liaison aux codes de statut retournĂ©s (404, etc.);
- Mise en Ćuvre d'un nouveau gestionnaire de processus (Process Manager), permettant de configurer l'appel de fichiers exĂ©cutables externes avec des gestionnaires pour HAProxy.
Par exemple, un tel gestionnaire externe a Ă©tĂ© mis en Ćuvre sous la forme de l'API Data Plan (/usr/sbin/dataplaneapi), ainsi que divers moteurs de traitement hors charge; - Pour .NET Core, Go, Lua et Python, des liaisons ont Ă©tĂ© ajoutĂ©es pour le dĂ©veloppement d'extensions SPOE (Stream Processing Offload Engine) et SPOP (Stream Processing Offload Protocol). Auparavant, le dĂ©veloppement d'extensions n'Ă©tait pris en charge qu'en C;
- Un gestionnaire externe spoa-mirror ( /usr/sbin/spoa-mirror ) a Ă©tĂ© ajoutĂ© pour le mirroring des requĂȘtes sur un serveur distinct (par exemple, pour copier une partie du trafic de travail pour tester un environnement expĂ©rimental sous une charge rĂ©elle);
- Présenté pour assurer l'intégration avec la plateforme Kubernetes;
- Un support intégré pour l'exportation des statistiques vers un systÚme de surveillance a été ajouté. ;
- Le protocole Peers Protocol, utilisĂ© pour Ă©changer des informations avec d'autres nĆuds HAProxy, a Ă©tĂ© Ă©largi. Cela inclut le support pour Heartbeat et la transmission de donnĂ©es chiffrĂ©es;
- Le paramĂštre «sample» a Ă©tĂ© ajoutĂ© Ă la directive «log», permettant de consigner uniquement une partie des requĂȘtes, par exemple 1 sur 10, pour crĂ©er un Ă©chantillon analytique;
- Un mode de profilage automatique a été ajouté (directive profiling.tasks, qui peut prendre les valeurs auto, on et off). Le profilage automatique s'active si la latence moyenne dépasse 1000 ms. Pour visualiser les données de profilage via l'API Runtime, la commande «show profiling» a été ajoutée ou il est possible de réinitialiser les statistiques dans le journal;
- Un support pour l'accÚs aux serveurs backend utilisant le protocole SOCKS4 a été ajouté;
- Un support de bout en bout pour le mĂ©canisme d'ouverture rapide des connexions TCP (TFO â TCP Fast Open, RFC 7413) a Ă©tĂ© ajoutĂ©, permettant de rĂ©duire le nombre d'Ă©tapes de la mise en place d'une connexion en combinant en une seule requĂȘte les premiĂšre et deuxiĂšme Ă©tapes du classique processus d'Ă©tablissement de connexion en 3 Ă©tapes, et permettant l'envoi de donnĂ©es au dĂ©but de la mise en place de la connexion;
- Nouvelles actions ajoutées :
- «http-request replace-uri» pour remplacer les URL en utilisant des expressions réguliÚres;
- «tcp-request content do-resolve» et «http-request do-resolve» pour résoudre les noms d'hÎte;
- «tcp-request content set-dst» et «tcp-request content set-dst-port» pour substituer l'adresse IP cible et le port.
- Nouveaux modules de conversion ajoutés :
- aes_gcm_dev pour déchiffrer des flux utilisant les algorithmes AES128-GCM, AES192-GCM et AES256-GCM;
- protobuf pour extraire les champs des messages Protocol Buffers;
- ungrpc pour extraire les champs des messages gRPC.
Source : opennet.ru
