izdanje balansirača opterećenja , koji omogućava raspodelu HTTP saobraćaja i proizvoljnih TCP zahteva između grupe servera, uzimajući u obzir mnoge faktore (na primer, proverava dostupnost servera, ocenjuje nivo opterećenja, ima sredstva za suprotstavljanje DDoS napadima) i vrši primarnu filtraciju podataka (na primer, može da analizira HTTP zaglavlja, filtrira prenos neispravnih parametara zahteva, blokira SQL i XSS ubrizgavanje, povezuje agente za obradu sadržaja). HAProxy se takođe može za koordinaciju interakcije komponenata u sistemima zasnovanim na mikroservisnoj arhitekturi. Kod projekta je napisan na jeziku C i pod GPLv2 licencom. Projekat se koristi na mnogim velikim sajtovima, uključujući Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter i Vimeo.
Ključne karakteristike izdanja:
- Predstavljen je novi API , koji omogućava upravljanje postavkama HAProxy u hodu preko REST Web API-ja. U to spada dinamičko dodavanje i uklanjanje backenda i servera, kreiranje ACL-a, promena rutiranja zahteva, menjanje veza obrada na IP;
- Dodana je direktiva nbthread, koja omogućava podešavanje broja niti korišćenih u HAProxy za optimizaciju rada na višekernim CPU-ima. Po defaultu, broj radnih niti se bira u zavisnosti od dostupnih jezgara CPU-a u trenutnoj okolini, dok se u cloud okruženjima po defaultu postavlja jedna nit. Da bi se postavili strogi limiti, dodate su opcije MAX_THREADS i MAX_PROCS, koje ograničavaju gornju granicu na broj niti i procesa;
- Pojednostavljeno je korišćenje direktive bind za povezivanje obrada na mrežne adrese. Prilikom podešavanja više nije obavezno definisanje parametara procesa — po defaultu, veze će se raspodeliti među niti u zavisnosti od broja aktivnih veza.
- Pojednostavljena je konfiguracija logova prilikom pokretanja u izolovanim kontejnerima — log se sada može usmeriti u stdout i stderr, kao i u bilo koji postojeći deskriptor datoteka (na primer, „log fd@1 local0“);
- Privzeto je aktivirana podpora za HTX (Native HTTP Representation), ki omogoča uravnoteženje ob uporabi naprednih funkcij, kot so end-to-end HTTP/2, Layer 7 Retries in gRPC. HTX ne nadomešča glavnih naslovov, temveč spremembo operacije omeji na odstranjevanje in dodajanje novega naslova na konec seznama, kar omogoča manipulacijo z vsemi naprednimi različicami protokola HTTP, ohranja prvotno semantiko naslovov in omogoča dosego boljše zmogljivosti pri pretvorbi HTTP/2 v HTTP/1.1 in obratno;
- Dodana je uradna podpora za način End-to-End HTTP/2 (obdelava vseh stopenj v HTTP/2, vključno z vprašanji o ozadju, ne le interakcijo med proxyjem in stranko);
- Popolna podpora za obojestransko posredovanje protokola gRPC s sposobnostjo razstavljanja gRPC tokov, izločanja posameznih sporočil, beleženja gRPC prometa v dnevniku in filtriranja sporočil z uporabo ACL. gRPC omogoča delovanje mikroservisov v različnih programskih jezikih, ki med seboj komunicirajo prek univerzalnega API. Mrežno komuniciranje v gRPC je izvedeno nad protokolom HTTP/2 in temelji na uporabi Protocol Buffers za serijalizacijo podatkov.
- Dodana je podpora za način 'Layer 7 Retries', ki omogoča pošiljanje ponovnih HTTP zahtevkov v primeru programskih napak, ki niso povezane s težavami pri vzpostavljanju omrežne povezave (na primer, pri odsotnosti odgovora ali praznem odgovoru na POST zahtevek). Za izklop načina je v možnost 'http-request' dodana zastavica 'disable-l7-retry', za natančno nastavitev pa so v razdelkih defaults, listen in backend dodali možnost 'retry-on'. Na voljo so naslednji znaki za ponovno pošiljanje: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, prav tako pa povezava z vrnjenimi kodami stanja (404 itd.);
- Izveden je nov upravljalec procesov (Process Manager), ki omogoča nastavitev klica zunanjih izvršljivih datotek z obdelovalniki za HAProxy.
Na primer, v obliki takega zunanjega obdelovalnika je bil izveden API Data Plan (/usr/sbin/dataplaneapi), kot tudi različni motorji za obdelavo odtoka; - Za .NET Core, Go, Lua in Python so dodane vezave za razvoj razširitev SPOE (Stream Processing Offload Engine) in SPOP (Stream Processing Offload Protocol). Zgodaj je bila podprta le razvojna razširitev v C-ju;
- Dodana je vanjska obrada spoa-mirror (/usr/sbin/spoa-mirror) za mirroring zahtjeva na poseban poslužitelj (na primjer, za kopiranje dijela radnog prometa za testiranje eksperimentalnog okruženja pod stvarnim opterećenjem);
- Представлен za omogućavanje integracije s Kubernetes platformom;
- Dodana je ugrađena podrška za izvoz statistike u sustav nadzora ;
- Protokol Peers Protocol, korišten za razmjenu informacija s drugim čvorovima HAProxy, je proširen. Uključena je podrška za Heartbeat i šifriranu transmisiju podataka;
- Direktivi „log“ dodan je parametar „sample“, koji omogućava zapisivanje samo dijela zahtjeva u log, na primjer 1 od 10, za formiranje analitičkog uzorka;
- Dodan je način automatskog profiliranja (direktiva profiling.tasks, koja može imati vrijednosti auto, on i off). Automatsko profiliranje se uključuje kada prosječno kašnjenje prekorači granicu od 1000 ms. Za pregled podataka profila u Runtime API dodana je naredba „show profiling“ ili postoji mogućnost brisanja statistike u log;
- Dodana je podrška za pristup backend poslužiteljima korištenjem SOCKS4 protokola;
- Dodana je end-to-end podrška za mehanizam bržeg otvaranja TCP veza (TFO — TCP Fast Open, RFC 7413), koji smanjuje broj koraka uspostavljanja veze kombinirajući prvi i drugi korak klasičnog 3-korak procesa usklađivanja veze i omogućava slanje podataka u ranoj fazi uspostavljanja veze;
- Dodane su nove akcije:
- „http-request replace-uri“ za zamjenu URL-a koristeći regularni izraz;
- „tcp-request content do-resolve“ i „http-request do-resolve“ za razrješavanje imena domaćina;
- „tcp-request content set-dst“ i „tcp-request content set-dst-port“ za postavljanje ciljnog IP adrese i porta.
- Dodani su novi moduli za konverziju:
- aes_gcm_dev za dešifriranje tokova korištenjem algoritama AES128-GCM, AES192-GCM i AES256-GCM;
- protobuf za ekstrakciju polja iz Protocol Buffers poruka;
- ungrpc za ekstrakciju polja iz gRPC poruka.
Izvor: opennet.ru
