HTTP/TCP balansētāja HAProxy 2.0 izlaišana

publicēts slodzes balansētāja atbrīvošana HAProxy 2.0, kas ļauj sadalīt HTTP trafiku un patvaļīgus TCP pieprasījumus starp serveru grupu, ņemot vērā daudzus faktorus (piemēram, pārbauda serveru pieejamību, novērtē slodzes līmeni, veic DDoS pretpasākumus) un veic primāro datu filtrēšanu ( piemēram, varat parsēt HTTP galvenes, filtrēt nepareizus vaicājuma parametrus, bloķēt SQL un XSS aizstāšanu, savienot satura apstrādes aģentus). Var arī HAProxy pieteikties koordinēt komponentu mijiedarbību sistēmās, kuru pamatā ir mikropakalpojumu arhitektūra. Projekta kods ir rakstīts C un piegādāts licencēts saskaņā ar GPLv2. Projekts tiek izmantots daudzās lielās vietnēs, tostarp Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter un Vimeo.

Galvenās izlaišanas funkcijas:

  • Ieviests jauns API Datu plāns, kas ļauj pārvaldīt HAProxy iestatījumus lidojumā, izmantojot REST Web API. Tostarp varat dinamiski pievienot un noņemt aizmugursistēmas un serverus, izveidot ACL, mainīt pieprasījumu maršrutēšanu, mainīt apstrādātāja saistījumus uz IP;
  • Pievienota nbthread direktīva, kas ļauj konfigurēt HAProxy izmantoto pavedienu skaitu, lai optimizētu veiktspēju daudzkodolu CPU. Pēc noklusējuma darbinieka pavedienu skaits tiek atlasīts atkarībā no pašreizējā vidē pieejamajiem CPU kodoliem, un mākoņa vidēs noklusējuma iestatījums ir viens pavediens. Lai iestatītu stingrus ierobežojumus, ir pievienotas montāžas opcijas MAX_THREADS un MAX_PROCS, ierobežojot pavedienu un procesu skaita augšējo ierobežojumu;
  • Saistīšanas direktīvas izmantošana apstrādātāju piesaistīšanai tīkla adresēm ir vienkāršota. Iestatīšanas laikā vairs nav nepieciešams definēt procesa parametrus - pēc noklusējuma savienojumi tiks sadalīti pa pavedieniem atkarībā no aktīvo savienojumu skaita.
  • Žurnālu iestatīšana, darbojoties izolētos konteineros, ir vienkāršota - tagad žurnālu var nosūtīt uz stdout un stderr, kā arī uz jebkuru esošo faila deskriptoru (piemēram, “log fd@1 local0”);
  • Atbalsts HTX (vietējā HTTP reprezentācija) ir iespējots pēc noklusējuma, ļaujot līdzsvarot, izmantojot uzlabotas funkcijas, piemēram, HTTP/2, 7. slāņa atkārtojumus un gRPC. HTX neaizstāj galvenes vietā, bet samazina modifikācijas darbību līdz jaunas galvenes noņemšanai un pievienošanai saraksta beigām, kas ļauj manipulēt ar jebkādiem paplašinātiem HTTP protokola variantiem, saglabājot oriģinālo galveņu semantiku un ļaujot jums lai sasniegtu augstāku veiktspēju, tulkojot HTTP/2 uz HTTP/1.1 un otrādi;
  • Pievienots oficiālais atbalsts HTTP/2 režīmam no gala līdz galam (visu HTTP/2 posmu apstrāde, ieskaitot izsaukumus uz aizmugursistēmu, nevis tikai mijiedarbību starp starpniekserveri un klientu);
  • Pilns gRPC protokola divvirzienu starpniekservera atbalsts ir ieviests ar iespēju parsēt gRPC straumes, izceļot atsevišķus ziņojumus, atspoguļojot gRPC trafiku žurnālā un filtrējot ziņojumus, izmantojot ACL. gRPC ļauj organizēt mikropakalpojumu darbu dažādās programmēšanas valodās, kas mijiedarbojas savā starpā, izmantojot universālu API. Tīkla komunikācija gRPC ir ieviesta papildus HTTP/2 protokolam, un tā ir balstīta uz protokola buferu izmantošanu datu serializēšanai.
  • Pievienots “Layer 7 Retries” režīma atbalsts, kas ļauj nosūtīt atkārtotus HTTP pieprasījumus programmatūras kļūmju gadījumā, kas nav saistītas ar tīkla savienojuma izveides problēmām (piemēram, ja nav atbildes vai ir tukša atbilde uz POST pieprasījums). Lai atspējotu režīmu, opcijai “http-pieprasījums” ir pievienots karogs “disable-l7-retry”, un ir pievienota opcija “retry-on”, lai precizētu noklusējuma, klausīšanās un aizmugursistēmas sadaļas. Atkārtotai nosūtīšanai ir pieejamas šādas zīmes: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, kā arī saistība ar atgriešanas statusa kodiem (404 utt.) ;
  • Ir ieviests jauns procesu pārvaldnieks, kas ļauj konfigurēt ārējo izpildāmo failu izsaukšanu ar HAProxy apstrādātājiem.
    Piemēram, datu plāna API (/usr/sbin/dataplaneapi), kā arī dažādi Offload straumes apstrādes dzinēji tiek realizēti šāda ārējā apstrādātāja veidā;

  • Ir pievienoti saistījumi .NET Core, Go, Lua un Python, lai izstrādātu SPOE (Stream Processing Offload Engine) un SPOP (Stream Processing Offload Protocol) paplašinājumus. Iepriekš paplašinājumu izstrāde tika atbalstīta tikai C;
  • Pievienots ārējs spoa-spoguļa apstrādātājs (/usr/sbin/spoa-mirror), lai atspoguļotu pieprasījumus atsevišķā serverī (piemēram, lai kopētu daļu no ražošanas trafika, lai pārbaudītu eksperimentālo vidi reālā slodzē);
  • Iesniedzis HAProxy Kubernetes ieejas kontrolieris nodrošināt integrāciju ar Kubernetes platformu;
  • Pievienots iebūvēts atbalsts statistikas eksportēšanai uz uzraudzības sistēmu Prometejs;
  • Peers Protocol, ko izmanto informācijas apmaiņai ar citiem mezgliem, kuros darbojas HAProxy, ir paplašināts. Ieskaitot papildu atbalstu Heartbeat un šifrētu datu pārraidi;
  • “log” direktīvai ir pievienots parametrs “sample”, kas ļauj žurnālā izmest tikai daļu pieprasījumu, piemēram, 1 no 10, lai izveidotu analītisko paraugu;
  • Pievienots automātiskais profilēšanas režīms (direktīva profiling.tasks, kas var uzņemt vērtības auto, ieslēgts un izslēgts). Automātiskā profilēšana ir iespējota, ja vidējais latentums pārsniedz 1000 ms. Lai apskatītu profilēšanas datus, Runtime API ir pievienota komanda “rādīt profilēšanu” vai ir iespējams atiestatīt statistiku žurnālā;
  • Pievienots atbalsts piekļuvei aizmugursistēmas serveriem, izmantojot SOCKS4 protokolu;
  • Pievienots pilnīgs atbalsts mehānismam ātrai TCP savienojumu atvēršanai (TFO - TCP Fast Open, RFC 7413), kas ļauj samazināt savienojuma iestatīšanas darbību skaitu, apvienojot pirmo vienā pieprasījumā un otro soli. klasiskais 3 pakāpju savienojuma sarunu process un ļauj nosūtīt datus savienojuma izveides sākumposmā;
  • Pievienotas jaunas darbības:
    • "http-pieprasījums aizstāt-uri", lai aizstātu URL, izmantojot regulāru izteiksmi;
    • “tcp-request content do-resolve” un “http-request do-resolve” resursdatora nosaukuma atrisināšanai;
    • “tcp-request content set-dst” un “tcp-request content set-dst-port”, lai aizstātu mērķa IP adresi un portu.
  • Pievienoti jauni konvertēšanas moduļi:
    • aes_gcm_dev straumju atšifrēšanai, izmantojot AES128-GCM, AES192-GCM un AES256-GCM algoritmus;
    • protobuf, lai izvilktu laukus no protokola buferu ziņojumiem;
    • ungrpc, lai izvilktu laukus no gRPC ziņojumiem.

    Avots: opennet.ru

Pievieno komentāru