Die Veröffentlichung des HTTP/TCP-Loadbalancers HAProxy 2.0

Veröffentlicht Veröffentlichung des Lastenausgleichs HAProxy 2.0, der HTTP-Verkehr und beliebige TCP-Anfragen zwischen einer Gruppe von Servern verteilt, dabei eine Vielzahl von Faktoren berücksichtigt (zum Beispiel die Verfügbarkeit der Server überprüft, die Last bewertet, DDoS-Schutzmaßnahmen implementiert) und eine grundlegende Datenfilterung durchführt (zum Beispiel können HTTP-Header analysiert, ungültige Anforderungsparameter gefiltert, SQL-Injection und XSS blockiert und Content-Processing-Agenten angeschlossen werden). HAProxy kann auch umgesetzt zur Koordination der Interaktion von Komponenten in auf Mikroservice-Architekturen basierenden Systemen verwendet werden. Der Projektcode ist in C geschrieben und wird geliefert unter der GPLv2-Lizenz. Das Projekt wird auf vielen großen Websites genutzt, darunter Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter und Vimeo.

Hauptmerkmale der Veröffentlichung:

  • Eine neue API wurde vorgestellt Data Plan, die es ermöglicht, die Einstellungen von HAProxy über REST Web API in Echtzeit zu verwalten. Darunter kann man Backend-Server und -Instanzen dynamisch hinzufügen und entfernen, ACLs erstellen, die Anfragerouting ändern und die Bindungen von Handlern an IPs ändern;
  • Die neue nbthread-Direktive ermöglicht es, die Anzahl der in HAProxy verwendeten Threads zur Optimierung der Leistung auf Mehrkern-CPUs zu konfigurieren. Standardmäßig wird die Anzahl der Arbeits-Threads basierend auf den im aktuellen Umfeld verfügbaren CPU-Kernen ausgewählt. In Cloud-Umgebungen ist standardmäßig ein Thread eingestellt. Um feste Grenzen festzulegen, wurden die Build-Optionen MAX_THREADS und MAX_PROCS hinzugefügt, die die obere Grenze für die Anzahl von Threads und Prozessen beschränken.
  • Die Verwendung der bind-Direktive zur Bindung von Handlern an Netzwerkadressen wurde vereinfacht. Bei der Konfiguration müssen keine Prozessparameter mehr angegeben werden – standardmäßig werden die Verbindungen basierend auf der Anzahl der aktiven Verbindungen auf Threads verteilt.
  • Die Konfiguration der Protokolle beim Start in isolierten Containern wurde optimiert – das Protokoll kann jetzt an stdout und stderr sowie an jeden bestehenden Dateideskriptor (z.B. „log fd@1 local0“) geleitet werden.
  • Standardmäßig ist die Unterstützung für HTX (Native HTTP Representation) aktiviert. Dies ermöglicht Lastverteilung mit erweiterten Funktionen wie End-to-End HTTP/2, Layer 7 Retries und gRPC. HTX ersetzt keine Header direkt, sondern reduziert die Änderung auf das Entfernen und Hinzufügen eines neuen Headers am Ende der Liste. So können alle erweiterten Variationen des HTTP-Protokolls manipuliert werden, während die ursprüngliche Semantik der Header beibehalten wird. Dies führt zu einer verbesserten Leistung bei der Übersetzung von HTTP/2 in HTTP/1.1 und umgekehrt.
  • Offizielle Unterstützung für den End-to-End HTTP/2-Modus hinzugefügt (Verarbeitung aller Phasen in HTTP/2, einschließlich Backend-Anfragen, nicht nur die Interaktionen zwischen Proxy und Client).
  • Vollständige Unterstützung für bidirektionales Proxying des gRPC-Protokolls wurde implementiert, einschließlich der Möglichkeit, gRPC-Streams zu analysieren, einzelne Nachrichten zu extrahieren, den gRPC-Verkehr zu protokollieren und Nachrichten mithilfe von ACL zu filtern. gRPC ermöglicht die Zusammenarbeit von Mikrodiensten in verschiedenen Programmiersprachen über eine universelle API. Die Netzwerkkommunikation in gRPC erfolgt über das HTTP/2-Protokoll und basiert auf der Verwendung von Protocol Buffers zur Datenserialisierung.
  • Der Modus "Layer 7 Retries" wurde hinzugefügt, der es ermöglicht, HTTP-Anfragen bei Programmfehlern, die nicht mit Verbindungsproblemen zusammenhängen (z.B. bei fehlenden oder leeren Antworten auf POST-Anfragen), erneut zu senden. Zur Deaktivierung des Modus wurde der Schalter "disable-l7-retry" zu der Option "http-request" hinzugefügt, während zur Feinabstimmung in den Abschnitten defaults, listen und backend die Option "retry-on" verfügbar ist. Folgende Kriterien für das erneute Senden sind verfügbar: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected sowie eine Bindung an die zurückgegebenen Statuscodes (404 usw.).
  • Ein neuer Prozessmanager (Process Manager) wurde implementiert, der die Ausführung externer ausführbarer Dateien mit Handlern für HAProxy ermöglicht.
    Zum Beispiel wurde ein externer Handler in Form des API Data Plan (/usr/sbin/dataplaneapi) sowie verschiedener Offload-Streamverarbeitungs-Engines realisiert;
  • Für .NET Core, Go, Lua und Python wurden Bindings zur Entwicklung von Erweiterungen für SPOE (Stream Processing Offload Engine) und SPOP (Stream Processing Offload Protocol) hinzugefügt. Zuvor war die Entwicklung von Erweiterungen nur in C möglich;
  • Ein externer Handler spoa-mirror (/usr/sbin/spoa-mirror) wurde hinzugefügt, um Anfragen an einen separaten Server zu spiegeln (z. B. um einen Teil des Arbeitsverkehrs für Tests in einer experimentellen Umgebung bei realer Last zu kopieren);
  • Präsentiert HAProxy Kubernetes Ingress Controller zur Gewährleistung der Integration mit der Kubernetes-Plattform;
  • Es wurde eine integrierte Unterstützung für den Export von Statistiken in ein Überwachungssystem hinzugefügt. Prometheus;
  • Das Peers Protocol, das für den Austausch von Informationen mit anderen Knoten in HAProxy verwendet wird, wurde erweitert. Dies enthält Unterstützung für Heartbeat und verschlüsselte Datenübertragung;
  • In die Direktive „log“ wurde der Parameter „sample“ eingefügt, der es ermöglicht, nur einen Teil der Anfragen, beispielsweise 1 von 10, ins Log zu schreiben, um eine analytische Stichprobe zu erstellen;
  • Ein automatischer Profilierungsmodus wurde hinzugefügt (Direktive profiling.tasks, die die Werte auto, on und off annehmen kann). Die automatische Profilierung wird aktiviert, wenn die durchschnittliche Verzögerung 1000 ms überschreitet. Zur Anzeige der Profilierungsdaten wurde im Runtime API der Befehl „show profiling“ hinzugefügt oder es besteht die Möglichkeit, die Statistiken ins Log zurückzusetzen;
  • Die Unterstützung für Anfragen an Backend-Server mit dem SOCKS4-Protokoll wurde hinzugefügt;
  • Es wurde die End-to-End-Unterstützung des TCP-Fast-Open-Mechanismus (TFO — TCP Fast Open, RFC 7413) hinzugefügt, die die Anzahl der Schritte zur Einrichtung einer Verbindung reduziert, indem die ersten beiden Phasen des klassischen 3-Schritt-Aushandlungsprozesses in einer Anfrage kombiniert werden, und ermöglicht die Übertragung von Daten bereits in der Anfangsphase der Verbindungsherstellung;
  • Neue Aktionen hinzugefügt:
    • „http-request replace-uri“ zum Ersetzen von URLs unter Verwendung von regulären Ausdrücken;
    • «tcp-request content do-resolve» und «http-request do-resolve» zum Auflösen von Hostnamen;
    • «tcp-request content set-dst» und «tcp-request content set-dst-port» zum Setzen der Ziel-IP-Adresse und des Ports.
  • Neue Konvertierungsmodule hinzugefügt:
    • aes_gcm_dev für die Entschlüsselung von Streams mit den Algorithmen AES128-GCM, AES192-GCM und AES256-GCM;
    • protobuf zum Extrahieren von Feldern aus Protocol Buffers-Nachrichten;
    • ungrpc zum Extrahieren von Feldern aus gRPC-Nachrichten.

    Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster