lansarea echilibratorului de sarcină , care permite distribuirea traficului HTTP și a solicitărilor TCP arbitrare între un grup de servere, având în vedere numeroși factori (de exemplu, verifică disponibilitatea serverelor, evaluează nivelul de încărcare, are instrumente împotriva DDoS) și efectuează o filtrare primară a datelor (de exemplu, pot fi analizate anteturile HTTP, filtrate transferurile de parametrii incorecți, blocate injecțiile SQL și XSS, conectată agenți de procesare a conținutului). HAProxy poate pentru a coordona interacțiunea componentelor în sistemele bazate pe arhitectura microserviciilor. Codul proiectului este scris în limbajul C și sub licența GPLv2. Proiectul este folosit pe multe site-uri mari, inclusiv Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter și Vimeo.
Caracteristici cheie ale versiunii:
- A fost introdus un nou API , care permite gestionarea în timp real a setărilor HAProxy prin REST Web API. De asemenea, este posibil să adăugați și să eliminați dinamic backend-uri și servere, să creați ACL-uri, să modificați rutarea cererilor, să schimbați legăturile handler-elor la IP;
- A fost adăugată directiva nbthread, care permite configurarea numărului de threaduri utilizate în HAProxy pentru a optimiza funcționarea pe CPU-uri multicore. În mod implicit, numărul de threaduri de lucru este ales în funcție de nucleele CPU disponibile în mediu, iar în medii cloud, în mod implicit, este setat un singur thread. Pentru a stabili limite stricte, au fost adăugate opțiunile de compilare MAX_THREADS și MAX_PROCS, care limitează plafonul maxim pentru numărul de threaduri și procese;
- Utilizarea directivei bind pentru legarea handler-elor la adresele de rețea a fost simplificată. La configurare, acum nu este necesară definirea parametrilor procesului — în mod implicit, conexiunile vor fi distribuite pe threaduri în funcție de numărul de conexiuni active.
- Configurarea jurnalelor la pornirea în containere izolate a fost simplificată — jurnalul poate fi acum direcționat către stdout și stderr, precum și către orice descriptor de fișier existent (de exemplu, „log fd@1 local0”);
- Suportul HTX (Reprezentarea HTTP nativă) este activat implicit, permițând echilibrarea încărcării în utilizarea unor funcționalități avansate, cum ar fi HTTP/2 end-to-end, retry-uri Layer 7 și gRPC. HTX nu înlocuiește antetele în loc, ci reduce operația de modificare la eliminarea și adăugarea unui nou antet la sfârșitul listei, permițând manipularea oricăror variante avansate ale protocolului HTTP, păstrând semantica originală a antetelor și permițând o performanță mai ridicată în traducerea HTTP/2 în HTTP/1.1 și invers;
- A fost adăugat suport oficial pentru modul End-to-End HTTP/2 (gestionarea tuturor etapelor în HTTP/2, inclusiv apelurile către backend, nu doar interacțiunea proxy-ului cu clientul);
- Suportul complet pentru proxy-ingul bidirecțional al protocolului gRPC a fost implementat, având capacitatea de a analiza fluxurile gRPC, evidențiind mesaje individuale, reflectând traficul gRPC în jurnal și filtrând mesajele prin intermediul ACL. gRPC permite organizarea lucrului microservicelor în diverse limbaje de programare care interacționează între ele prin intermediul unei API universale. Interacțiunea de rețea în gRPC este implementată deasupra protocolului HTTP/2 și se bazează pe utilizarea Protocol Buffers pentru serializarea datelor.
- A fost adăugat suport pentru modul „Layer 7 Retries”, permițând retrimiterea cererilor HTTP în caz de erori software care nu sunt legate de problemele de stabilire a conexiunii de rețea (de exemplu, în caz de lipsă de răspuns sau răspuns gol la cererea POST). Pentru a dezactiva modul, în opțiunea „http-request” a fost adăugat un flag „disable-l7-retry”, iar pentru o ajustare fină în secțiunile defaults, listen și backend a apărut opțiunea „retry-on”. Următoarele semne sunt disponibile pentru retrimitere: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, precum și legătura la codurile de stare returnate (404 etc.);
- Un nou manager de procese (Process Manager) a fost implementat, permițând configurarea apelului fișierelor executabile externe cu gestionare pentru HAProxy.
De exemplu, un astfel de gestionator extern a fost realizat în cadrul API Data Plan (usr/sbin/dataplaneapi), precum și diverse motoare de procesare Offload; - Pentru .NET Core, Go, Lua și Python au fost adăugate binding-uri pentru dezvoltarea extensiilor SPOE (Stream Processing Offload Engine) și SPOP (Stream Processing Offload Protocol). Precedent, dezvoltarea extensiilor era suportată doar în C;
- A fost adăugat un handler extern spoa-mirror (\/usr\/sbin\/spoa-mirror) pentru oglindirea cererilor pe un server separat (de exemplu, pentru copierea unei părți din traficul de lucru pentru a testa un mediu experimental sub o sarcină reală);
- Prezentat pentru a asigura integrarea cu platforma Kubernetes;
- A fost adăugată suport încorporat pentru exportul statisticilor în sistemul de monitorizare ;
- Protocolul Peers Protocol a fost extins, fiind utilizat pentru schimbul de informații cu alte noduri HAProxy. Printre altele, a fost adăugată suport pentru Heartbeat și transmiterea datelor criptate;
- Parametrul „sample” a fost adăugat la directiva „log”, permițând logarea doar a unei părți din cereri, de exemplu 1 din 10, pentru a forma un eșantion analitic;
- A fost adăugat un mod de profilare automată (directiva profiling.tasks, care poate lua valorile auto, on și off). Profilarea automată se activează atunci când valoarea medie a întârzierii depășește limita de 1000 ms. Pentru a vizualiza datele de profilare în API-ul Runtime, a fost adăugată comanda „show profiling” sau există posibilitatea de a reseta statisticile în log;
- A fost adăugat suport pentru apelarea serverelor backend folosind protocolul SOCKS4;
- A fost adădat suport end-to-end (pe parcursul procesării cererii, acoperind backend-ul) pentru mecanismul de deschidere rapidă a conexiunilor TCP (TFO - TCP Fast Open, RFC 7413), care permite reducerea numărului de pași necesari pentru stabilirea conexiunii, prin combinarea primelor două etape ale procesului clasic în 3 pași de stabilire a conexiunii, permițând trimiterea datelor la începutul stabilirii conexiunii;
- Au fost adăugate noi acțiuni:
- „http-request replace-uri” pentru înlocuirea URL-ului folosind expresii regulate;
- „tcp-request content do-resolve” și „http-request do-resolve” pentru rezolvarea numelui gazdelor;
- „tcp-request content set-dst” și „tcp-request content set-dst-port” pentru înlocuirea adresei IP și a portului destinate.
- Au fost adăugate noi module de conversie:
- aes_gcm_dev pentru decriptarea fluxurilor folosind algoritmii AES128-GCM, AES192-GCM și AES256-GCM;
- protobuf pentru extragerea câmpurilor din mesajele Protocol Buffers;
- ungrpc pentru extragerea câmpurilor din mesajele gRPC.
Sursa: opennet.ro
