Nach fĂŒnf Jahren seit der Bildung des Branches 2.0 wurde die Version des Lastenausgleichers HAProxy 3.0 veröffentlicht, die die Verteilung von HTTP-Verkehr und beliebigen TCP-Anfragen zwischen einer Gruppe von Servern ermöglicht, wobei viele Faktoren berĂŒcksichtigt werden (z. B. die VerfĂŒgbarkeit von Servern ĂŒberprĂŒft wird, die Last bewertet wird, es Möglichkeiten zur Abwehr von DDoS-Angriffen gibt) und eine Grundfilterung der Daten durchgefĂŒhrt wird (zum Beispiel können HTTP-Header analysiert, Ăbertragungen fehlerhafter Anforderungsparameter gefiltert, SQL-Injection und XSS blockiert sowie Inhaltsverarbeitungsagenten angeschlossen werden). HAProxy kann auch zur Koordination der Interaktion von Komponenten in Systemen auf Basis der Mikroservices-Architektur verwendet werden. Der Projektcode ist in C geschrieben und wird unter der GPLv2-Lizenz bereitgestellt. Das Projekt wird auf vielen groĂen Websites eingesetzt, darunter Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter und Vimeo.
Der Branch HAProxy 3.0 wurde als Version mit langfristiger UnterstĂŒtzung (LTS) eingestuft und wird bis 2029 unterstĂŒtzt. Wichtige Ănderungen:
- In die Konfiguration wurde eine neue Sektion «crt-store» hinzugefĂŒgt, um die Speicherung und Verwendung von TLS-Zertifikaten zu konfigurieren. Im Gegensatz zur zuvor verfĂŒgbaren Einstellung «crt-list» ist im «crt-store» das Zertifikatsspeicher von seiner Verwendung im Frontend getrennt, was es ermöglicht, den Speicherort jedes einzelnen Komponenten des Zertifikats (Dateien mit Zertifikaten, SchlĂŒsseln und OCSP-Daten) individuell festzulegen.
- Die Möglichkeit wurde hinzugefĂŒgt, EinschrĂ€nkungen fĂŒr Anfragen mit HTTP/2 festzulegen, die vom Protokoll erlaubt sind, aber Probleme verursachen können. Zum Beispiel kann das Senden eines CONTINUATION-Frame-Stroms zu einer DoS-Attacke durch Continuation Flood fĂŒhren.
- Eine neue Konfigurationsdirektive «guid» wurde hinzugefĂŒgt, die in den Sektionen «frontend», «backend» und «listen» verwendet werden kann. Die Direktive bindet eine eindeutige Identifikation an diese Sektionen, sodass die zugehörigen Statistiken nach einem Neustart beibehalten werden (der Status der Seite Stats wird nicht zurĂŒckgesetzt). Um die Statistik in eine Datei zu speichern, wurde der Befehl «dump stats-file» hinzugefĂŒgt, und zum Lesen aus der Datei nach einem Neustart wurde eine neue Konfigurationsdirektive «stats-file» hinzugefĂŒgt.
- Die Möglichkeiten zur Lastenverteilung von Syslog-Nachrichten wurden erweitert. Es wurde die Möglichkeit hinzugefĂŒgt, Gewichtungen fĂŒr mit Servern verbundene Zeilen in den Backend-Protokollen zuzuweisen.
- UnterstĂŒtzung fĂŒr die Formatierung von Log-Zeilen im JSON- und CBOR-Format hinzugefĂŒgt.
- Die Daten, die durch Informationsabruffunktionen abgerufen werden können, wurden erweitert. Zum Beispiel können Informationen ĂŒber die Anzahl der offenen HTTP-Sitzungen fĂŒr Backend und Frontend, die GröĂe der Warteschlange fĂŒr die Bearbeitung von Anfragen und die zulĂ€ssige Anzahl gleichzeitiger Sitzungen angefordert werden.
- Die Leistung von einstrĂ€ngigen Lua-Skripten, die mit der Direktive âlua-loadâ geladen werden, wurde erhöht.
- Die Leistung von im Speicher erstellten Speicherbereichen, die mit der Direktive stick-table erstellt werden, wurde erheblich verbessert. Zum Beispiel hat sich die Leistung auf einem System mit 80 Threads um das Sechsfache erhöht.
- In Konfigurationen mit mehreren Websites, bei denen TLS-Zertifikat Aufgrund der ĂŒber TLS ĂŒbermittelten SNI-Host-ID ausgewĂ€hlt wird, wurde das Argument âdefault-crtâ hinzugefĂŒgt, das es ermöglicht, ein Standardzertifikat festzulegen, das ausgewĂ€hlt wird, wenn keine Ăbereinstimmung mit den vorhandenen Zertifikaten fĂŒr die Website gefunden wird.
- Die Aktionen âset-fc-tosâ und âset-bc-tosâ wurden hinzugefĂŒgt, um im Backend oder Frontend in IP-Pakete das DS-Feld (Differentiated Services) einzufĂŒgen, das die PrioritĂ€t des Verkehrs bestimmt.
- Die Aktionen âset-fc-markâ und âset-bc-markâ wurden hinzugefĂŒgt, mit denen IP-Pakete im Backend oder Frontend markiert werden können, beispielsweise fĂŒr eine spĂ€tere Bindung an eine bestimmte Routingtabelle.
- UnterstĂŒtzung fĂŒr die Erstellung von Identifikatoren im UUIDv7-Format hinzugefĂŒgt.
- Die Möglichkeit, das PrĂ€fix â@virtâ zur Erstellung von virtuellen Dateien fĂŒr ACL und Map zu verwenden, die nicht auf der Festplatte gespeichert werden, wurde implementiert. Der Inhalt der virtuellen ACL- und Map-Dateien wird ĂŒber die Runtime-API hinzugefĂŒgt und gelöscht. Das PrĂ€fix â@optâ ist ebenfalls verfĂŒgbar, bei dem virtuelle Dateien nur angewendet werden, wenn die tatsĂ€chliche Datei nicht auf der Festplatte vorhanden ist.
- Ănderungen, die die RĂŒckwĂ€rtskompatibilitĂ€t verletzen, wurden vorgenommen: Es ist untersagt, mehrere Befehle im Runtime API in einer Anfrage mit Zeilenumbruch zu trennen; die Verwendung des SchlĂŒsselworts âenabledâ fĂŒr dynamische Server; die ĂberprĂŒfung von nicht standardmĂ€Ăigen URIs wurde verschĂ€rft.
Quelle: opennet.ru
