publikimi i balancuesit të ngarkesës , i cili mundëson shpërndarjen e trafikut HTTP dhe kërkesave arbitrare TCP ndërmjet një grupi serverësh, duke marrë parasysh shumë faktorë (për shembull, kontrollon disponueshmërinë e serverëve, vlerëson nivelin e ngarkesës, ka mjete mbrojtjeje kundër DDoS) dhe kryen filtrimin fillestar të të dhënave (për shembull, mund të analizojë HTTP headers, të filtrojë dërgimin e parametrave të pasaktë të kërkesës, të bllokojë injektimin SQL dhe XSS, si dhe të lidhë agjentë për përpunimin e përmbajtjes). HAProxy gjithashtu mund të për të koordinuar ndërveprimin e komponentëve në sisteme të bazuara në arkitekturë mikrosherbimesh. Kodi i projektit është shkruar në gjuhën C dhe licencohet sipas GPLv2. Projekti përdoret në shumë sajte të mëdha, përfshirë Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter dhe Vimeo.
Veçoritë kryesore të këtij publikimi:
- ĂshtĂ« prezantuar API i ri , i cili mundĂ«son menaxhimin nĂ« kohĂ« reale tĂ« konfigurimit tĂ« HAProxy pĂ«rmes REST Web API. NdĂ«r tĂ« tjera, mund tĂ« shtohen dhe hiqen dinamikisht backend-et dhe serverĂ«t, tĂ« krijohen ACL, tĂ« ndryshohet rutimi i kĂ«rkesave dhe tĂ« ndryshohen lidhjet e handler-Ă«ve me IP;
- ĂshtĂ« shtuar direktiva nbthread, e cila mundĂ«son pĂ«rcaktimin e numrit tĂ« fijeve tĂ« pĂ«rdorura nĂ« HAProxy pĂ«r tĂ« optimizuar punĂ«n nĂ« CPU me shumĂ« bĂ«rthama. Si parazgjedhje, numri i fijeve tĂ« punĂ«s zgjidhet sipas numrit tĂ« bĂ«rthamave CPU tĂ« disponueshme nĂ« mjedisin aktual, ndĂ«rsa nĂ« mjediset cloud si parazgjedhje caktohet njĂ« fije. PĂ«r vendosjen e kufijve tĂ« ngurtĂ« janĂ« shtuar opsionet e kompilimit MAX_THREADS dhe MAX_PROCS, qĂ« kufizojnĂ« numrin maksimal tĂ« fijeve dhe proceseve;
- ĂshtĂ« thjeshtuar pĂ«rdorimi i direktivĂ«s bind pĂ«r lidhjen e handler-Ă«ve me adresat e rrjetit. GjatĂ« konfigurimit tani nuk Ă«shtĂ« e nevojshme tĂ« pĂ«rcaktohen parametrat e procesit â si parazgjedhje, lidhjet do tĂ« shpĂ«rndahen ndĂ«rmjet fijeve nĂ« varĂ«si tĂ« numrit tĂ« lidhjeve aktive.
- ĂshtĂ« thjeshtuar konfigurimi i log-eve gjatĂ« nisjes nĂ« konteinerĂ« tĂ« izoluar â tani log-u mund tĂ« dĂ«rgohet te stdout dhe stderr, si edhe te çdo file descriptor ekzistues (pĂ«r shembull, «log fd@1 local0»);
- Mbështetja për HTX (Native HTTP Representation) është aktivizuar si parazgjedhje, duke mundësuar balancim të ngarkesës gjatë përdorimit të funksioneve të avancuara si end-to-end HTTP/2, Layer 7 Retries dhe gRPC. HTX nuk i zëvendëson header-at në vend, por e redukton operacionin e ndryshimit në heqjen e tyre dhe shtimin e një header-i të ri në fund të listës. Kjo lejon manipulimin e çdo varianti të avancuar të protokollit HTTP, duke ruajtur semantikën origjinale të header-ave dhe duke ofruar performancë më të lartë gjatë konvertimit nga HTTP/2 në HTTP/1.1 dhe anasjelltas;
- ĂshtĂ« shtuar mbĂ«shtetja zyrtare pĂ«r modalitetin End-to-End HTTP/2 (pĂ«rpunimi i tĂ« gjitha fazave nĂ« HTTP/2, pĂ«rfshirĂ« kĂ«rkesat drejt backend-it, dhe jo vetĂ«m ndĂ«rveprimi i proxy-sĂ« me klientin);
- ĂshtĂ« zbatuar mbĂ«shtetje e plotĂ« pĂ«r proxy dykahĂ«sh tĂ« protokollit gRPC, me mundĂ«si analizimi tĂ« rrjedhave gRPC, veçimi tĂ« mesazheve individuale, pasqyrimi tĂ« trafikut gRPC nĂ« log dhe filtrimi tĂ« mesazheve me ndihmĂ«n e ACL. gRPC mundĂ«son organizimin e punĂ«s sĂ« mikrosherbimeve nĂ« gjuhĂ« tĂ« ndryshme programimi, tĂ« cilat komunikojnĂ« mes tyre pĂ«rmes njĂ« API universale. NdĂ«rveprimi nĂ« rrjet nĂ« gRPC realizohet mbi protokollin HTTP/2 dhe bazohet nĂ« pĂ«rdorimin e Protocol Buffers pĂ«r serializimin e tĂ« dhĂ«nave.
- ĂshtĂ« shtuar mbĂ«shtetja pĂ«r modalitetin «Layer 7 Retries», i cili mundĂ«son dĂ«rgimin pĂ«rsĂ«ri tĂ« kĂ«rkesave HTTP nĂ« rast tĂ« dĂ«shtimeve tĂ« aplikacionit qĂ« nuk lidhen me problemet e krijimit tĂ« lidhjes nĂ« rrjet (pĂ«r shembull, kur mungon pĂ«rgjigjja ose kur njĂ« kĂ«rkesĂ« POST merr pĂ«rgjigje bosh). PĂ«r çaktivizimin e kĂ«tij modaliteti, te opsioni «http-request» Ă«shtĂ« shtuar flamuri «disable-l7-retry», ndĂ«rsa pĂ«r konfigurim mĂ« tĂ« detajuar, nĂ« seksionet defaults, listen dhe backend Ă«shtĂ« shfaqur opsioni «retry-on». JanĂ« tĂ« disponueshme kĂ«to kushte pĂ«r ridĂ«rgim: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, si dhe lidhja me kodet e statusit tĂ« kthyera (404 etj.);
- ĂshtĂ« zbatuar njĂ« menaxher i ri procesesh (Process Manager), i cili mundĂ«son konfigurimin e thirrjes sĂ« skedarĂ«ve tĂ« jashtĂ«m tĂ« ekzekutueshĂ«m me handler-a pĂ«r HAProxy.
Për shembull, si një handler i tillë i jashtëm është zbatuar API Data Plan (/usr/sbin/dataplaneapi), si edhe motorë të ndryshëm për përpunimin Offload të rrjedhave; - Për .NET Core, Go, Lua dhe Python janë shtuar binding-e për zhvillimin e zgjerimeve SPOE (Stream Processing Offload Engine) dhe SPOP (Stream Processing Offload Protocol). Më parë mbështetej vetëm zhvillimi i zgjerimeve në C;
- ĂshtĂ« shtuar pĂ«rpunuesi i jashtĂ«m spoa-mirror (/usr/sbin/spoa-mirror) pĂ«r pasqyrimin e kĂ«rkesave nĂ« njĂ« server tĂ« veçantĂ« (pĂ«r shembull, pĂ«r kopjimin e njĂ« pjese tĂ« trafikut tĂ« prodhimit pĂ«r testimin e njĂ« mjedisi eksperimental nĂ«n ngarkesĂ« reale);
- Presented për të siguruar integrimin me platformën Kubernetes;
- ĂshtĂ« shtuar mbĂ«shtetja e integruar pĂ«r eksportimin e statistikave nĂ« sistemin e monitorimit ;
- ĂshtĂ« zgjeruar Peers Protocol, i pĂ«rdorur pĂ«r shkĂ«mbimin e informacionit me nyje tĂ« tjera me HAProxy. NdĂ«r tĂ« tjera, Ă«shtĂ« shtuar mbĂ«shtetja pĂ«r Heartbeat dhe transmetimin e enkriptuar tĂ« tĂ« dhĂ«nave;
- Në direktivën «log» është shtuar parametri «sample», i cili mundëson regjistrimin në log vetëm të një pjese të kërkesave, për shembull 1 nga 10, për të formuar një kampion analitik;
- ĂshtĂ« shtuar modaliteti i profilizimit automatik (direktiva profiling.tasks, e cila mund tĂ« marrĂ« vlerat auto, on dhe off). Profilizimi automatik aktivizohet nĂ«se vlera mesatare e vonesĂ«s tejkalon pragun prej 1000 ms. PĂ«r tĂ« parĂ« tĂ« dhĂ«nat e profilizimit, nĂ« Runtime API Ă«shtĂ« shtuar komanda «show profiling», si dhe ekziston mundĂ«sia e dĂ«rgimit tĂ« statistikave nĂ« log;
- ĂshtĂ« shtuar mbĂ«shtetja pĂ«r qasjen te serverĂ«t backend duke pĂ«rdorur protokollin SOCKS4;
- ĂshtĂ« shtuar mbĂ«shtetja fundore (end-to-end, gjatĂ« gjithĂ« rrugĂ«s sĂ« pĂ«rpunimit tĂ« kĂ«rkesĂ«s, duke pĂ«rfshirĂ« backend-in) pĂ«r mekanizmin e hapjes sĂ« shpejtĂ« tĂ« lidhjeve TCP (TFO â TCP Fast Open, RFC 7413), i cili mundĂ«son uljen e numrit tĂ« hapave pĂ«r vendosjen e lidhjes duke kombinuar nĂ« njĂ« kĂ«rkesĂ« hapin e parĂ« dhe tĂ« dytĂ« tĂ« procesit klasik 3-fazor tĂ« negocimit tĂ« lidhjes dhe lejon dĂ«rgimin e tĂ« dhĂ«nave qĂ« nĂ« fazĂ«n fillestare tĂ« vendosjes sĂ« lidhjes;
- Janë shtuar veprime të reja:
- «http-request replace-uri» për zëvendësimin e URL duke përdorur shprehje të rregullta;
- «tcp-request content do-resolve» dhe «http-request do-resolve» për rezolvimin e emrit të hostit;
- «tcp-request content set-dst» dhe «tcp-request content set-dst-port» për vendosjen e IP-adresës së synuar dhe portës.
- Janë shtuar module të reja konvertimi:
- aes_gcm_dev për deshifrimin e rrjedhave duke përdorur algoritmet AES128-GCM, AES192-GCM dhe AES256-GCM;
- protobuf për nxjerrjen e fushave nga mesazhet Protocol Buffers;
- ungrpc për nxjerrjen e fushave nga mesazhet gRPC.
Burimi: opennet.ru
