La cinci ani după formarea ramurii 2.0, a fost publicat versiunea echilibratorului de încărcare HAProxy 3.0, care permite distribuirea traficului HTTP și a cererilor TCP arbitrare între un grup de servere, ținând cont de numeroși factori (de exemplu, verifică disponibilitatea serverelor, evaluează nivelul de încărcare, dispune de măsuri împotriva DDoS) și realizează filtrarea inițială a datelor (de exemplu, poate analiza antetele HTTP, filtra transmiterea parametrilor de cerere incorecți, bloca substituția SQL și XSS, conecta agenți de procesare a conținutului). HAProxy poate fi, de asemenea, utilizat pentru a coordona interacțiunea componentelor în sistemele bazate pe arhitectura microserviciilor. Codul proiectului este scris în limbajul C și este oferit sub licența GPLv2. Proiectul este utilizat pe multe site-uri mari, inclusiv Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter și Vimeo.
Ramura HAProxy 3.0 este clasificată ca fiind o versiune cu suport pe termen lung (LTS) și va fi întreținută până în 2029. Schimbările cheie:
- Configurația a fost extinsă cu o nouă secțiune «crt-store» pentru configurarea stocării și utilizării certificatelor TLS. Spre deosebire de configurația anterioară crt-list, în crt-store, depozitul certificatelor este separat de utilizarea acestora în frontend, ceea ce permite specificarea individuală a locației de stocare pentru fiecare componentă a certificatului (fișiere cu certificate, chei și date OCSP).
- A fost adăugată capacitatea de a stabili restricții pentru cererile utilizând HTTP/2, care sunt acceptate de protocol, dar pot cauza probleme. De exemplu, trimiterea unui flux de cadre CONTINUATION poate conduce la atacuri DoS Continuation flood.
- A fost adăugată o nouă directivă de configurare «guid», care poate fi utilizată în secțiunile «frontend», «backend» și «listen». Directiva leagă un identificator unic de aceste secțiuni, permițând păstrarea statisticilor asociate secțiunii după repornire (starea paginii Stats nu va fi resetată). Pentru a salva statistica într-un fișier a fost adăugată o nouă comandă «dump stats-file», iar pentru a citi din fișier după repornire a fost adăugată o nouă directivă de configurare «stats-file».
- Funcționalitatea de echilibrare a mesajelor Syslog a fost extinsă. A fost adăugată posibilitatea de a atribui coeficienți de greutate pentru liniile din logurile backend-urilor legate de servere.
- A fost adăugat suport pentru formatarea înregistrărilor de jurnal în format JSON și CBOR.
- S-au extins datele care pot fi obținute folosind funcțiile de extragere a informațiilor, de exemplu, se pot solicita informații despre numărul de sesiuni HTTP deschise pentru backend și frontend, dimensiunea cozii de așteptare pentru procesarea cererilor și numărul permis de sesiuni simultane.
- A fost îmbunătățită performanța scripturilor Lua pe un singur fir de execuție, încărcate prin directiva „lua-load”.
- Performanța zonelor de stocare în memorie create prin directiva stick-table a crescut semnificativ. De exemplu, pe un sistem cu 80 de fire de execuție, performanța a crescut de 6 ori.
- În configurațiile cu mai multe site-uri, în care certificatul TLS este selectat pe baza identificatorului gazdelor transmis prin extensia SNI TLS, a fost adăugat argumentul „default-crt” care permite specificarea unui certificat implicit, folosit în cazul în care nu se reușește asocierea cu certificatele existente pentru site.
- Au fost adăugate acțiunile „set-fc-tos” și „set-bc-tos” pentru a insera pe partea backend-ului sau frontend-ului în pachetele IP câmpul DS (Differentiated Services), care determină prioritatea traficului.
- Au fost adăugate acțiunile „set-fc-mark” și „set-bc-mark”, prin care se pot marca pachetele IP pe partea backend-ului sau frontend-ului, de exemplu, pentru o ulterioară asociere cu o anumită tabelă de rutare.
- A fost adăugat suport pentru crearea de identificatori în format UUIDv7.
- A fost implementată posibilitatea de a folosi prefixul „@virt” pentru a crea fișiere ACL și Map virtuale, care nu sunt salvate pe disc. Conținutul fișierelor virtuale ACL și Map este adăugat și eliminat prin intermediul Runtime API. Este, de asemenea, disponibil prefixul „@opt” în care fișierele virtuale sunt aplicate doar în absența unui fișier real pe disc.
- Au fost efectuate modificări care afectează compatibilitatea inversă: este interzisă trimiterea mai multor comenzi în API-ul Runtime într-o singură cerere, separate prin simbolul de sfârșit de linie; este interzisă setarea cuvântului cheie „enabled” pentru dinamic. servere; s-a întărit verificarea URI-urilor nestandard.
Sursa: opennet.ro
