Na vijf jaar sinds de introductie van versie 2.0 is de release van de load balancer HAProxy 3.0 gepubliceerd, die HTTP-verkeer en willekeurige TCP-verzoeken tussen een groep servers kan verdelen, rekening houdend met verschillende factoren (bijvoorbeeld controleert de beschikbaarheid van servers, evalueert de belasting, beschikt over middelen tegen DDoS-aanvallen) en basisgegevensfiltering uitvoert (bijvoorbeeld HTTP-headers kunnen worden geparsed, onjuiste parameteroverdracht kan worden gefilterd, SQL-injectie en XSS kunnen worden geblokkeerd, contentverwerkingsagents kunnen worden aangesloten). HAProxy kan ook worden gebruikt om de interactie van componenten in systemen op basis van microservices-architectuur te coƶrdineren. De broncode van het project is geschreven in C en wordt geleverd onder de GPLv2-licentie. Het project wordt gebruikt op veel grote websites, waaronder Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter en Vimeo.
De HAProxy 3.0-tak is geclassificeerd als een release met langdurige ondersteuning (LTS) en zal worden ondersteund tot 2029. Belangrijke wijzigingen:
- Een nieuwe sectie "crt-store" is aan de configuratie toegevoegd voor het instellen van de opslag en het gebruik van TLS-certificaten. In tegenstelling tot de eerdere beschikbare configuratie "crt-list" is de certificaatopslag in crt-store gescheiden van het gebruik ervan aan de frontend, waardoor het mogelijk is om de opslaglocatie van elk certificaatcomponent (bestanden met certificaten, sleutels en OCSP-gegevens) afzonderlijk in te stellen.
- Er is een mogelijkheid toegevoegd om beperkingen in te stellen voor aanvragen die gebruikmaken van HTTP/2, die door het protocol zijn toegestaan maar problemen kunnen veroorzaken. Bijvoorbeeld, het verzenden van een CONTINUATION-frame kan leiden tot een DoS-aanval genaamd Continuation flood.
- Een nieuwe configuratiedirectief "guid" is toegevoegd, die kan worden gebruikt in de secties "frontend", "backend" en "listen". Deze directief koppelt een unieke identificatie aan deze secties, zodat gerelateerde statistieken na herstart behouden blijven (de staat van de pagina Stats wordt niet gereset). Voor het opslaan van statistieken in een bestand is een nieuwe opdracht "dump stats-file" toegevoegd, en voor het lezen van een bestand na herstart is een nieuwe configuratiedirectief "stats-file" toegevoegd.
- De opties voor het balanceren van Syslog-berichten zijn uitgebreid. Er is een mogelijkheid toegevoegd om gewichten toe te kennen aan de servergerelateerde regels in de backend-logs.
- Ondersteuning voor logregelopmaak in JSON- en CBOR-weergaven toegevoegd.
- De gegevens die kunnen worden verkregen met informatie-extractiefuncties zijn uitgebreid; bijvoorbeeld, het is mogelijk om informatie aan te vragen over het aantal open HTTP-sessies voor de backend en frontend, de grootte van de wachtrij voor het verwerken van verzoeken en het toegestane aantal gelijktijdige sessies.
- De prestaties van single-threaded Lua-scripts, geladen met de 'lua-load'-directief, zijn verbeterd.
- De prestaties van in-memory opslaggebieden, gemaakt met de 'stick-table'-directief, zijn aanzienlijk verbeterd. Bijvoorbeeld, op een systeem met 80 threads is de prestaties met zes keer toegenomen.
- In configuraties met meerdere sites, waarin TLS-certificaat de keuze wordt gemaakt op basis van de host-ID, die wordt doorgegeven via de TLS-uitbreiding SNI, is het argument 'default-crt' toegevoegd, waarmee een standaardcertificaat kan worden ingesteld dat wordt gekozen als er geen overeenkomend certificaat voor de site beschikbaar is.
- De acties 'set-fc-tos' en 'set-bc-tos' zijn toegevoegd voor het toevoegen van DS (Differentiated Services) velden aan IP-pakketten aan de backend- of frontend-kant, wat de verkeersprioriteit bepaalt.
- De acties 'set-fc-mark' en 'set-bc-mark' zijn toegevoegd, waarmee IP-pakketten aan de backend- of frontend-kant kunnen worden gemarkeerd, bijvoorbeeld voor latere koppeling aan een bepaalde routeringstabel.
- Ondersteuning voor het maken van identificatoren in UUIDv7-formaat toegevoegd.
- De mogelijkheid om het prefix '@virt' te gebruiken voor het maken van virtuele ACL- en Map-bestanden, die niet op schijf worden opgeslagen, is geĆÆmplementeerd. De inhoud van virtuele ACL- en Map-bestanden wordt toegevoegd en verwijderd via de Runtime API. Ook is het prefix '@opt' beschikbaar, waarbij virtuele bestanden alleen worden toegepast als het daadwerkelijke bestand niet op schijf staat.
- Wijzigingen zijn aangebracht die de achterwaartse compatibiliteit verstoren: het verzenden van meerdere commando's naar de Runtime API in ƩƩn verzoek, gescheiden door een regelovergang, is verboden; het instellen van het sleutelwoord 'enabled' voor dynamische servers; de controle van niet-standaard URI's is aangescherpt.
Bron: opennet.ru
