Lëshimi i balancuesit HTTP/TCP HAProxy 2.0

botuar lirimi i balancuesit të ngarkesës Proxy HA 2.0, i cili ju lejon të shpërndani trafikun HTTP dhe kërkesat arbitrare TCP midis 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 kundërmasa DDoS) dhe kryen filtrimin parësor të të dhënave ( për shembull, ju mund të analizoni titujt HTTP, të filtroni parametrat e pyetjeve të gabuara të transmetimit, të bllokoni zëvendësimin SQL dhe XSS, të lidhni agjentët e përpunimit të përmbajtjes). HAProxy gjithashtu mund aplikoni për të koordinuar ndërveprimin e komponentëve në sisteme të bazuara në arkitekturën e mikroshërbimeve. Kodi i projektit është i shkruar në C dhe furnizuar licencuar sipas GPLv2. Projekti përdoret në shumë site të mëdha, duke përfshirë Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter dhe Vimeo.

Karakteristikat kryesore të lëshimit:

  • U prezantua API e re Plani i të Dhënave, i cili ju lejon të menaxhoni cilësimet e HAProxy në fluturim nëpërmjet REST Web API. Përfshirë, ju mund të shtoni dhe hiqni në mënyrë dinamike mbështetëset dhe serverët, të krijoni ACL, të ndryshoni kursin e kërkesave, të ndryshoni lidhjet e mbajtësve me IP;
  • U shtua direktiva nbthread, e cila ju lejon të konfiguroni numrin e thread-ve të përdorur në HAProxy për të optimizuar performancën në CPU me shumë bërthama. Si parazgjedhje, numri i thread-ve të punës zgjidhet në varësi të bërthamave të CPU-së të disponueshme në mjedisin aktual dhe në mjediset cloud, parazgjedhja është një thread. Për të vendosur kufij të fortë, janë shtuar opsionet e montimit MAX_THREADS dhe MAX_PROCS, duke kufizuar kufirin e sipërm në numrin e thread-ve dhe proceseve;
  • Përdorimi i direktivës bind për lidhjen e mbajtësve me adresat e rrjetit është thjeshtuar. Kur konfiguroni, nuk është më e nevojshme të përcaktohen parametrat e procesit - si parazgjedhje, lidhjet do të shpërndahen midis fijeve në varësi të numrit të lidhjeve aktive.
  • Vendosja e regjistrave gjatë ekzekutimit në kontejnerë të izoluar është thjeshtuar - regjistri tani mund të dërgohet te stdout dhe stderr, si dhe te çdo përshkrues skedar ekzistues (për shembull, "log fd@1 local0");
  • Mbështetja për HTX (Native HTTP Representation) është aktivizuar si parazgjedhje, duke lejuar balancimin kur përdorni veçori të avancuara si HTTP/2 nga fundi në fund, Përsëritjet e Layer 7 dhe gRPC. HTX nuk zëvendëson titujt në vend, por redukton operacionin e modifikimit në heqjen dhe shtimin e një titulli të ri në fund të listës, i cili ju lejon të manipuloni çdo variant të zgjeruar të protokollit HTTP, duke ruajtur semantikën origjinale të titujve dhe duke ju lejuar për të arritur performancë më të lartë gjatë përkthimit të HTTP/2 në HTTP/1.1 dhe anasjelltas;
  • Mbështetje zyrtare e shtuar për modalitetin HTTP/2 End-to-End (përpunimi i të gjitha fazave në HTTP/2, duke përfshirë thirrjet në backend, dhe jo vetëm ndërveprimin midis përfaqësuesit dhe klientit);
  • Mbështetje e plotë për proksimin dydrejtimësh të protokollit gRPC është zbatuar me aftësinë për të analizuar rrjedhat gRPC, duke theksuar mesazhet individuale, duke pasqyruar trafikun gRPC në regjistër dhe duke filtruar mesazhet duke përdorur ACL. gRPC ju lejon të organizoni punën e mikroshërbimeve në gjuhë të ndryshme programimi që ndërveprojnë me njëra-tjetrën duke përdorur një API universal. Komunikimi në rrjet në gRPC zbatohet në krye të protokollit HTTP/2 dhe bazohet në përdorimin e Protokollit Buffer për serializimin e të dhënave.
  • Mbështetje e shtuar për modalitetin “Layer 7 Ritries”, i cili ju lejon të dërgoni kërkesa të përsëritura HTTP në rast të dështimeve të softuerit që nuk lidhen me probleme në krijimin e një lidhjeje rrjeti (për shembull, nëse nuk ka përgjigje ose një përgjigje boshe ndaj një Kërkesa POST). Për të çaktivizuar modalitetin, flamuri "disable-l7-retry" është shtuar në opsionin "http-kërkesa" dhe opsioni "riprovo-on" është shtuar për rregullim të imët në seksionet e paracaktuara, dëgjimi dhe prapavija. Shenjat e mëposhtme janë të disponueshme për ridërgim: të gjitha-të riprovueshme-gabime, asnjë, lidhje-dështim, përgjigje boshe, përgjigje e padëshiruar, kohë e përgjigjes, 0rtt-refuzuar, si dhe lidhje me kodet e statusit të kthyer (404, etj.) ;
  • Është implementuar një menaxher i ri procesi, i cili ju lejon të konfiguroni thirrjen e skedarëve të jashtëm të ekzekutueshëm me mbajtës për HAProxy.
    Për shembull, Data Plan API (/usr/sbin/dataplaneapi), si dhe motorë të ndryshëm të përpunimit të rrjedhës Offload, zbatohen në formën e një mbajtësi të tillë të jashtëm;

  • Lidhjet janë shtuar për .NET Core, Go, Lua dhe Python për zhvillimin e shtesave SPOE (Stream Processing Offload Engine) dhe SPOP (Stream Processing Offload Protocol). Më parë, zhvillimi i zgjerimit mbështetej vetëm në C;
  • U shtua një mbajtës 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 një ngarkesë reale);
  • prezantuar Kontrolluesi i hyrjes HAProxy Kubernetes për të siguruar integrimin me platformën Kubernetes;
  • U shtua mbështetje e integruar për eksportimin e statistikave në sistemin e monitorimit Prometeu;
  • Protokolli Peers, i përdorur për të shkëmbyer informacione me nyje të tjera që përdorin HAProxy, është zgjeruar. Duke përfshirë mbështetjen e shtuar për Heartbeat dhe transmetimin e koduar të të dhënave;
  • Parametri "kampion" është shtuar në direktivën "log", i cili ju lejon të hidhni vetëm një pjesë të kërkesave në regjistër, për shembull 1 nga 10, për të formuar një mostër analitike;
  • U shtua modaliteti i profilizimit automatik (direktiva profiling.tasks, e cila mund t'i marrë automatikisht, ndezur dhe fikur vlerat). Profilizimi automatik aktivizohet nëse vonesa mesatare kalon 1000 ms. Për të parë të dhënat e profilizimit, komanda "shfaq profilizimin" është shtuar në Runtime API ose është e mundur të rivendosen statistikat në regjistër;
  • Mbështetje e shtuar për të hyrë në serverët e backend-it duke përdorur protokollin SOCKS4;
  • Mbështetje e shtuar nga fundi në fund për mekanizmin për hapjen e shpejtë të lidhjeve TCP (TFO - TCP Fast Open, RFC 7413), i cili ju lejon të zvogëloni numrin e hapave të konfigurimit të lidhjes duke kombinuar të parën në një kërkesë dhe hapin e dytë të procesi klasik i negocimit të lidhjes me 3 hapa dhe bën të mundur dërgimin e të dhënave në fazën fillestare të krijimit të një lidhjeje;
  • Veprimet e reja të shtuara:
    • "http-kërkesa për zëvendësim-uri" për të zëvendësuar URL-në duke përdorur një shprehje të rregullt;
    • “tcp- request content do-resolve” dhe “http- request do-resolve” për zgjidhjen e emrit të hostit;
    • "tcp-kërkesa e përmbajtjes set-dst" dhe "tcp-kërkesa e përmbajtjes set-dst-port" për të zëvendësuar adresën IP të synuar dhe portin.
  • Shtuar module të reja konvertimi:
    • aes_gcm_dev për deshifrimin e transmetimeve duke përdorur algoritmet AES128-GCM, AES192-GCM dhe AES256-GCM;
    • protobuf për nxjerrjen e fushave nga mesazhet e Protocol Buffers;
    • ungrpc për të nxjerrë fushat nga mesazhet gRPC.

    Burimi: opennet.ru

Shto një koment