HAProxy 2.0 HTTP/TCP balancer-udgivelse

offentliggjort load balancer frigivelse HA Proxy 2.0, som giver dig mulighed for at distribuere HTTP-trafik og vilkårlige TCP-anmodninger mellem en gruppe af servere, under hensyntagen til mange faktorer (f.eks. kontrollerer servernes tilgængelighed, evaluerer belastningsniveauet, har DDoS-modforanstaltninger) og udfører primær datafiltrering (f.eks. , du kan parse HTTP-headere, bortfiltrere forkerte forespørgselsparametre for transmission, blokere SQL- og XSS-substitution, forbinde indholdsbehandlingsagenter). HAProxy kan også ansøge at koordinere samspillet mellem komponenter i systemer baseret på mikroservices arkitektur. Projektkoden er skrevet i C-sprog og leveres licenseret under GPLv2. Projektet bruges af mange store websteder, herunder Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter og Vimeo.

Nøgletræk ved udgivelsen:

  • Ny API introduceret Dataplan, som giver dig mulighed for at administrere HAProxy-indstillinger på farten via REST Web API. Du kan blandt andet dynamisk tilføje og fjerne backends og servere, oprette ACL'er, ændre anmodningsruting, ændre handlerbindinger til IP;
  • Tilføjet nbthread-direktiv for at justere antallet af tråde, der bruges i HAProxy for at optimere ydeevnen på multi-core CPU'er. Som standard vælges antallet af arbejdstråde afhængigt af de tilgængelige CPU-kerner i det aktuelle miljø, og i skymiljøer er én tråd indstillet som standard. For at sætte hårde grænser er monteringsmulighederne MAX_THREADS og MAX_PROCS blevet tilføjet, som begrænser den øvre grænse for antallet af tråde og processer;
  • Forenklet brug af bind-direktivet til at binde handlere til netværksadresser. Ved konfiguration er det ikke længere nødvendigt at definere procesparametre - som standard vil forbindelser blive fordelt mellem streams afhængigt af antallet af aktive forbindelser.
  • Forenklet opsætning af logfiler ved kørsel i isolerede containere - loggen kan nu dirigeres til stdout og stderr, såvel som til enhver eksisterende filbeskrivelse (f.eks. "log fd@1 local0");
  • HTX (Native HTTP Representation)-understøttelse er aktiveret som standard for at give balance ved brug af avancerede funktioner såsom end-to-end HTTP/2, Layer 7 Retries og gRPC. HTX erstatter ikke headere på plads, men reducerer ændringsoperationen til at fjerne og tilføje en ny header til slutningen af ​​listen, hvilket giver dig mulighed for at manipulere eventuelle udvidede versioner af HTTP-protokollen, mens du bibeholder den originale semantik af headerne og giver dig mulighed for at opnå højere ydeevne ved oversættelse af HTTP/2 til HTTP/1.1 og omvendt;
  • Tilføjet officiel support til End-to-End HTTP/2-tilstanden (håndtering af alle stadier i HTTP/2, inklusive opkald til backend, og ikke kun interaktionen mellem proxyen og klienten);
  • Fuld understøttelse af gRPC bidirektionel proxying er blevet implementeret med mulighed for at parse gRPC-strømme, udtrække individuelle meddelelser, afspejle gRPC-trafik i loggen og filtrere meddelelser ved hjælp af ACL'er. gRPC giver dig mulighed for at organisere arbejdet med mikrotjenester på forskellige programmeringssprog, der interagerer med hinanden ved hjælp af en universel API. Netværkskommunikation i gRPC er implementeret oven på HTTP/2-protokollen og er baseret på brugen af ​​protokolbuffere til dataserialisering.
  • Tilføjet understøttelse af tilstanden "Layer 7 Retries", som giver dig mulighed for at sende gentagne HTTP-anmodninger i tilfælde af softwarefejl, der ikke er relateret til problemer med at etablere en netværksforbindelse (f.eks. hvis der ikke er noget svar eller et tomt svar på POST'en anmodning). For at deaktivere tilstanden er flaget "disable-l7-retry" blevet tilføjet til "http-request"-indstillingen, og "genry-on"-indstillingen er dukket op i standard-, lytte- og backend-sektionerne til finjustering. Følgende genforsøgsflag er tilgængelige: all-genryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected og binding til returnerede statuskoder (404 osv.);
  • En ny Process Manager er blevet implementeret, der giver dig mulighed for at konfigurere kald af eksterne eksekverbare filer med handlere til HAProxy.
    For eksempel, i form af en sådan ekstern handler, er Data Plan API (/usr/sbin/dataplaneapi) implementeret, såvel som forskellige offload stream processing engines;

  • Bindinger er blevet tilføjet til .NET Core, Go, Lua og Python til udvikling af SPOE (Stream Processing Offload Engine) og SPOP (Stream Processing Offload Protocol) udvidelser. Tidligere blev kun C-udvidelsesudvikling understøttet;
  • Tilføjet en ekstern spoa-mirror-handler (/usr/sbin/spoa-mirror) til spejling af anmodninger til en separat server (for eksempel for at kopiere en del af arbejdstrafikken for at teste et eksperimentelt miljø på en reel belastning);
  • Introduceret HAProxy Kubernetes Ingress Controller at levere integration med Kubernetes-platformen;
  • Tilføjet indbygget support til eksport af statistik til overvågningssystemet Prometheus;
  • Udvidede Peers-protokollen, der bruges til at udveksle information med andre noder med HAProxy. Inklusive ekstra understøttelse af Heartbeat og krypteret dataoverførsel;
  • "Sample"-parameteren er blevet tilføjet til "log"-direktivet, som tillader kun en del af anmodningerne at blive dumpet i loggen, for eksempel 1 ud af 10, for at danne en analytisk prøve;
  • Tilføjet automatisk profileringstilstand (profiling.tasks-direktivet, som kan slå værdierne auto, til og fra). Automatisk profilering er aktiveret, hvis den gennemsnitlige forsinkelsesværdi overstiger 1000 ms. For at se profileringsdata er kommandoen "vis profilering" blevet tilføjet til Runtime API, eller det er muligt at nulstille statistik til loggen;
  • Tilføjet understøttelse af adgang til backend-servere ved hjælp af SOCKS4-protokollen;
  • Tilføjet terminal (end-to-end, på dens anmodningsbehandlingssti, der dækker backend) understøttelse af TCP Fast Open (TFO - TCP Fast Open, RFC 7413), som giver dig mulighed for at reducere antallet af forbindelsesopsætningstrin ved at kombinere først én i én anmodning og det andet trin i den klassiske 3-trins forbindelsesforhandlingsproces og gør det muligt at sende data i den indledende fase af forbindelsesopsætningen;
  • Tilføjet nye handlinger:
    • "http-request replace-uri" for at erstatte URL'en ved hjælp af et regulært udtryk;
    • "tcp-request content do-resolve" og "http-request do-resolve" til løsning af værtsnavne;
    • "tcp-request content set-dst" og "tcp-request content set-dst-port" for at erstatte mål-IP-adressen og -porten.
  • Tilføjet nye konverteringsmoduler:
    • aes_gcm_dev til dekryptering af strømme ved hjælp af AES128-GCM, AES192-GCM og AES256-GCM algoritmerne;
    • protobuf til at udtrække felter fra Protocol Buffers-meddelelser;
    • ungrpc for at udtrække felter fra gRPC-meddelelser.

    Kilde: opennet.ru

Tilføj en kommentar