Release av HTTP/TCP-balanserare HAProxy 2.0

publiceras frigöring av lastbalanserare HA Proxy 2.0, som låter dig distribuera HTTP-trafik och godtyckliga TCP-förfrågningar mellan en grupp servrar, med hänsyn till många faktorer (till exempel kontrollerar den tillgängligheten av servrar, bedömer belastningsnivån, har DDoS-motåtgärder) och utför primär datafiltrering ( till exempel kan du analysera HTTP-rubriker, filtrera överföring av felaktiga frågeparametrar, blockera SQL- och XSS-substitution, ansluta innehållsbehandlingsagenter). HAProxy kan också tillämpa att koordinera samspelet mellan komponenter i system baserade på mikrotjänstarkitektur. Projektkoden är skriven i C och levereras licensierad under GPLv2. Projektet används på många stora sajter, inklusive Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter och Vimeo.

Viktiga releasefunktioner:

  • Nytt API introducerat Dataplan, som låter dig hantera HAProxy-inställningar i farten via REST Web API. Inklusive, kan du dynamiskt lägga till och ta bort backends och servrar, skapa ACL:er, ändra förfrågningsdirigering, ändra hanterarbindningar till IP;
  • Lade till nbthread-direktivet, som låter dig konfigurera antalet trådar som används i HAProxy för att optimera prestanda på flerkärniga processorer. Som standard väljs antalet arbetartrådar beroende på de CPU-kärnor som är tillgängliga i den aktuella miljön, och i molnmiljöer är standarden en tråd. För att sätta hårda gränser har monteringsalternativen MAX_THREADS och MAX_PROCS lagts till, vilket begränsar den övre gränsen för antalet trådar och processer;
  • Användningen av bindningsdirektivet för att binda hanterare till nätverksadresser har förenklats. Vid inställning är det inte längre nödvändigt att definiera processparametrar - som standard kommer anslutningar att fördelas mellan trådar beroende på antalet aktiva anslutningar.
  • Att ställa in loggar vid körning i isolerade behållare har förenklats - loggen kan nu skickas till stdout och stderr, såväl som till alla befintliga filbeskrivningar (till exempel "log fd@1 local0");
  • Stöd för HTX (Native HTTP Representation) är aktiverat som standard, vilket möjliggör balansering när du använder avancerade funktioner som end-to-end HTTP/2, Layer 7 Retries och gRPC. HTX ersätter inte rubriker på plats, men reducerar modifieringsoperationen till att ta bort och lägga till en ny rubrik i slutet av listan, vilket gör att du kan manipulera eventuella utökade varianter av HTTP-protokollet, bevara den ursprungliga semantiken för rubrikerna och låta dig manipulera alla utökade varianter av HTTP-protokollet. för att uppnå högre prestanda vid översättning av HTTP/2 till HTTP/1.1 och vice versa;
  • Lade till officiellt stöd för End-to-End HTTP/2-läge (bearbetning av alla steg i HTTP/2, inklusive anrop till backend, och inte bara interaktion mellan proxyn och klienten);
  • Fullständigt stöd för dubbelriktad proxy av gRPC-protokollet har implementerats med möjligheten att analysera gRPC-strömmar, markera enskilda meddelanden, reflektera gRPC-trafik i loggen och filtrera meddelanden med hjälp av ACL:er. gRPC låter dig organisera arbetet med mikrotjänster på olika programmeringsspråk som interagerar med varandra med hjälp av ett universellt API. Nätverkskommunikation i gRPC implementeras ovanpå HTTP/2-protokollet och baseras på användningen av Protocol Buffers för dataserialisering.
  • Lagt till stöd för läget "Layer 7 Retries", som låter dig skicka upprepade HTTP-förfrågningar i händelse av programvarufel som inte är relaterade till problem med att upprätta en nätverksanslutning (till exempel om det inte finns något svar eller ett tomt svar på en POST-begäran). För att inaktivera läget har "disable-l7-retry"-flaggan lagts till i alternativet "http-request", och alternativet "retry-on" har lagts till för finjustering av standard-, lyssna- och backend-sektionerna. Följande tecken är tillgängliga för återsändning: alla-omförsökbara-fel, inga, anslutningsfel, tomt-svar, skräpsvar, tidsgräns för svar, 0rtt-avvisad, samt bindning för att returnera statuskoder (404, etc.) ;
  • En ny processhanterare har implementerats, som låter dig konfigurera anropande externa körbara filer med hanterare för HAProxy.
    Till exempel är Data Plan API (/usr/sbin/dataplaneapi), såväl som olika Offload-strömbehandlingsmotorer, implementerade i form av en sådan extern hanterare;

  • Bindningar har lagts till för .NET Core, Go, Lua och Python för utveckling av SPOE (Stream Processing Offload Engine) och SPOP (Stream Processing Offload Protocol) tillägg. Tidigare stöddes förlängningsutveckling endast i C;
  • Lade till en extern spoa-mirror-hanterare (/usr/sbin/spoa-mirror) för att spegla förfrågningar till en separat server (till exempel för att kopiera en del av produktionstrafiken för att testa en experimentmiljö under en verklig belastning);
  • Introducerad HAProxy Kubernetes Ingress Controller att säkerställa integration med Kubernetes-plattformen;
  • Lade till inbyggt stöd för export av statistik till övervakningssystemet Prometheus;
  • Peers-protokollet, som används för att utbyta information med andra noder som kör HAProxy, har utökats. Inklusive extra stöd för Heartbeat och krypterad dataöverföring;
  • Parametern "sample" har lagts till i "log"-direktivet, vilket gör att du bara kan dumpa en del av förfrågningarna i loggen, till exempel 1 av 10, för att bilda ett analytiskt prov;
  • Lade till automatiskt profileringsläge (profiling.tasks-direktivet, som kan ta värdena auto, på och av). Automatisk profilering är aktiverad om den genomsnittliga latensen överstiger 1000 ms. För att se profileringsdata har kommandot "show profiling" lagts till i Runtime API eller så är det möjligt att återställa statistik till loggen;
  • Tillagt stöd för åtkomst av backend-servrar med SOCKS4-protokollet;
  • Tillagt end-to-end-stöd för mekanismen för att snabbt öppna TCP-anslutningar (TFO - TCP Fast Open, RFC 7413), vilket gör att du kan minska antalet steg för anslutningsinstallation genom att kombinera den första i en begäran och det andra steget av den klassiska 3-stegs anslutningsförhandlingsprocessen och gör det möjligt att skicka data i det inledande skedet av att upprätta en anslutning;
  • Nya åtgärder tillagda:
    • "http-request replace-uri" för att ersätta URL:en med ett reguljärt uttryck;
    • "tcp-request content do-resolve" och "http-request do-resolve" för att lösa värdnamnet;
    • "tcp-request content set-dst" och "tcp-request content set-dst-port" för att ersätta mål-IP-adressen och porten.
  • Lade till nya konverteringsmoduler:
    • aes_gcm_dev för att dekryptera strömmar med AES128-GCM, AES192-GCM och AES256-GCM algoritmer;
    • protobuf för att extrahera fält från Protocol Buffers-meddelanden;
    • ungrpc för att extrahera fält från gRPC-meddelanden.

    Källa: opennet.ru

Lägg en kommentar