Veröffentlichung des HTTP/TCP-Balancers HAProxy 2.0

Veröffentlicht Load-Balancer-Release HA-Proxy 2.0, mit dem Sie HTTP-Verkehr und beliebige TCP-Anfragen unter Berücksichtigung vieler Faktoren auf eine Gruppe von Servern verteilen können (z. B. prüft es die Verfügbarkeit von Servern, bewertet den Auslastungsgrad, verfügt über DDoS-Gegenmaßnahmen) und führt eine primäre Datenfilterung durch ( Sie können beispielsweise HTTP-Header analysieren, die Übertragung falscher Abfrageparameter filtern, SQL- und XSS-Ersetzung blockieren und Inhaltsverarbeitungsagenten verbinden. HAProxy kann das auch anwenden das Zusammenspiel von Komponenten in Systemen auf Basis der Microservices-Architektur zu koordinieren. Der Projektcode ist in C geschrieben und geliefert lizenziert unter GPLv2. Das Projekt wird auf vielen großen Websites verwendet, darunter Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter und Vimeo.

Wichtige Release-Funktionen:

  • Neue API eingeführt Datentarif, mit dem Sie HAProxy-Einstellungen im Handumdrehen über die REST-Web-API verwalten können. Sie können Backends und Server dynamisch hinzufügen und entfernen, ACLs erstellen, das Anforderungsrouting ändern und Handler-Bindungen an IP ändern.
  • Die nbthread-Direktive wurde hinzugefügt, mit der Sie die Anzahl der in HAProxy verwendeten Threads konfigurieren können, um die Leistung auf Multi-Core-CPUs zu optimieren. Standardmäßig wird die Anzahl der Arbeitsthreads abhängig von den in der aktuellen Umgebung verfügbaren CPU-Kernen ausgewählt. In Cloud-Umgebungen ist der Standardwert ein Thread. Um harte Grenzen festzulegen, wurden die Assembly-Optionen MAX_THREADS und MAX_PROCS hinzugefügt, die die Obergrenze für die Anzahl der Threads und Prozesse begrenzen;
  • Die Verwendung der Bind-Direktive zum Binden von Handlern an Netzwerkadressen wurde vereinfacht. Bei der Einrichtung ist es nicht mehr notwendig, Prozessparameter zu definieren – standardmäßig werden Verbindungen abhängig von der Anzahl der aktiven Verbindungen auf Threads verteilt.
  • Das Einrichten von Protokollen bei der Ausführung in isolierten Containern wurde vereinfacht – das Protokoll kann jetzt an stdout und stderr sowie an jeden vorhandenen Dateideskriptor (z. B. „log fd@1 local0“) gesendet werden;
  • Die Unterstützung für HTX (Native HTTP Representation) ist standardmäßig aktiviert und ermöglicht einen Ausgleich bei der Verwendung erweiterter Funktionen wie End-to-End-HTTP/2, Layer-7-Wiederholungen und gRPC. HTX ersetzt keine vorhandenen Header, sondern reduziert den Änderungsvorgang auf das Entfernen und Hinzufügen eines neuen Headers am Ende der Liste, wodurch Sie alle erweiterten Varianten des HTTP-Protokolls manipulieren können, wobei die ursprüngliche Semantik der Header erhalten bleibt und Sie um eine höhere Leistung bei der Übersetzung von HTTP/2 in HTTP/1.1 und umgekehrt zu erzielen;
  • Offizielle Unterstützung für den End-to-End-HTTP/2-Modus hinzugefügt (Verarbeitung aller Phasen in HTTP/2, einschließlich Aufrufen an das Backend und nicht nur der Interaktion zwischen dem Proxy und dem Client);
  • Es wurde vollständige Unterstützung für bidirektionales Proxying des gRPC-Protokolls implementiert, mit der Möglichkeit, gRPC-Streams zu analysieren, einzelne Nachrichten hervorzuheben, den gRPC-Verkehr im Protokoll widerzuspiegeln und Nachrichten mithilfe von ACLs zu filtern. Mit gRPC können Sie die Arbeit von Microservices in verschiedenen Programmiersprachen organisieren, die über eine universelle API miteinander interagieren. Die Netzwerkkommunikation in gRPC wird auf Basis des HTTP/2-Protokolls implementiert und basiert auf der Verwendung von Protokollpuffern zur Datenserialisierung.
  • Unterstützung für den „Layer 7 Retries“-Modus hinzugefügt, der es Ihnen ermöglicht, wiederholte HTTP-Anfragen im Falle von Softwarefehlern zu senden, die nicht mit Problemen beim Aufbau einer Netzwerkverbindung zusammenhängen (z. B. wenn keine Antwort oder eine leere Antwort auf a erfolgt). POST-Anfrage). Um den Modus zu deaktivieren, wurde das Flag „disable-l7-retry“ zur Option „http-request“ hinzugefügt, und die Option „retry-on“ wurde zur Feinabstimmung in den Abschnitten „Defaults“, „Listen“ und „Backend“ hinzugefügt. Für das erneute Senden stehen die folgenden Zeichen zur Verfügung: all-retryable-errors, none, conn-failure, empty-response, junk-response, Response-Timeout, 0rtt-rejected sowie die Bindung an Rückgabestatuscodes (404 usw.). ;
  • Es wurde ein neuer Prozessmanager implementiert, mit dem Sie den Aufruf externer ausführbarer Dateien mit Handlern für HAProxy konfigurieren können.
    Beispielsweise werden die Data Plan API (/usr/sbin/dataplaneapi) sowie verschiedene Offload-Stream-Verarbeitungs-Engines in Form eines solchen externen Handlers implementiert;

  • Für die Entwicklung von SPOE- (Stream Processing Offload Engine) und SPOP- (Stream Processing Offload Protocol) Erweiterungen wurden Bindungen für .NET Core, Go, Lua und Python hinzugefügt. Bisher wurde die Erweiterungsentwicklung nur in C unterstützt;
  • Ein externer spoa-mirror-Handler (/usr/sbin/spoa-mirror) zum Spiegeln von Anforderungen auf einen separaten Server hinzugefügt (z. B. zum Kopieren eines Teils des Produktionsverkehrs zum Testen einer experimentellen Umgebung unter realer Last);
  • Eingereicht von HAProxy Kubernetes Ingress Controller um die Integration mit der Kubernetes-Plattform sicherzustellen;
  • Integrierte Unterstützung für den Export von Statistiken in das Überwachungssystem hinzugefügt Prometheus;
  • Das Peers-Protokoll, das zum Austausch von Informationen mit anderen Knoten verwendet wird, auf denen HAProxy ausgeführt wird, wurde erweitert. Einschließlich zusätzlicher Unterstützung für Heartbeat und verschlüsselte Datenübertragung;
  • Der „log“-Direktive wurde der Parameter „sample“ hinzugefügt, der es Ihnen ermöglicht, nur einen Teil der Anfragen in das Protokoll zu übertragen, zum Beispiel 1 von 10, um eine analytische Stichprobe zu bilden;
  • Automatischer Profilierungsmodus hinzugefügt (profiling.tasks-Direktive, die die Werte auto, on und off annehmen kann). Die automatische Profilerstellung ist aktiviert, wenn die durchschnittliche Latenz 1000 ms überschreitet. Um Profiling-Daten anzuzeigen, wurde der Runtime-API der Befehl „show profiling“ hinzugefügt, oder es ist möglich, Statistiken auf das Protokoll zurückzusetzen;
  • Unterstützung für den Zugriff auf Backend-Server über das SOCKS4-Protokoll hinzugefügt;
  • End-to-End-Unterstützung für den Mechanismus zum schnellen Öffnen von TCP-Verbindungen (TFO – TCP Fast Open, RFC 7413) hinzugefügt, der es Ihnen ermöglicht, die Anzahl der Verbindungsaufbauschritte zu reduzieren, indem Sie den ersten in einer Anfrage und den zweiten Schritt kombinieren der klassische 3-stufige Verbindungsaushandlungsprozess und ermöglicht das Senden von Daten in der Anfangsphase des Verbindungsaufbaus;
  • Neue Aktionen hinzugefügt:
    • „http-request replace-uri“, um die URL durch einen regulären Ausdruck zu ersetzen;
    • „tcp-request content do-resolve“ und „http-request do-resolve“ zum Auflösen des Hostnamens;
    • „tcp-request content set-dst“ und „tcp-request content set-dst-port“, um die Ziel-IP-Adresse und den Ziel-Port zu ersetzen.
  • Neue Konvertierungsmodule hinzugefügt:
    • aes_gcm_dev zum Entschlüsseln 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.

    Source: opennet.ru

Kommentar hinzufügen