Sortie de l'équilibreur HTTP/TCP HAProxy 2.0

Publié version de l'équilibreur de charge Proxy haute disponibilité 2.0, qui permet 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, il vérifie la disponibilité des serveurs, évalue le niveau de charge, dispose de contre-mesures DDoS) et effectue un filtrage primaire des données ( par exemple, vous pouvez analyser les en-têtes HTTP, filtrer la transmission des paramètres de requête incorrects, bloquer la substitution SQL et XSS, connecter des agents de traitement de contenu). HAProxy peut également appliquer pour coordonner l'interaction des composants dans des systèmes basés sur une architecture de microservices. Le code du projet est écrit en C et fourni sous licence GPLv2. Le projet est utilisé sur de nombreux grands sites, notamment Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter et Vimeo.

Principales fonctionnalités de la version :

  • Nouvelle API introduite Plan de données, qui vous permet de gérer les paramètres HAProxy à la volée via l'API Web REST. Vous pouvez notamment ajouter et supprimer dynamiquement des backends et des serveurs, créer des ACL, modifier le routage des demandes, modifier les liaisons du gestionnaire en IP ;
  • Ajout de la directive nbthread, qui vous permet de configurer le nombre de threads utilisés dans HAProxy pour optimiser les performances sur les processeurs multicœurs. Par défaut, le nombre de threads de travail est sélectionné en fonction des cœurs de processeur disponibles dans l'environnement actuel, et dans les environnements cloud, la valeur par défaut est un thread. Pour définir des limites strictes, les options d'assemblage MAX_THREADS et MAX_PROCS ont été ajoutées, limitant la limite supérieure du nombre de threads et de processus ;
  • L'utilisation de la directive bind pour lier les gestionnaires aux adresses réseau a été simplifiée. 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 entre les threads en fonction du nombre de connexions actives.
  • La configuration des journaux lors de l'exécution dans des conteneurs isolés a été simplifiée - le journal peut désormais être envoyé vers stdout et stderr, ainsi que vers n'importe quel descripteur de fichier existant (par exemple, « log fd@1 local0 ») ;
  • La prise en charge de HTX (Native HTTP Representation) est activée par défaut, ce qui permet un équilibrage lors de l'utilisation de fonctionnalités avancées telles que HTTP/2 de bout en bout, les tentatives de couche 7 et gRPC. HTX ne remplace pas les en-têtes en 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 vous permet de manipuler toutes les variantes étendues du protocole HTTP, en préservant la sémantique originale des en-têtes et en vous permettant pour obtenir des performances plus élevées lors de la traduction de HTTP/2 en HTTP/1.1 et vice versa ;
  • Ajout du support officiel du mode HTTP/2 de bout en bout (traitement de toutes les étapes dans HTTP/2, y compris les appels au backend, et pas seulement l'interaction entre le proxy et le client) ;
  • La prise en charge complète du proxy bidirectionnel du protocole gRPC a été implémentée avec la possibilité d'analyser les flux gRPC, de mettre en évidence les messages individuels, de refléter le trafic gRPC dans le journal et de filtrer les messages à l'aide des ACL. gRPC vous permet d'organiser le travail des microservices dans différents langages de programmation qui interagissent les uns avec les autres à l'aide d'une API universelle. La communication réseau dans gRPC est implémentée au-dessus du protocole HTTP/2 et est basée sur l'utilisation de tampons de protocole pour la sérialisation des données.
  • Ajout de la prise en charge du mode « Layer 7 Retries », qui permet d'envoyer des requêtes HTTP répétées en cas de pannes logicielles non liées à des problèmes d'établissement d'une connexion réseau (par exemple, s'il n'y a pas de réponse ou une réponse vide à un requête POST). Pour désactiver le mode, l'indicateur « disable-l7-retry » a été ajouté à l'option « http-request », et l'option « retry-on » a été ajoutée pour un réglage fin dans les sections par défaut, d'écoute et backend. Les signes suivants sont disponibles pour le renvoi : toutes les erreurs réessayables, aucune, échec de connexion, réponse vide, réponse indésirable, délai d'attente de réponse, 0rtt-rejeté, ainsi que la liaison pour renvoyer les codes d'état (404, etc.) ;
  • Un nouveau gestionnaire de processus a été implémenté, qui vous permet de configurer l'appel de fichiers exécutables externes avec des gestionnaires pour HAProxy.
    Par exemple, l'API Data Plan (/usr/sbin/dataplaneapi), ainsi que divers moteurs de traitement de flux Offload, sont implémentés sous la forme d'un tel gestionnaire externe ;

  • Des liaisons ont été ajoutées pour .NET Core, Go, Lua et Python pour développer les 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 ;
  • Ajout d'un gestionnaire spoa-mirror externe (/usr/sbin/spoa-mirror) pour mettre en miroir les requêtes sur un serveur séparé (par exemple, pour copier une partie du trafic de production pour tester un environnement expérimental sous une charge réelle) ;
  • Introduit Contrôleur d'entrée HAProxy Kubernetes assurer l'intégration avec la plateforme Kubernetes ;
  • Ajout d'un support intégré pour l'exportation de statistiques vers le système de surveillance Prométhée;
  • Le protocole Peers, utilisé pour échanger des informations avec d'autres nœuds exécutant HAProxy, a été étendu. Y compris la prise en charge supplémentaire de Heartbeat et de la transmission de données cryptées ;
  • Le paramètre « sample » a été ajouté à la directive « log », qui permet de ne vider qu'une partie des requêtes dans le log, par exemple 1 sur 10, pour constituer un échantillon analytique ;
  • Ajout du mode de profilage automatique (directive profiling.tasks, qui peut prendre les valeurs automatiquement, activées et désactivées). Le profilage automatique est activé si la latence moyenne dépasse 1000 XNUMX ms. Pour afficher les données de profilage, la commande « show profiling » a été ajoutée à l'API Runtime ou il est possible de réinitialiser les statistiques dans le journal ;
  • Ajout de la prise en charge de l'accès aux serveurs backend à l'aide du protocole SOCKS4 ;
  • Ajout de la prise en charge de bout en bout du mécanisme d'ouverture rapide des connexions TCP (TFO - TCP Fast Open, RFC 7413), qui permet de réduire le nombre d'étapes de configuration de la connexion en combinant la première en une seule requête et la deuxième étape de le processus classique de négociation de connexion en 3 étapes et permet d'envoyer des données dès la phase initiale d'établissement d'une connexion ;
  • Nouvelles actions ajoutées :
    • "http-request replace-uri" pour remplacer l'URL à l'aide d'une expression régulière ;
    • « tcp-request content do-resolve » et « http-request do-resolve » pour résoudre le nom d'hôte ;
    • « tcp-request content set-dst » et « tcp-request content set-dst-port » pour remplacer l'adresse IP et le port cibles.
  • Ajout de nouveaux modules de conversion :
    • aes_gcm_dev pour décrypter les flux à l'aide des 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

Ajouter un commentaire