Sortie de l'équilibreur de charge HTTP/TCP HAProxy 2.0

PubliĂ© lancement du rĂ©partiteur de charge avec le proxy des requĂȘtes via TCP sur IPv4 et IPv6 ou sans proxy des connexions (pour l'envoi de requĂȘtes de heartbeat de vĂ©rification confirmant le fonctionnement normal)., 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 s'appliquer 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 est fourni 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 Data Plan, 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Ă© ContrĂŽleur d'Ingress HAProxy pour Kubernetes 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Ă©. Prometheus;
  • 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

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster