Utgivelse av HTTP/TCP-balanser HAProxy 2.0

publisert utløser lastbalanser HA Proxy 2.0, som lar deg distribuere HTTP-trafikk og vilkårlige TCP-forespørsler mellom en gruppe servere, tar hensyn til mange faktorer (for eksempel sjekker den tilgjengeligheten til servere, vurderer belastningsnivået, har DDoS-mottiltak) og utfører primær datafiltrering ( for eksempel kan du analysere HTTP-hoder, filtrere overføring av feil spørringsparametere, blokkere SQL- og XSS-substitusjon, koble til innholdsbehandlingsagenter). HAProxy kan også søke om å koordinere samspillet mellom komponenter i systemer basert på mikrotjenester-arkitektur. Prosjektkoden er skrevet i C og medfølgende lisensiert under GPLv2. Prosjektet brukes på mange store nettsteder, inkludert Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter og Vimeo.

Viktige utgivelsesfunksjoner:

  • Ny API introdusert Data plan, som lar deg administrere HAProxy-innstillinger på farten via REST Web API. Inkludert kan du dynamisk legge til og fjerne backends og servere, opprette ACLer, endre forespørselsruting, endre behandlerbindinger til IP;
  • Lagt til nbthread-direktivet, som lar deg konfigurere antall tråder som brukes i HAProxy for å optimalisere ytelsen på flerkjerne-CPUer. Som standard velges antall arbeidertråder avhengig av CPU-kjernene som er tilgjengelige i det gjeldende miljøet, og i skymiljøer er standarden én tråd. For å sette harde grenser er monteringsalternativene MAX_THREADS og MAX_PROCS lagt til, og begrenser den øvre grensen for antall tråder og prosesser;
  • Bruken av bindedirektivet for å binde behandlere til nettverksadresser er forenklet. Ved oppsett er det ikke lenger nødvendig å definere prosessparametere - som standard vil tilkoblinger fordeles mellom tråder avhengig av antall aktive tilkoblinger.
  • Oppsett av logger når du kjører i isolerte beholdere har blitt forenklet - loggen kan nå sendes til stdout og stderr, så vel som til enhver eksisterende filbeskrivelse (for eksempel "log fd@1 local0");
  • Støtte for HTX (Native HTTP Representation) er aktivert som standard, noe som gir mulighet for balansering ved bruk av avanserte funksjoner som ende-til-ende HTTP/2, Layer 7 Retries og gRPC. HTX erstatter ikke overskrifter på plass, men reduserer modifikasjonsoperasjonen til å fjerne og legge til en ny overskrift på slutten av listen, noe som lar deg manipulere eventuelle utvidede varianter av HTTP-protokollen, bevare den originale semantikken til overskriftene og lar deg for å oppnå høyere ytelse når du oversetter HTTP/2 til HTTP/1.1 og omvendt;
  • Lagt til offisiell støtte for End-to-End HTTP/2-modus (behandling av alle stadier i HTTP/2, inkludert anrop til backend, og ikke bare interaksjon mellom proxy og klient);
  • Full støtte for toveis proxying av gRPC-protokollen har blitt implementert med muligheten til å analysere gRPC-strømmer, fremheve individuelle meldinger, reflektere gRPC-trafikk i loggen og filtrere meldinger ved hjelp av ACL-er. gRPC lar deg organisere arbeidet med mikrotjenester på forskjellige programmeringsspråk som samhandler med hverandre ved hjelp av en universell API. Nettverkskommunikasjon i gRPC er implementert på toppen av HTTP/2-protokollen og er basert på bruk av Protocol Buffers for dataserialisering.
  • Lagt til støtte for «Layer 7 Retries»-modusen, som lar deg sende gjentatte HTTP-forespørsler i tilfelle programvarefeil som ikke er relatert til problemer med å etablere en nettverkstilkobling (for eksempel hvis det ikke er noe svar eller et tomt svar på en POST-forespørsel). For å deaktivere modusen, er "disable-l7-retry"-flagget lagt til "http-request"-alternativet, og "retry-on"-alternativet er lagt til for finjustering i standard-, lytte- og backend-seksjonene. Følgende tegn er tilgjengelige for å sende på nytt: alle-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, samt binding til returneringsstatuskoder (404, etc.) ;
  • En ny prosessbehandler er implementert, som lar deg konfigurere kallende eksterne kjørbare filer med behandlere for HAProxy.
    For eksempel er Data Plan API (/usr/sbin/dataplaneapi), så vel som ulike Offload-strømbehandlingsmotorer, implementert i form av en slik ekstern behandler;

  • Bindinger er lagt til for .NET Core, Go, Lua og Python for utvikling av SPOE (Stream Processing Offload Engine) og SPOP (Stream Processing Offload Protocol) utvidelser. Tidligere ble utvidelsesutvikling kun støttet i C;
  • Lagt til en ekstern spoa-mirror-behandler (/usr/sbin/spoa-mirror) for å speile forespørsler til en separat server (for eksempel for å kopiere deler av produksjonstrafikken for å teste et eksperimentelt miljø under en reell belastning);
  • Introdusert HAProxy Kubernetes Ingress Controller å sikre integrasjon med Kubernetes-plattformen;
  • Lagt til innebygd støtte for eksport av statistikk til overvåkingssystemet Prometheus;
  • Peers-protokollen, som brukes til å utveksle informasjon med andre noder som kjører HAProxy, har blitt utvidet. Inkludert ekstra støtte for Heartbeat og kryptert dataoverføring;
  • "Sample"-parameteren er lagt til i "log"-direktivet, som lar deg dumpe bare en del av forespørslene inn i loggen, for eksempel 1 av 10, for å danne en analytisk prøve;
  • Lagt til automatisk profileringsmodus (profiling.tasks-direktivet, som kan ta verdiene auto, av og på). Automatisk profilering er aktivert hvis gjennomsnittlig ventetid overstiger 1000 ms. For å se profileringsdata er kommandoen «vis profilering» lagt til Runtime API, eller det er mulig å tilbakestille statistikk til loggen;
  • Lagt til støtte for tilgang til backend-servere ved å bruke SOCKS4-protokollen;
  • Lagt til ende-til-ende-støtte for mekanismen for rask åpning av TCP-tilkoblinger (TFO - TCP Fast Open, RFC 7413), som lar deg redusere antall trinn for tilkoblingsoppsett ved å kombinere den første til én forespørsel og det andre trinnet i den klassiske 3-trinns tilkoblingsforhandlingsprosessen og gjør det mulig å sende data i det innledende stadiet av å etablere en tilkobling;
  • Nye handlinger lagt til:
    • "http-request replace-uri" for å erstatte URL-en med et regulært uttrykk;
    • "tcp-request content do-resolve" og "http-request do-resolve" for å løse vertsnavnet;
    • "tcp-request content set-dst" og "tcp-request content set-dst-port" for å erstatte mål-IP-adressen og porten.
  • Lagt til nye konverteringsmoduler:
    • aes_gcm_dev for dekryptering av strømmer ved hjelp av AES128-GCM, AES192-GCM og AES256-GCM algoritmer;
    • protobuf for å trekke ut felt fra Protocol Buffers-meldinger;
    • ungrpc for å trekke ut felt fra gRPC-meldinger.

    Kilde: opennet.ru

Legg til en kommentar