Paglabas ng HTTP/TCP balancer HAProxy 2.0

Nai-publish paglabas ng load balancer HA Proxy 2.0, na nagbibigay-daan sa iyong ipamahagi ang trapiko ng HTTP at mga arbitrary na kahilingan sa TCP sa pagitan ng isang pangkat ng mga server, na isinasaalang-alang ang maraming mga kadahilanan (halimbawa, sinusuri nito ang pagkakaroon ng mga server, tinatasa ang antas ng pag-load, may mga countermeasure ng DDoS) at nagsasagawa ng pangunahing pag-filter ng data ( halimbawa, maaari mong i-parse ang mga header ng HTTP, i-filter ang transmission ng mga maling parameter ng query, i-block ang SQL at XSS substitution, ikonekta ang mga ahente sa pagpoproseso ng nilalaman). Pwede din ang HAProxy mag-apply upang i-coordinate ang pakikipag-ugnayan ng mga bahagi sa mga system batay sa arkitektura ng microservices. Ang code ng proyekto ay nakasulat sa C at naibigay lisensyado sa ilalim ng GPLv2. Ginagamit ang proyekto sa maraming malalaking site, kabilang ang Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter at Vimeo.

Mga pangunahing tampok ng paglabas:

  • Ipinakilala ang bagong API Plano ng Data, na nagbibigay-daan sa iyong pamahalaan ang mga setting ng HAProxy on the fly sa pamamagitan ng REST Web API. Kasama, maaari mong dynamic na magdagdag at mag-alis ng mga backend at server, lumikha ng mga ACL, baguhin ang pagruruta ng kahilingan, baguhin ang mga binding ng handler sa IP;
  • Idinagdag ang direktiba ng nbthread, na nagbibigay-daan sa iyong i-configure ang bilang ng mga thread na ginamit sa HAProxy upang i-optimize ang pagganap sa mga multi-core na CPU. Bilang default, pinipili ang bilang ng mga thread ng manggagawa depende sa mga CPU core na available sa kasalukuyang environment, at sa mga cloud environment ang default ay isang thread. Upang magtakda ng matapang na limitasyon, ang mga opsyon sa pagpupulong na MAX_THREADS at MAX_PROCS ay idinagdag, na nililimitahan ang pinakamataas na limitasyon sa bilang ng mga thread at proseso;
  • Ang paggamit ng direktiba ng bind para sa mga humahawak ng pagbubuklod sa mga address ng network ay pinasimple. Kapag nagse-set up, hindi na kailangang tukuyin ang mga parameter ng proseso - bilang default, ang mga koneksyon ay ibabahagi sa mga thread depende sa bilang ng mga aktibong koneksyon.
  • Ang pag-set up ng mga log kapag tumatakbo sa mga nakahiwalay na lalagyan ay pinasimple - ang log ay maaari na ngayong ipadala sa stdout at stderr, gayundin sa anumang umiiral na file descriptor (halimbawa, "log fd@1 local0");
  • Ang suporta para sa HTX (Native HTTP Representation) ay pinagana bilang default, na nagbibigay-daan para sa pagbabalanse kapag gumagamit ng mga advanced na feature gaya ng end-to-end HTTP/2, Layer 7 Retries at gRPC. Hindi pinapalitan ng HTX ang mga header sa lugar, ngunit binabawasan ang operasyon ng pagbabago sa pag-alis at pagdaragdag ng bagong header sa dulo ng listahan, na nagbibigay-daan sa iyong manipulahin ang anumang pinahabang variant ng HTTP protocol, na pinapanatili ang orihinal na semantika ng mga header at nagbibigay-daan sa iyo upang makamit ang mas mataas na pagganap kapag nagsasalin ng HTTP/2 sa HTTP/1.1 at vice versa;
  • Nagdagdag ng opisyal na suporta para sa End-to-End HTTP/2 mode (pagproseso ng lahat ng yugto sa HTTP/2, kabilang ang mga tawag sa backend, at hindi lamang pakikipag-ugnayan sa pagitan ng proxy at ng kliyente);
  • Ang buong suporta para sa bidirectional proxying ng gRPC protocol ay ipinatupad na may kakayahang mag-parse ng mga stream ng gRPC, nagha-highlight ng mga indibidwal na mensahe, na sumasalamin sa trapiko ng gRPC sa log at nag-filter ng mga mensahe gamit ang mga ACL. Pinapayagan ka ng gRPC na ayusin ang gawain ng mga microservice sa iba't ibang mga programming language na nakikipag-ugnayan sa isa't isa gamit ang isang unibersal na API. Ang komunikasyon sa network sa gRPC ay ipinapatupad sa itaas ng HTTP/2 protocol at batay sa paggamit ng Protocol Buffers para sa serialization ng data.
  • Nagdagdag ng suporta para sa mode na "Layer 7 Retries", na nagbibigay-daan sa iyong magpadala ng mga paulit-ulit na kahilingan sa HTTP sa kaganapan ng mga pagkabigo ng software na hindi nauugnay sa mga problema sa pagtatatag ng koneksyon sa network (halimbawa, kung walang tugon o walang laman na tugon sa isang POST kahilingan). Upang i-disable ang mode, ang flag na "disable-l7-retry" ay idinagdag sa opsyon na "http-request", at ang opsyon na "retry-on" ay idinagdag para sa fine-tuning sa mga default, listen at backend na mga seksyon. Ang mga sumusunod na palatandaan ay magagamit para sa muling pagpapadala: lahat-na-retry na-error, wala, conn-failure, walang laman na-tugon, junk-response, response-timeout, 0rtt-rejected, pati na rin ang nagbubuklod upang ibalik ang mga status code (404, atbp.) ;
  • Ang isang bagong manager ng proseso ay ipinatupad, na nagbibigay-daan sa iyong i-configure ang pagtawag sa mga panlabas na executable na file na may mga humahawak para sa HAProxy.
    Halimbawa, ang Data Plan API (/usr/sbin/dataplaneapi), gayundin ang iba't ibang Offload stream processing engine, ay ipinatupad sa anyo ng naturang external na tagapangasiwa;

  • Naidagdag ang mga binding para sa .NET Core, Go, Lua at Python para sa pagbuo ng mga extension ng SPOE (Stream Processing Offload Engine) at SPOP (Stream Processing Offload Protocol). Noong nakaraan, ang pagpapaunlad ng extension ay sinusuportahan lamang sa C;
  • Nagdagdag ng panlabas na spoa-mirror handler (/usr/sbin/spoa-mirror) para sa pag-mirror ng mga kahilingan sa isang hiwalay na server (halimbawa, para sa pagkopya ng bahagi ng produksyon ng trapiko para sa pagsubok ng isang eksperimentong kapaligiran sa ilalim ng tunay na pagkarga);
  • Ipinasa ni HAProxy Kubernetes Ingress Controller upang matiyak ang pagsasama sa platform ng Kubernetes;
  • Nagdagdag ng built-in na suporta para sa pag-export ng mga istatistika sa monitoring system Promiteyus;
  • Ang Peers Protocol, na ginamit upang makipagpalitan ng impormasyon sa iba pang mga node na tumatakbo sa HAProxy, ay pinalawig. Kabilang ang karagdagang suporta para sa Heartbeat at naka-encrypt na paghahatid ng data;
  • Ang parameter na "sample" ay idinagdag sa "log" na direktiba, na nagbibigay-daan sa iyong itapon ang isang bahagi lamang ng mga kahilingan sa log, halimbawa 1 sa 10, upang bumuo ng isang analytical sample;
  • Idinagdag ang awtomatikong mode ng pag-profile (direktiba sa profile.tasks, na maaaring awtomatikong i-on at i-off ang mga value). Ang awtomatikong pag-profile ay pinagana kung ang average na latency ay lumampas sa 1000 ms. Upang tingnan ang data ng pag-profile, ang command na "show profiling" ay idinagdag sa Runtime API o posibleng i-reset ang mga istatistika sa log;
  • Nagdagdag ng suporta para sa pag-access sa mga backend server gamit ang SOCKS4 protocol;
  • Nagdagdag ng end-to-end na suporta para sa mekanismo para sa mabilis na pagbubukas ng mga koneksyon sa TCP (TFO - TCP Fast Open, RFC 7413), na nagbibigay-daan sa iyong bawasan ang bilang ng mga hakbang sa pag-setup ng koneksyon sa pamamagitan ng pagsasama-sama ng una sa isang kahilingan at ang pangalawang hakbang ng ang klasikong 3-step na proseso ng negosasyon sa koneksyon at ginagawang posible na magpadala ng data sa paunang yugto ng pagtatatag ng koneksyon;
  • Idinagdag ang mga bagong pagkilos:
    • "http-request replace-uri" upang palitan ang URL gamit ang isang regular na expression;
    • "tcp-request content do-resolve" at "http-request do-resolve" para sa paglutas ng hostname;
    • β€œtcp-request content set-dst” at β€œtcp-request content set-dst-port” para palitan ang target na IP address at port.
  • Nagdagdag ng mga bagong module ng conversion:
    • aes_gcm_dev para sa pag-decrypting ng mga stream gamit ang AES128-GCM, AES192-GCM at AES256-GCM algorithm;
    • protobuf upang kunin ang mga field mula sa mga mensahe ng Protocol Buffers;
    • ungrpc upang kunin ang mga patlang mula sa mga mensahe ng gRPC.

    Pinagmulan: opennet.ru

Magdagdag ng komento