Nakon pet godina od formiranja grane 2.0 objavljeno je izdanje load balancera HAProxy 3.0, koji omogućava raspodjelu HTTP prometa i proizvoljnih TCP zahtjeva među grupom poslužitelja, uzimajući u obzir brojne čimbenike (na primjer, provjerava dostupnost servera, ocjenjuje razinu opterećenja, posjeduje sredstva za suzbijanje DDoS napada) i provodeći primarnu filtraciju podataka (na primjer, moguće je razdvojiti HTTP zaglavlja, filtrirati prenos neispravnih parametara zahtjeva, blokirati SQL injekcije i XSS, uključiti agente za obradu sadržaja). HAProxy se također može koristiti za koordinaciju interakcije komponenti u sustavima temeljenim na arhitekturi mikroservisa. Kod projekta napisan je na jeziku C i distribuira se pod GPLv2 licencom. Projekt se koristi na mnogim velikim stranicama, uključujući Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter i Vimeo.
Grana HAProxy 3.0 pripada izdanjima s dugoročnom podrškom (LTS) i bit će podržavana do 2029. godine. Ključne promjene:
- U konfiguraciju je dodana nova sekcija „crt-store“ za postavku pohrane i korištenja TLS certifikata. Za razliku od ranije dostupne postavke crt-list, u crt-store skladište certifikata odvojeno je od njihove upotrebe na frontendu, što omogućuje individualno postavljanje mjesta pohrane svakog od komponenti certifikata (datoteke s certifikatima, ključevima i OCSP podacima).
- Dodana je mogućnost postavljanja ograničenja za zahtjeve korištenjem HTTP/2, koji su dopušteni protokolom, ali mogu uzrokovati probleme. Na primjer, slanje niza okvira CONTINUATION može dovesti do DoS napada Continuation flood.
- Dodana je nova konfiguracijska direktiva „guid“, koja se može koristiti u sekcijama „frontend“, „backend“ i „listen“. Direktiva povezuje jedinstveni identifikator s tim sekcijama, omogućujući očuvanje statistike povezane s sekcijom nakon ponovnog pokretanja (stanje stranice Stats neće biti resetirano). Za očuvanje statistike u datoteku dodana je nova naredba „dump stats-file“, a za čitanje iz datoteke nakon ponovnog pokretanja dodana je nova konfiguracijska direktiva „stats-file“.
- Povećane su mogućnosti u balansiranju Syslog poruka. Dodana je mogućnost postavljanja težinskih koeficijenata za retke u logovima backend-a povezane sa serverima.
- Dodana podrška za formatiranje log linija u JSON i CBOR prikazu.
- Prošireni podaci koji se mogu dobiti koristeći funkcije za ekstrakciju informacija, na primjer, moguće je zatražiti informacije o broju otvorenih HTTP sesija za backend i frontend, veličini reda čekanja za obradu zahtjeva i dopuštenom broju istovremenih sesija.
- Povećana je učinkovitost jednonitnih Lua skripti koje se učitavaju pomoću direktive „lua-load“.
- Značajno je povećana učinkovitost područja pohrane u memoriji koja se kreiraju pomoću direktive stick-table. Na primjer, na sustavu s 80 niti, učinkovitost je porasla 6 puta.
- U konfiguracijama s više web stranica, gdje TLS certifikat se bira na temelju identifikatora hosta koji se šalje putem TLS ekstenzije SNI, dodana je opcija „default-crt“ koja omogućuje postavljanje certifikata prema zadanim postavkama kada se ne može povezati sa postojećim certifikatima za web stranicu.
- Dodane su akcije „set-fc-tos“ i „set-bc-tos“ za umetanje polja DS (Differentiated Services) u IP pakete na strani backend-a ili frontend-a, određujući prioritet prometa.
- Dodane su akcije „set-fc-mark“ i „set-bc-mark“, pomoću kojih se mogu označiti IP paketi na strani backend-a ili frontend-a, na primjer, za kasnije povezivanje s određenom tablicom usmjeravanja.
- Dodana podrška za kreiranje identifikatora u UUIDv7 formatu.
- Implementirana je mogućnost korištenja prefiksa „@virt“ za kreiranje virtualnih ACL i Map datoteka koje se ne pohranjuju na disku. Sadržaj virtualnih ACL i Map datoteka dodaje se i uklanja pomoću Runtime API. Također je dostupan prefiks „@opt“ pri kojem virtualne datoteke primjenjuju samo kada stvarna datoteka nije prisutna na disku.
- Uvedene su promjene koje krše unatradnu kompatibilnost: zabranjeno je slanje više komandi u jednom zahtjevu putem Runtime API-a razdvajanjem linijskim prijelom; zabranjeno je postavljanje ključne riječi „enabled“ za dinamičke poslužitelja; pojačana je provjera nestandardnih URI.
Izvor: opennet.ru
