HTTP/TCP orekatzailea HAProxy 2.0 kaleratzea

argitaratua karga orekatzeko askatzea HA Proxy 2.0, zerbitzari talde baten artean HTTP trafikoa eta TCP eskaera arbitrarioak banatzeko aukera ematen duena, faktore asko kontuan hartuta (adibidez, zerbitzarien erabilgarritasuna egiaztatzen du, karga maila ebaluatzen du, DDoS kontrako neurriak ditu) eta lehen datuen iragazketa egiten du ( adibidez, HTTP goiburuak analizatu, transmisioa okerreko kontsulta-parametroak iragazi, SQL eta XSS ordezkapena blokeatu, edukia prozesatzeko agenteak konektatu). HAProxy ere egin dezake aplikatu mikrozerbitzuen arkitekturan oinarritutako sistemetan osagaien elkarrekintza koordinatzea. Proiektuaren kodea C eta idatzita dago hornituta GPLv2 lizentziapean. Proiektua gune handi askotan erabiltzen da, besteak beste, Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter eta Vimeo.

Oharra egiteko ezaugarri nagusiak:

  • API berria sartu da Datu Plana, REST Web APIaren bidez HAProxy ezarpenak berehala kudeatzeko aukera ematen duena. Barne, backend-ak eta zerbitzariak dinamikoki gehitu eta ken ditzakezu, ACL-ak sortu, eskaera-bideraketa aldatu, kudeatzaile-loturak IPra alda ditzakezu;
  • nbthread direktiba gehitu da, HAProxy-n erabilitako hari kopurua konfiguratzeko aukera ematen duena nukleo anitzeko CPUetan errendimendua optimizatzeko. Lehenespenez, langileen hari kopurua uneko ingurunean eskuragarri dauden CPU-nukleoen arabera hautatzen da, eta hodei-inguruneetan hari bakarra da lehenetsia. Muga gogorrak ezartzeko, MAX_THREADS eta MAX_PROCS muntaketa aukerak gehitu dira, hari eta prozesu kopuruaren goiko muga mugatuz;
  • Sinplifikatu egin da kudeatzaileak sareko helbideetara lotzeko bind zuzentarauaren erabilera. Konfiguratzerakoan, jada ez da beharrezkoa prozesu parametroak definitzea; lehenespenez, konexioak harien artean banatuko dira konexio aktibo kopuruaren arabera.
  • Erregistroak konfiguratzea edukiontzi isolatuetan exekutatzen denean sinplifikatu egin da - orain erregistroa stdout eta stderr-era bidal daiteke, baita lehendik dagoen edozein fitxategi deskribatzailera ere (adibidez, β€œlog fd@1 local0”);
  • HTX (Native HTTP Representation) euskarria lehenespenez gaituta dago, eta funtzio aurreratuak erabiltzean orekatzeko aukera ematen du, hala nola, muturreko HTTP/2, Layer 7 Retries eta gRPC. HTX-k ez ditu goiburuak ordezkatzen, baina aldaketa-eragiketa murrizten du zerrendaren amaieran goiburu berri bat kentzera eta gehitzera, eta horrek HTTP protokoloaren aldaera hedatuak manipulatzeko aukera ematen du, goiburuen jatorrizko semantika mantenduz eta aukera emanez. errendimendu handiagoa lortzeko HTTP/2 HTTP/1.1era itzultzean eta alderantziz;
  • Amaierako HTTP/2 modurako laguntza ofiziala gehitu da (HTTP/2-n etapa guztiak prozesatzea, backenderako deiak barne, eta ez proxyaren eta bezeroaren arteko elkarrekintza soilik);
  • gRPC protokoloaren bidirekzio proxyrako laguntza osoa inplementatu da gRPC korronteak analizatzeko, mezu indibidualak nabarmenduz, gRPC trafikoa erregistroan islatuz eta ACLak erabiliz mezuak iragazteko. gRPC-k mikrozerbitzuen lana API unibertsal baten bidez elkarreragiten duten hainbat programazio lengoaiatan antolatzeko aukera ematen du. Sare-komunikazioa gRPC-n HTTP/2 protokoloaren gainean ezartzen da eta datuak serializatzeko Protokolo Buffer-en erabileran oinarritzen da.
  • "Layer 7 Retrys" modurako euskarria gehitu da, zeinak sareko konexioa ezartzeko arazoekin erlazionatuta ez dauden software-akatsen kasuan (adibidez, erantzunik ez badago edo erantzun hutsik dagoenean) bidaltzeko aukera ematen duena. POST eskaera). Modua desgaitzeko, "disable-l7-retry" bandera gehitu da "http-request" aukerari, eta "berriro saiatu" aukera gehitu da lehenetsitako, entzun eta backend ataletan doitzeko. Seinale hauek daude berriro bidaltzeko: guztiak-retryable-errors, none, conn-failure, empty-response, junk-response, erantzun-denbora-muga, 0rtt-rejected, baita egoera kodeak itzultzeko loteslea ere (404, etab.) ;
  • Prozesu-kudeatzaile berri bat inplementatu da, eta horri esker, kanpoko fitxategi exekutagarriak deitzea HAProxy-ren kudeatzaileekin konfigura dezakezu.
    Esaterako, Data Plan APIa (/usr/sbin/dataplaneapi), baita Offload korronteen prozesatzeko hainbat motor ere, kanpoko kudeatzaile baten moduan inplementatzen dira;

  • Loturak gehitu dira .NET Core, Go, Lua eta Pythonentzat SPOE (Stream Processing Offload Engine) eta SPOP (Stream Processing Offload Protocol) luzapenak garatzeko. Aurretik, luzapenaren garapena C-n bakarrik onartzen zen;
  • Kanpoko spoa-mirror kudeatzaile bat gehitu da (/usr/sbin/spoa-mirror) eskaerak zerbitzari bereizi batean islatzeko (adibidez, ekoizpen-trafikoaren zati bat kopiatzeko ingurune esperimental bat benetako kargapean probatzeko);
  • Bidalita HAProxy Kubernetes Ingress Controller Kubernetes plataformarekin integrazioa ziurtatzeko;
  • Jarraipen-sistemara estatistikak esportatzeko euskarri integratua gehitu da Prometeo;
  • HAProxy exekutatzen duten beste nodo batzuekin informazioa trukatzeko erabiltzen den Peers Protokoloa hedatu da. Heartbeat eta datu enkriptatutako transmisiorako laguntza gehigarria barne;
  • "Lagina" parametroa "erregistroa" zuzentarauari gehitu zaio, eta horri esker, eskaeren zati bat soilik erregistrora bota dezakezu, adibidez, 1etik 10, lagin analitiko bat osatzeko;
  • Profil automatikoko modua gehitu da (profiling.tasks zuzentaraua, balioak automatikoki, aktibatu eta desaktibatu ditzake). Profil automatikoa gaituta dago batez besteko latentzia 1000 ms gainditzen badu. Profilaren datuak ikusteko, "show profiling" komandoa gehitu da Runtime API-ra edo posible da estatistikak erregistroan berrezartzea;
  • SOCKS4 protokoloa erabiliz backend zerbitzarietara sartzeko laguntza gehitu da;
  • TCP konexioak azkar irekitzeko mekanismoari amaierako laguntza gehitu zaio (TFO - TCP Fast Open, RFC 7413), eta horrek konexioa konfiguratzeko urratsen kopurua murrizteko aukera ematen du, lehenengoa eskaera batean eta bigarren urratsa konbinatuz. 3 urratseko konexioaren negoziazio prozesu klasikoa eta konexioa ezartzeko hasierako fasean datuak bidaltzea ahalbidetzen du;
  • Ekintza berriak gehitu dira:
    • "http-request replace-uri" URLa adierazpen erregular bat erabiliz ordezkatzeko;
    • β€œtcp-request content do-resolve” eta β€œhttp-request do-resolve” ostalari-izena ebazteko;
    • "tcp-request content set-dst" eta "tcp-request content set-dst-port" helburuko IP helbidea eta ataka ordezkatzeko.
  • Bihurketa modulu berriak gehitu dira:
    • aes_gcm_dev korronteak deszifratzeko AES128-GCM, AES192-GCM eta AES256-GCM algoritmoak erabiliz;
    • protobuf Protocol Buffers mezuetatik eremuak ateratzeko;
    • ungrpc gRPC mezuetatik eremuak ateratzeko.

    Iturria: opennet.ru

Gehitu iruzkin berria