uitgave van de load balancer , die HTTP-verkeer en willekeurige TCP-verzoeken kan verdelen over een groep servers, rekening houdend met verschillende factoren (bijvoorbeeld controleert de beschikbaarheid van servers, beoordeelt het niveau van belasting, biedt het middelen tegen DDoS-aanvallen) en voert een eerste filtering van gegevens uit (bijvoorbeeld het kan HTTP-headers analyseren, onjuiste parameteroverdracht filteren, SQL-injectie en XSS blokkeren, contentverwerkingsagenten aansluiten). HAProxy kan ook voor het coördineren van de interactie tussen componenten in systemen op basis van microservices-architectuur. De projectcode is geschreven in C en geleverd onder GPLv2. Het project wordt gebruikt op veel grote websites, waaronder Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter en Vimeo.
Belangrijkste kenmerken van de uitgave:
- Een nieuwe API , die het mogelijk maakt om HAProxy-instellingen in realtime te beheren via de REST Web API. Onder andere is het mogelijk om backend-servers dynamisch toe te voegen en te verwijderen, ACL's te maken, de route van verzoeken te wijzigen, en handler-bindings aan IP's te wijzigen;
- De directive nbthread is toegevoegd, die het mogelijk maakt om het aantal threads dat in HAProxy wordt gebruikt te configureren voor optimalisatie op multi-core CPU's. Standaard wordt het aantal werkthreads gebaseerd op het beschikbare aantal CPU-kernen in de huidige omgeving gekozen, terwijl in cloudomgevingen standaard één thread is ingesteld. Voor het instellen van strikte limieten zijn de buildopties MAX_THREADS en MAX_PROCS toegevoegd, die de bovenste grens voor het aantal threads en processen beperken;
- Het gebruik van de bind-directive voor het binden van handlers aan netwerkadressen is vereenvoudigd. Bij de configuratie is het nu niet meer nodig om procesparameters te definiëren - standaard worden verbindingen verdeeld over threads op basis van het aantal actieve verbindingen.
- De configuratie van logs bij het starten in geïsoleerde containers is vereenvoudigd - logs kunnen nu naar stdout en stderr worden geleid, evenals naar elke bestaande bestandsdescriptor (bijvoorbeeld 'log fd@1 local0');
- Standaard ondersteuning voor HTX (Native HTTP Representation) is ingeschakeld, wat balans mogelijk maakt bij het gebruik van geavanceerde functies zoals end-to-end HTTP/2, Layer 7 Retries en gRPC. HTX vervangt de headers niet ter plekke, maar reduceert de wijziging tot het verwijderen en toevoegen van een nieuwe header aan het einde van de lijst, waardoor manipulatie van alle geavanceerde versies van het HTTP-protocol mogelijk is, met behoud van de oorspronkelijke semantiek van de headers en het behalen van hogere prestaties bij de conversie van HTTP/2 naar HTTP/1.1 en vice versa;
- Officiële ondersteuning voor de End-to-End HTTP/2-modus is toegevoegd (verwerking van alle fasen in HTTP/2, inclusief aanvragen aan de backend en niet alleen interactie tussen proxy en klant);
- Volledige ondersteuning voor bidirectionele proxying van het gRPC-protocol is geïmplementeerd, met de mogelijkheid om gRPC-stromen te parseren, afzonderlijke berichten te выделять, gRPC-verkeer in de log vast te leggen en berichten te filteren met behulp van ACL. gRPC maakt het mogelijk om microservices te laten werken in verschillende programmeertalen, die met elkaar communiceren via een universele API. Netwerkinteractie in gRPC is geïmplementeerd bovenop het HTTP/2-protocol en is gebaseerd op het gebruik van Protocol Buffers voor dataverzameling.
- Ondersteuning voor de 'Layer 7 Retries'-modus is toegevoegd, waarmee herhaalde HTTP-aanvragen kunnen worden verzonden in het geval van softwarefouten die niet gerelateerd zijn aan netwerkverbindingproblemen (bijvoorbeeld bij geen antwoord of een leeg antwoord op een POST-aanroep). Om de modus uit te schakelen, is de vlag 'disable-l7-retry' toegevoegd aan de 'http-request'-optie, en voor fijn afstemmen zijn er opties 'retry-on' toegevoegd in de secties defaults, listen en backend. De volgende signalen voor herhaalde verzending zijn beschikbaar: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, en binding aan geretourneerde statuscodes (404 enz.);
- Een nieuwe procesmanager (Process Manager) is geïmplementeerd, waarmee de aanroep van externe uitvoerbare bestanden met handlers voor HAProxy kan worden ingesteld.
Bijvoorbeeld, als een externe handler is het API Data Plan (/usr/sbin/dataplaneapi) geïmplementeerd, evenals verschillende engines voor Offload-verwerking van stromen; - Voor .NET Core, Go, Lua en Python zijn bindings toegevoegd voor de ontwikkeling van extensies voor SPOE (Stream Processing Offload Engine) en SPOP (Stream Processing Offload Protocol). Eerder werd de ontwikkeling van extensies alleen in C ondersteund;
- Een externe handler spoa-mirror (/usr/sbin/spoa-mirror) is toegevoegd voor het spiegelen van verzoeken naar een aparte server (bijvoorbeeld voor het kopiëren van een deel van het werkverkeer voor het testen van een experimentele omgeving onder echte belasting);
- Geïntroduceerd om integratie met het Kubernetes-platform te waarborgen;
- Ingebouwde ondersteuning voor het exporteren van statistieken naar het monitoringsysteem is toegevoegd. ;
- Het Peers Protocol, dat wordt gebruikt voor informatie-uitwisseling met andere knooppunten met HAProxy, is uitgebreid. Inclusief de ondersteuning voor Heartbeat en versleutelde gegevensoverdracht;
- De parameter "sample" is toegevoegd aan de ‘log’-directive, waarmee slechts een deel van de verzoeken, bijvoorbeeld 1 uit 10, naar het log kan worden weggeschreven om een analytische steekproef te vormen;
- Een modus voor automatische profilering is toegevoegd (directive profiling.tasks, die de waarden auto, on en off kan aannemen). Automatische profilering wordt ingeschakeld wanneer de gemiddelde vertraging de 1000 ms overschrijdt. Om profielgegevens te bekijken is de opdracht "show profiling" toegevoegd aan de Runtime API, of er is de mogelijkheid om statistieken naar het log te resetten;
- Ondersteuning voor toegang tot backend-servers met behulp van het SOCKS4-protocol is toegevoegd;
- End-to-end ondersteuning voor een mechanisme voor het snel openen van TCP-verbindingen (TFO — TCP Fast Open, RFC 7413) is toegevoegd, dat het aantal stappen voor het opzetten van een verbinding verkort door de eerste en tweede stap van het klassieke 3-fasen handshake-proces in één verzoek te combineren en het mogelijk maakt om gegevens in de vroege fase van de verbinding te verzenden;
- Nieuwe acties zijn toegevoegd:
- "http-request replace-uri" voor het vervangen van URL's met gebruik van reguliere expressies;
- "tcp-request content do-resolve" en "http-request do-resolve" voor het resolven van de hostnaam;
- "tcp-request content set-dst" en "tcp-request content set-dst-port" voor het invullen van het doel-IP-adres en de poort.
- Nieuwe conversiemodules zijn toegevoegd:
- aes_gcm_dev voor het ontsleutelen van stromen met gebruik van AES128-GCM, AES192-GCM en AES256-GCM-algoritmen;
- protobuf voor het extraheren van velden uit Protocol Buffers-berichten;
- ungrpc voor het extraheren van velden uit gRPC-berichten.
Bron: opennet.ru
