Liberigo de HTTP/TCP-balancilo HAProxy 2.0

eldonita ŝarĝobalancilo liberigo HA Prokurilo 2.0, kiu permesas vin distribui HTTP-trafikon kaj arbitrajn TCP-petojn inter grupo da serviloj, konsiderante multajn faktorojn (ekzemple, ĝi kontrolas la haveblecon de serviloj, taksas la ŝarĝnivelon, havas DDoS kontraŭrimedojn) kaj efektivigas primaran datuman filtradon ( ekzemple, vi povas analizi HTTP-kapojn, filtri transsendon malĝustajn demandajn parametrojn, bloki SQL kaj XSS-anstataŭigon, konekti enhavajn prilaborantojn). HAProxy ankaŭ povas apliki kunordigi la interagadon de komponentoj en sistemoj bazitaj sur mikroserva arkitekturo. La projektkodo estas skribita en C kaj provizis licencita laŭ GPLv2. La projekto estas uzata en multaj grandaj retejoj, inkluzive de Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter kaj Vimeo.

Ĉefaj eldonaj funkcioj:

  • Nova API enkondukita Datuma Plano, kiu permesas vin administri HAProxy-agordojn sur la flugo per REST Web API. Inkluzive, vi povas dinamike aldoni kaj forigi backends kaj serviloj, krei ACL-ojn, ŝanĝi peton-vojigon, ŝanĝi pritraktilligojn al IP;
  • Aldonis la direktivon nbthread, kiu ebligas al vi agordi la nombron da fadenoj uzataj en HAProxy por optimumigi rendimenton sur plurkernaj CPUoj. Defaŭlte, la nombro da laborfadenoj estas elektita depende de la CPU-kernoj disponeblaj en la nuna medio, kaj en nubaj medioj la defaŭlta estas unu fadeno. Por agordi malmolajn limojn, muntaj opcioj MAX_THREADS kaj MAX_PROCS estis aldonitaj, limigante la supran limon de la nombro da fadenoj kaj procezoj;
  • La uzo de la bind-direktivo por ligado de prizorgantoj al retadresoj estis simpligita. Dum agordo, ne plu necesas difini procezajn parametrojn - defaŭlte, ligoj estos distribuitaj inter fadenoj depende de la nombro da aktivaj ligoj.
  • Agordi protokolojn dum funkciado en izolitaj ujoj estis simpligita - la protokolo nun povas esti sendita al stdout kaj stderr, same kiel al iu ekzistanta dosierpriskribilo (ekzemple, “log fd@1 local0”);
  • Subteno por HTX (Native HTTP Representation) estas ebligita defaŭlte, ebligante ekvilibron dum uzado de altnivelaj funkcioj kiel fino-al-fina HTTP/2, Layer 7 Retries kaj gRPC. HTX ne anstataŭigas kapliniojn en la loko, sed reduktas la modifoperacion al forigo kaj aldono de nova kaplinio al la fino de la listo, kiu ebligas al vi manipuli ajnajn plilongigitajn variantojn de la HTTP-protokolo, konservante la originalan semantikon de la kaplinioj kaj permesante vin. atingi pli altan rendimenton dum tradukado de HTTP/2 al HTTP/1.1 kaj inverse;
  • Aldonita oficiala subteno por End-al-End HTTP/2-reĝimo (prilaborado de ĉiuj stadioj en HTTP/2, inkluzive de vokoj al la backend, kaj ne nur interagado inter la prokurilo kaj la kliento);
  • Plena subteno por dudirekta prokurado de la gRPC-protokolo estis efektivigita kun la kapablo analizi gRPC-riveretojn, elstarigante individuajn mesaĝojn, reflektante gRPC-trafikon en la protokolo kaj filtrante mesaĝojn uzante ACLojn. gRPC permesas vin organizi la laboron de mikroservoj en diversaj programlingvoj, kiuj interagas unu kun la alia per universala API. Reta komunikado en gRPC estas efektivigita aldone al la HTTP/2-protokolo kaj estas bazita sur la uzo de Protokolaj Bufferoj por datumseriigo.
  • Aldonita subteno por la reĝimo "Layer 7 Retrys", kiu ebligas al vi sendi ripetajn HTTP-petojn en la okazo de programaj misfunkciadoj, kiuj ne rilatas al problemoj por establi retkonekton (ekzemple, se ne ekzistas respondo aŭ malplena respondo al POST-peto). Por malŝalti la reĝimon, la flago "disable-l7-retry" estis aldonita al la opcio "http-request", kaj la opcio "retry-on" aldoniĝis por fajna agordo en la defaŭltaj, aŭskulti kaj malantaŭaj sekcioj. La sekvaj signoj estas disponeblaj por resendo: ĉio-reprovable-eraroj, neniu, kon-malsukceso, malplena-respondo, rubo-respondo, respondo-tempo, 0rtt-malakceptita, same kiel ligado por resendi statuskodojn (404, ktp.) ;
  • Nova procezmanaĝero estis efektivigita, kiu ebligas al vi agordi voki eksterajn ruleblajn dosierojn kun pritraktiloj por HAProxy.
    Ekzemple, la Data Plana API (/usr/sbin/dataplaneapi), same kiel diversaj Elŝutaj fluaj pretigaj motoroj, estas efektivigitaj en la formo de tia ekstera prizorganto;

  • Ligiloj estis aldonitaj por .NET Core, Go, Lua kaj Python por disvolvi SPOE (Stream Processing Offload Engine) kaj SPOP (Stream Processing Offload Protocol) etendaĵojn. Antaŭe, etendaĵo-evoluo estis subtenata nur en C;
  • Aldonita ekstera spoa-spegula prizorganto (/usr/sbin/spoa-mirror) por spegula petoj al aparta servilo (ekzemple, por kopii parton de la produktada trafiko por testi eksperimentan medion sub reala ŝarĝo);
  • Enkondukita HAProxy Kubernetes Ingress Controller certigi integriĝon kun la platformo Kubernetes;
  • Aldonita enkonstruita subteno por eksportado de statistikoj al la monitora sistemo Prometeo;
  • La Peers Protokolo, uzata por interŝanĝi informojn kun aliaj nodoj kurantaj HAProxy, estis etendita. Inkluzive de aldonita subteno por Heartbeat kaj ĉifrita datumtranssendo;
  • La parametro "specimeno" estis aldonita al la direktivo "protokolo", kiu permesas vin forĵeti nur parton de petoj en la protokolon, ekzemple 1 el 10, por formi analizan specimenon;
  • Aldonita aŭtomata profila reĝimo (direktivo profiling.tasks, kiu povas preni la valorojn aŭtomate, ŝalti kaj malŝalti). Aŭtomata profilado estas ebligita se la averaĝa latenco superas 1000 ms. Por vidi profilajn datumojn, la komando "montri profiladon" estis aldonita al la Runtime API aŭ eblas restarigi statistikojn al la protokolo;
  • Aldonita subteno por aliro al backend serviloj uzante la SOCKS4 protokolo;
  • Aldonita fino-al-fina subteno por la mekanismo por rapide malfermi TCP-ligojn (TFO - TCP Fast Open, RFC 7413), kiu ebligas vin redukti la nombron da konekto-agordaj paŝoj kombinante la unuan en unu peton kaj la duan paŝon de la klasika 3-paŝa konekto-intertraktado kaj ebligas sendi datumojn en la komenca etapo de establado de konekto;
  • Novaj agoj aldonitaj:
    • "http-request replace-uri" por anstataŭigi la URL per regula esprimo;
    • "tcp-request content do-resolve" kaj "http-request do-resolve" por solvi la gastigan nomon;
    • "tcp-request content set-dst" kaj "tcp-request content set-dst-port" por anstataŭigi la celan IP-adreson kaj havenon.
  • Aldonitaj novaj konvertaj moduloj:
    • aes_gcm_dev por malĉifri fluojn uzante algoritmojn AES128-GCM, AES192-GCM kaj AES256-GCM;
    • protobuf por ĉerpi kampojn el mesaĝoj de Protocol Buffers;
    • ungrpc por ĉerpi kampojn el gRPC-mesaĝoj.

    fonto: opennet.ru

Aldoni komenton