Shkëputja e balancuesit HTTP/TCP HAProxy 2.0

Publikuar publikimi i balancuesit tĂ« ngarkesĂ«s HAProxy 2.0, i cili mundĂ«son shpĂ«rndarjen e trafikut HTTP dhe kĂ«rkesave tĂ« rastĂ«sishme TCP mes njĂ« grupi serverĂ«sh, duke marrĂ« parasysh shumĂ« faktorĂ« (p.sh., kontrollon disponueshmĂ«rinĂ« e serverĂ«ve, vlerĂ«son nivelin e ngarkesĂ«s, ka mjete pĂ«r tĂ« pĂ«rballuar DDoS) dhe kryen filtrimin fillestar tĂ« tĂ« dhĂ«nave (p.sh., mund tĂ« analizojĂ« titujt HTTP, tĂ« filtrojĂ« kalimin e parametrave tĂ« pavlefshĂ«m tĂ« kĂ«rkesĂ«s, tĂ« bllokojĂ« zĂ«vendĂ«simet SQL dhe XSS, tĂ« lidhĂ« agjentĂ« pĂ«r pĂ«rpunimin e pĂ«rmbajtjes). HAProxy gjithashtu mund pĂ«rdoren pĂ«r koordinimin e ndĂ«rveprimeve tĂ« komponentĂ«ve nĂ« sistemet me arkitekturĂ« mikrosluĆŸbĂ«sh. Kode projekti Ă«shtĂ« shkruar nĂ« gjuhĂ«n C dhe ofrohet nĂ«n licencĂ«n GPLv2. Projekti pĂ«rdoret nĂ« shumĂ« faqe tĂ« mĂ«dha, duke pĂ«rfshirĂ« Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter dhe Vimeo.

Karakteristikat kryesore të publikimit:

  • Prezantimi i API-sĂ« sĂ« re Data Plan, e cila lejon menaxhimin nĂ« kohĂ« reale tĂ« konfigurimeve tĂ« HAProxy pĂ«rmes REST Web API. PĂ«rfshin mundĂ«sinĂ« pĂ«r tĂ« shtuar dhe hequr dinamikisht backend-et dhe serverĂ«t, pĂ«r tĂ« krijuar ACL, pĂ«r tĂ« ndryshuar shpĂ«rndarjen e kĂ«rkesave, pĂ«r tĂ« ndryshuar lidhjet e pĂ«rpunuesve me IP;
  • Shtuar direktivĂ«n nbthread, e cila lejon konfigurimin e numrit tĂ« fijeve tĂ« pĂ«rdorura nĂ« HAProxy pĂ«r optimizimin e punĂ«s nĂ« CPU shumĂ«-bĂ«rthamĂ«sh. NĂ« mĂ«nyrĂ« default, numri i fijeve tĂ« punĂ«s pĂ«rcaktohet nĂ« varĂ«si tĂ« bĂ«rthamave tĂ« disponueshme nĂ« mjedisin aktual, dhe nĂ« mjediset cloud ndodhet njĂ« fije sipas default. PĂ«r tĂ« vendosur kufij tĂ« fortĂ«, janĂ« shtuar opsionet MAX_THREADS dhe MAX_PROCS, tĂ« cilat kufizojnĂ« kufirin e sipĂ«rm pĂ«r numrin e fijeve dhe proceseve;
  • E thjeshtĂ«zuar pĂ«rdorimi i direktivĂ«s bind pĂ«r lidhjen e pĂ«rpunuesve me adresat rrjetore. GjatĂ« konfigurimit tani nuk Ă«shtĂ« e nevojshme tĂ« pĂ«rcaktohen parametĂ«r pĂ«r procesin — sipas default, lidhjet do tĂ« shpĂ«rndahen nĂ« varĂ«si tĂ« numrit tĂ« lidhjeve aktive.
  • E thjeshtĂ«zuar konfigurimi i logĂ«ve gjatĂ« nisjes nĂ« konteiner tĂ« izoluar — logu tani mund tĂ« drejtohet nĂ« stdout dhe stderr, si dhe nĂ« çdo pĂ«rshkrues ekzistues tĂ« skedarĂ«ve (p.sh., 'log fd@1 local0');
  • PĂ«rfshirĂ« sipas default mbĂ«shtetje pĂ«r HTX (PĂ«rfaqĂ«simi Native HTTP), duke mundĂ«suar balancimin kur aplikohen funksionalitete tĂ« avancuara, tĂ« tilla si HTTP/2 end-to-end, Rralljet e ShtresĂ«s 7 dhe gRPC. HTX nuk zĂ«vendĂ«son titujt nĂ« vend, por e redukton operacionin e ndryshimit nĂ« heqjen dhe shtimin e njĂ« titulli tĂ« ri nĂ« fund tĂ« listĂ«s, duke lejuar manipulimin e çdo varianti tĂ« pĂ«rparuar tĂ« protokollit HTTP, duke ruajtur semantikĂ«n origjinale tĂ« titujve dhe duke lejuar arritjen e performancĂ«s mĂ« tĂ« lartĂ« gjatĂ« translacionit tĂ« HTTP/2 nĂ« HTTP/1.1 dhe anasjelltas;
  • Shtuar mbĂ«shtetje zyrtare pĂ«r modin End-to-End HTTP/2 (pĂ«rpunimi i tĂ« gjitha fazave nĂ« HTTP/2, duke pĂ«rfshirĂ« kĂ«rkesat pĂ«r backend, dhe jo vetĂ«m ndĂ«rveprimin e proxy me klientin);
  • Implementuar mbĂ«shtetje tĂ« plotĂ« pĂ«r proxy-im e dyanshĂ«m tĂ« protokollit gRPC me mundĂ«sinĂ« e analizĂ«s sĂ« kanaleve gRPC, duke veçuar mesazhe tĂ« veçanta, duke reflektuar trafikun gRPC nĂ« log dhe duke filtruar mesazhet pĂ«rmes ACL. gRPC lejon organizimin e punĂ«s sĂ« mikrosluĆŸbĂ«ve nĂ« gjuhĂ« tĂ« ndryshme programuese, tĂ« cilat ndĂ«rveprojnĂ« me njĂ«ra-tjetrĂ«n pĂ«rmes njĂ« API universale. NdĂ«rveprimi rrjetor nĂ« gRPC realizohet mbi protokollin HTTP/2 dhe Ă«shtĂ« i bazuar nĂ« pĂ«rdorimin e Protocol Buffers pĂ«r serializimin e tĂ« dhĂ«nave.
  • Shtuar mbĂ«shtetje pĂ«r modin 'Layer 7 Retries', duke lejuar dĂ«rgimin e kĂ«rkesave tĂ« pĂ«rsĂ«ritura HTTP nĂ« rast tĂ« dĂ«shtimeve programore, qĂ« nuk janĂ« tĂ« lidhura me problemet e vendosjes sĂ« lidhjes rrjetore (p.sh., nĂ« mungesĂ« tĂ« pĂ«rgjigjes ose pĂ«rgjigje bosh nĂ« kĂ«rkesĂ«n POST). PĂ«r tĂ« çaktivizuar modin, nĂ« opsionin 'http-request' Ă«shtĂ« shtuar flama 'disable-l7-retry', dhe pĂ«r rregullimin e hollĂ«sishĂ«m nĂ« seksionet defaults, listen dhe backend Ă«shtĂ« shtuar opsioni 'retry-on'. Pranohen shenjat e mĂ«poshtme pĂ«r dĂ«rgimin e pĂ«rsĂ«ritur: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, si dhe lidhja me kodet e kthimit tĂ« statusit (404 etj.);
  • Implementuar njĂ« menaxher tĂ« ri procesesh (Process Manager), i cili lejon konfigurimin e thirrjes sĂ« skedarĂ«ve ekzekutues tĂ« jashtĂ«m me pĂ«rpunuesit pĂ«r HAProxy.
    Për shembull, një përpunues të tillë të jashtëm e realizon API Data Plan (/usr/sbin/dataplaneapi), si dhe motorë të ndryshëm të përpunimit të fijeve Offload;
  • PĂ«r .NET Core, Go, Lua dhe Python janĂ« shtuar binde pĂ«r zhvillimin e zgjerimeve SPOE (Stream Processing Offload Engine) dhe SPOP (Stream Processing Offload Protocol). MĂ« parĂ«, zhvillimi i zgjerimeve mbĂ«shtetej vetĂ«m nĂ« C;
  • Shtuar njĂ« pĂ«rpunues tĂ« jashtĂ«m spoa-mirror (/usr/sbin/spoa-mirror) pĂ«r pasqyrimin e kĂ«rkesave nĂ« njĂ« server tĂ« veçantĂ« (p.sh., pĂ«r kopjimin e njĂ« pjese tĂ« trafikut tĂ« punĂ«s pĂ«r testimin e njĂ« mjedisi eksperimental nĂ«n ngarkesĂ« reale);
  • TĂ« paraqitura HAProxy Kubernetes Ingress Controller pĂ«r tĂ« siguruar integrimin me platformĂ«n Kubernetes;
  • Shtuar mbĂ«shtetje tĂ« integruar pĂ«r eksportin e statistikave nĂ« sistemin e monitorimit Prometheus;
  • Protokolli Peers Protocol Ă«shtĂ« pĂ«rmirĂ«suar, duke u pĂ«rdorur pĂ«r shkĂ«mbimin e informacionit me nodet e tjera me HAProxy. NĂ« mes, Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r Heartbeat dhe transferimin e dhĂ«nave tĂ« enkriptuara;
  • DirektivĂ«s «log» i Ă«shtĂ« shtuar parametri «sample», i cili lejon qĂ« tĂ« regjistrohet vetĂ«m njĂ« pjesĂ« e kĂ«rkesave, pĂ«r shembull 1 nga 10, pĂ«r tĂ« formuar njĂ« mostĂ«r analitike;
  • ËshtĂ« shtuar njĂ« mĂ«nyrĂ« automatike profilizimi (direktiva profiling.tasks, e cila mund tĂ« marrĂ« vlera auto, on dhe off). Profilizimi automatik aktivizohet nĂ« rast se mesatarja e kohĂ«s sĂ« vonesĂ«s kalon shifrĂ«n 1000 ms. PĂ«r tĂ« parĂ« tĂ« dhĂ«nat e profilizimit nĂ« API-nĂ« Runtime Ă«shtĂ« shtuar komandĂ«n «show profiling» ose ka mundĂ«sinĂ« pĂ«r tĂ« rinovuar statistikat nĂ« log;
  • ËshtĂ« shtuar mbĂ«shtetje pĂ«r aksesin nĂ« serverĂ«t e backend-it duke pĂ«rdorur protokollin SOCKS4;
  • ËshtĂ« shtuar mbĂ«shtetje pĂ«r mekanizmin e hapjes sĂ« shpejtĂ« tĂ« TCP-sĂ« (TFO — TCP Fast Open, RFC 7413), i cili lejon tĂ« zvogĂ«lohen hapat pĂ«r krijimin e lidhjes duke kombinuar nĂ« njĂ« kĂ«rkesĂ« hapat e parĂ« dhe tĂ« dytĂ« tĂ« procesit klasik 3-hapĂ«sh tĂ« pajtimit tĂ« lidhjes dhe lejon dĂ«rgimin e tĂ« dhĂ«nave nĂ« fazĂ«n fillestare tĂ« krijimit tĂ« lidhjes;
  • JanĂ« shtuar veprime tĂ« reja:
    • «http-request replace-uri» pĂ«r tĂ« zĂ«vendĂ«suar URL me pĂ«rdorimin e shprehjeve tĂ« rregullta;
    • «tcp-request content do-resolve» dhe «http-request do-resolve» pĂ«r zgjidhjen e emrit tĂ« hostit;
    • «tcp-request content set-dst» dhe «tcp-request content set-dst-port» pĂ«r tĂ« vendosur IP e targetit dhe portin.
  • JanĂ« shtuar module tĂ« reja konvertimi:
    • aes_gcm_dev pĂ«r dekryptimin e flukseve duke pĂ«rdorur algoritmĂ«t AES128-GCM, AES192-GCM dhe AES256-GCM;
    • protobuf pĂ«r nxjerrjen e fushave nga mesazhet e Protocol Buffers;
    • ungrpc pĂ«r nxjerrjen e fushave nga mesazhet gRPC.

    Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster