Rilaxx ta' HTTP/TCP balancer HAProxy 2.0

ippubblikat rilaxx tal-balancer tat-tagħbija Prokura HA 2.0, li jippermettilek tqassam traffiku HTTP u talbiet TCP arbitrarji bejn grupp ta 'servers, filwaqt li tqis ħafna fatturi (pereżempju, tiċċekkja d-disponibbiltà tas-servers, tevalwa l-livell tat-tagħbija, għandha kontromiżuri DDoS) u twettaq filtrazzjoni primarja tad-dejta ( pereżempju, tista' teżamina l-intestaturi HTTP, tiffiltra t-trażmissjoni ta' parametri ta' mistoqsija mhux korretti, timblokka s-sostituzzjoni ta' SQL u XSS, tikkonnettja aġenti tal-ipproċessar tal-kontenut). HAProxy jista 'wkoll japplikaw biex tikkoordina l-interazzjoni ta' komponenti f'sistemi bbażati fuq arkitettura ta' mikroservizzi. Il-kodiċi tal-proġett huwa miktub f'Ċ u fornuti liċenzjat taħt GPLv2. Il-proġett jintuża fuq bosta siti kbar, inklużi Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter u Vimeo.

Karatteristiċi ewlenin tar-rilaxx:

  • API ġdid introdott Pjan tad-Dejta, li jippermettilek timmaniġġja s-settings ta 'HAProxy fuq il-fly permezz ta' REST Web API. Inkluż, tista 'żżid u tneħħi b'mod dinamiku backends u servers, toħloq ACLs, tibdel ir-rotta tat-talba, tibdel ir-rabtiet tal-handler għal IP;
  • Żid id-direttiva nbthread, li tippermettilek tikkonfigura n-numru ta 'ħjut użati f'HAProxy biex tottimizza l-prestazzjoni fuq CPUs multi-core. B'mod awtomatiku, in-numru ta 'ħjut tal-ħaddiema jintgħażel skont il-qlub tas-CPU disponibbli fl-ambjent attwali, u f'ambjenti ta' sħab in-nuqqas huwa ħajt wieħed. Biex jiġu stabbiliti limiti iebsa, ġew miżjuda għażliet ta 'assemblaġġ MAX_THREADS u MAX_PROCS, li jillimitaw il-limitu ta' fuq fuq in-numru ta 'ħjut u proċessi;
  • L-użu tad-direttiva tal-irbit għall-handlers li jorbtu lill-indirizzi tan-netwerk ġie ssimplifikat. Meta twaqqaf, m'għadux meħtieġ li jiġu definiti l-parametri tal-proċess - b'mod awtomatiku, il-konnessjonijiet se jitqassmu fost il-ħjut skont in-numru ta 'konnessjonijiet attivi.
  • It-twaqqif ta' zkuk meta jitħaddem f'kontenituri iżolati ġie ssimplifikat - il-log issa jista' jintbagħat lil stdout u stderr, kif ukoll lil kwalunkwe deskrittur tal-fajl eżistenti (pereżempju, “log fd@1 local0”);
  • L-appoġġ għal HTX (Native HTTP Representation) huwa attivat awtomatikament, li jippermetti l-ibbilanċjar meta jintużaw karatteristiċi avvanzati bħal HTTP/2 minn tarf sa tarf, Layer 7 Retries u gRPC. HTX ma jissostitwixxix l-intestaturi fil-post, iżda jnaqqas l-operazzjoni ta' modifika biex ineħħi u jżid header ġdid fl-aħħar tal-lista, li jippermettilek timmanipula kwalunkwe varjanti estiżi tal-protokoll HTTP, billi tippreserva s-semantika oriġinali tal-headers u tippermettilek biex tikseb prestazzjoni ogħla meta tittraduċi HTTP/2 għal HTTP/1.1 u viċeversa;
  • Miżjud appoġġ uffiċjali għall-modalità End-to-End HTTP/2 (l-ipproċessar tal-istadji kollha f'HTTP/2, inklużi sejħiet lill-backend, u mhux biss interazzjoni bejn il-prokura u l-klijent);
  • Ġie implimentat appoġġ sħiħ għal proxy bidirezzjonali tal-protokoll gRPC bil-kapaċità li jiġu analizzati l-flussi tal-gRPC, jenfasizzaw messaġġi individwali, jirriflettu t-traffiku tal-gRPC fil-ġurnal u jiffiltraw messaġġi bl-użu ta 'ACLs. gRPC jippermettilek torganizza x-xogħol ta 'mikroservizzi f'diversi lingwi ta' programmar li jinteraġixxu ma 'xulxin bl-użu ta' API universali. Il-komunikazzjoni tan-netwerk fil-gRPC hija implimentata fuq il-protokoll HTTP/2 u hija bbażata fuq l-użu ta' Protocol Buffers għas-serializzazzjoni tad-dejta.
  • Appoġġ miżjud għall-modalità "Layer 7 Retries", li jippermettilek li tibgħat talbiet HTTP ripetuti fil-każ ta' fallimenti tas-softwer li mhumiex relatati ma' problemi li jistabbilixxu konnessjoni tan-netwerk (pereżempju, jekk ma jkunx hemm rispons jew rispons vojt għal talba POST). Biex tiddiżattiva l-mod, il-bandiera "disable-l7-retry" ġiet miżjuda mal-għażla "http-request", u l-għażla "retry-on" ġiet miżjuda għall-irfinar fis-sezzjonijiet defaults, listen u backend. Is-sinjali li ġejjin huma disponibbli biex jintbagħtu mill-ġdid: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, kif ukoll vinkolanti biex jirritornaw kodiċijiet ta 'status (404, eċċ.) ;
  • Ġie implimentat maniġer tal-proċess ġdid, li jippermettilek tikkonfigura s-sejħa ta 'fajls eżekutibbli esterni ma' handlers għal HAProxy.
    Pereżempju, l-API tal-Pjan tad-Data (/usr/sbin/dataplaneapi), kif ukoll diversi magni tal-ipproċessar tal-flussi tal-Offload, huma implimentati fil-forma ta 'tali handler estern;

  • Ġew miżjuda rbit għal .NET Core, Go, Lua u Python għall-iżvilupp ta' estensjonijiet SPOE (Stream Processing Offload Engine) u SPOP (Stream Processing Offload Protocol). Preċedentement, l-iżvilupp tal-estensjoni kien appoġġjat biss f'C;
  • Miżjud spoa-mirror handler estern (/usr/sbin/spoa-mirror) biex tirrifletti talbiet għal server separat (per eżempju, għall-ikkupjar ta 'parti mit-traffiku tal-produzzjoni għall-ittestjar ta' ambjent sperimentali taħt tagħbija reali);
  • Introdott HAProxy Kubernetes Ingress Kontrollur biex tiġi żgurata l-integrazzjoni mal-pjattaforma Kubernetes;
  • Miżjud appoġġ inkorporat għall-esportazzjoni tal-istatistika għas-sistema ta 'monitoraġġ Prometheus;
  • Il-Protokoll Peers, użat għall-iskambju ta' informazzjoni ma' nodi oħra li jħaddmu HAProxy, ġie estiż. Inkluż appoġġ miżjud għal Heartbeat u trażmissjoni ta 'dejta kriptata;
  • Il-parametru "kampjun" ġie miżjud mad-direttiva "log", li jippermettilek li titfa 'parti biss mit-talbiet fil-log, pereżempju 1 minn 10, biex tifforma kampjun analitiku;
  • Modalità ta 'profiling awtomatika miżjuda (direttiva ta' profiling.tasks, li tista 'tieħu l-valuri awtomatika, mixgħula u mitfija). Il-profiling awtomatiku huwa attivat jekk il-latency medja taqbeż l-1000 ms. Biex tara d-dejta tal-profili, il-kmand "show profiling" ġie miżjud mal-API Runtime jew huwa possibbli li terġa 'tiġi reset l-istatistika fil-log;
  • Appoġġ miżjud għall-aċċess għal servers backend bl-użu tal-protokoll SOCKS4;
  • Miżjud appoġġ minn tarf sa tarf għall-mekkaniżmu biex jinfetħu malajr konnessjonijiet TCP (TFO - TCP Fast Open, RFC 7413), li jippermettilek tnaqqas in-numru ta 'passi ta' twaqqif ta 'konnessjoni billi tgħaqqad l-ewwel waħda f'talba waħda u t-tieni pass ta' il-proċess klassiku ta 'negozjar ta' konnessjoni ta '3 stadji u jagħmilha possibbli li tintbagħat dejta fl-istadju inizjali tal-istabbiliment ta' konnessjoni;
  • Azzjonijiet ġodda miżjuda:
    • "http-request replace-uri" biex tissostitwixxi l-URL bl-użu ta' espressjoni regolari;
    • "tcp-request content do-resolve" u "http-request do-resolve" għar-riżoluzzjoni tal-hostname;
    • "tcp-request content set-dst" u "tcp-request content set-dst-port" biex jissostitwixxu l-indirizz IP u l-port fil-mira.
  • Moduli ġodda ta' konverżjoni miżjuda:
    • aes_gcm_dev għad-deċifrar ta 'flussi bl-użu ta' algoritmi AES128-GCM, AES192-GCM u AES256-GCM;
    • protobuf biex jiġu estratti oqsma minn messaġġi ta' Protocol Buffers;
    • ungrpc biex estratti oqsma minn messaġġi gRPC.

    Sors: opennet.ru

Żid kumment