HTTP/TCP тэнцвэржүүлэгч HAProxy 2.0 хувилбар

Нийтэлсэн ачаалал тэнцвэржүүлэгчийг суллах HA прокси 2.0, энэ нь олон хүчин зүйлийг харгалзан (жишээлбэл, серверүүдийн бэлэн байдлыг шалгах, ачааллын түвшинг үнэлэх, DDoS-ийн эсрэг арга хэмжээ авах) болон үндсэн өгөгдлийг шүүх ( жишээлбэл, та HTTP толгойг задлан шинжлэх, дамжуулалтын буруу асуулгын параметрүүдийг шүүх, SQL болон XSS орлуулалтыг хаах, контент боловсруулах агентуудыг холбох боломжтой). HAProxy бас болно өргөдөл гаргах микро үйлчилгээний архитектур дээр суурилсан систем дэх бүрэлдэхүүн хэсгүүдийн харилцан үйлчлэлийг зохицуулах. Төслийн кодыг C хэл дээр бичсэн ба нийлүүлсэн GPLv2 дагуу лицензтэй. Төслийг Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter, Vimeo зэрэг олон томоохон сайтуудад ашигладаг.

Гол хувилбарын онцлогууд:

  • Шинэ API танилцуулсан Мэдээллийн төлөвлөгөө, энэ нь танд REST Web API-ээр дамжуулан HAProxy тохиргоог шууд удирдах боломжийг олгодог. Үүнд, та арын хэсэг болон серверүүдийг динамикаар нэмэх, устгах, ACL үүсгэх, хүсэлтийн чиглүүлэлтийн өөрчлөлт, зохицуулагчийн холболтыг IP болгон өөрчлөх;
  • Олон цөмт CPU-ийн гүйцэтгэлийг оновчтой болгохын тулд HAProxy-д ашигласан хэлхээний тоог тохируулах боломжийг олгодог nbthread удирдамжийг нэмсэн. Өгөгдмөл байдлаар, одоогийн орчинд байгаа CPU цөмөөс хамааран ажилчны хэлхээний тоог сонгосон бөгөөд үүлэн орчинд өгөгдмөл нь нэг хэлхээ юм. Хатуу хязгаарыг тогтоохын тулд MAX_THREADS ба MAX_PROCS угсралтын сонголтуудыг нэмж, урсгал болон процессын дээд хязгаарыг хязгаарласан;
  • Сүлжээний хаяг руу холбох зохицуулагчдад зориулсан bind зааврыг ашиглах нь хялбаршуулсан. Тохиргоо хийхдээ процессын параметрүүдийг тодорхойлох шаардлагагүй болсон - анхдагчаар холболтууд идэвхтэй холболтын тооноос хамааран урсгалуудын хооронд хуваарилагдах болно.
  • Тусгаарлагдсан саванд ажиллаж байх үед бүртгэлийг тохируулах ажлыг хялбаршуулсан - логыг одоо stdout болон stderr болон одоо байгаа файлын тодорхойлогч руу илгээх боломжтой (жишээлбэл, "log fd@1 local0");
  • HTX (Native HTTP Representation)-ийн дэмжлэг нь анхдагчаар идэвхжсэн бөгөөд төгсгөл хоорондын HTTP/2, давхарга 7 дахин оролдлого, gRPC зэрэг дэвшилтэт функцуудыг ашиглах үед тэнцвэржүүлэх боломжийг олгодог. HTX нь толгойн хэсгийг орлуулахгүй, харин жагсаалтын төгсгөлд шинэ гарчгийг арилгах, нэмэхэд чиглэсэн өөрчлөлтийн үйлдлийг багасгадаг бөгөөд энэ нь HTTP протоколын өргөтгөсөн хувилбаруудыг өөрчлөх, гарчгийн анхны семантикийг хадгалах боломжийг олгодог. HTTP/2-г HTTP/1.1 болон эсрэгээр орчуулах үед илүү өндөр гүйцэтгэлд хүрэх;
  • End-to-End HTTP/2 горимд албан ёсны дэмжлэг нэмсэн (HTTP/2 дахь бүх үе шатыг боловсруулах, үүнд зөвхөн прокси болон үйлчлүүлэгчийн хоорондын харилцан үйлчлэлээс гадна backend руу дуудлага хийх);
  • gRPC протоколын хоёр чиглэлтэй прокси хийх бүрэн дэмжлэг нь gRPC урсгалыг задлан шинжилж, тусдаа мессежүүдийг тодруулах, логонд gRPC урсгалыг тусгах, ACL ашиглан мессежийг шүүх боломжтой болсон. gRPC нь бүх нийтийн API ашиглан өөр хоорондоо харилцан үйлчилдэг янз бүрийн програмчлалын хэл дээр микро үйлчилгээний ажлыг зохион байгуулах боломжийг олгодог. gRPC дахь сүлжээний холбоо нь HTTP/2 протоколын дээд талд хэрэгждэг бөгөөд өгөгдлийг цуваа болгоход Протоколын буфер ашиглахад суурилдаг.
  • "Давхарга 7 дахин оролдох" горимын дэмжлэгийг нэмсэн бөгөөд энэ нь сүлжээний холболт үүсгэхтэй холбоотой асуудалтай холбоогүй програм хангамжийн алдаа гарсан тохиолдолд (жишээлбэл, ямар ч хариу байхгүй эсвэл хоосон хариу ирээгүй тохиолдолд) дахин дахин HTTP хүсэлт илгээх боломжийг олгодог. POST хүсэлт). Уг горимыг идэвхгүй болгохын тулд "http-request" сонголт дээр "disable-l7-retry" гэсэн тэмдэглэгээг нэмж, өгөгдмөл, сонсох, арын хэсэгт нарийн тааруулахын тулд "дахин оролдох" сонголтыг нэмсэн. Дахин илгээхэд дараах шинж тэмдгүүдийг ашиглах боломжтой: бүгд дахин оролдох боломжтой-алдаа, байхгүй, холболт бүтэлгүйтсэн, хоосон-хариулт, хэрэггүй-хариу, хариу өгөх хугацаа, 0rtt-татгалзсан, түүнчлэн буцаах төлөвийн код (404 гэх мэт) ;
  • HAProxy-д зориулсан боловсруулагчтай гадаад гүйцэтгэгдэх файлуудыг дуудах тохиргоог хийх шинэ процессын менежер хэрэгжсэн.
    Жишээлбэл, Data Plan API (/usr/sbin/dataplaneapi), түүнчлэн янз бүрийн Offload урсгал боловсруулах хөдөлгүүрүүд нь ийм гадаад зохицуулагч хэлбэрээр хэрэгждэг;

  • SPOE (Stream Processing Offload Engine) болон SPOP (Stream Processing Offload Protocol) өргөтгөлүүдийг хөгжүүлэхэд зориулж .NET Core, Go, Lua болон Python-д холбох холбоосууд нэмэгдсэн. Өмнө нь өргөтгөлийн хөгжүүлэлтийг зөвхөн C хэл дээр дэмждэг байсан;
  • Тусдаа серверт хүсэлтийг толин тусгах (жишээ нь, туршилтын орчныг бодит ачааллын дор турших зорилгоор үйлдвэрлэлийн хөдөлгөөний нэг хэсгийг хуулах) гадаад spoa-толин тусгал зохицуулагч (/usr/sbin/spoa-mirror) нэмэгдсэн;
  • Оруулсан HAProxy Kubernetes Ingress Controller Kubernetes платформтой нэгдмэл байдлыг хангах;
  • Хяналтын системд статистик мэдээллийг экспортлох нэмэлт дэмжлэгийг нэмсэн Prometheus;
  • HAProxy-г ажиллуулж байгаа бусад зангилаатай мэдээлэл солилцоход ашигладаг Peers протоколыг өргөтгөсөн. Зүрхний цохилт болон шифрлэгдсэн өгөгдөл дамжуулах нэмэлт дэмжлэг орно;
  • "Түүвэр" параметрийг "лог" удирдамжид нэмсэн бөгөөд энэ нь танд хүсэлтийн зөвхөн нэг хэсгийг, жишээ нь 1-аас 10-ийг нь лог руу оруулах, аналитик түүврийг бүрдүүлэх боломжийг олгодог;
  • Автомат профайл үүсгэх горимыг нэмсэн (profiling.tasks заавар, утгыг автоматаар асааж, унтрааж болно). Дундаж хоцролтын хугацаа 1000 мс-ээс хэтэрсэн тохиолдолд автомат профайлыг идэвхжүүлнэ. Профайл үүсгэх өгөгдлийг үзэхийн тулд Runtime API-д "профайлыг харуулах" команд нэмэгдсэн эсвэл бүртгэлд статистикийг дахин тохируулах боломжтой;
  • SOCKS4 протоколыг ашиглан арын серверт хандах дэмжлэг нэмэгдсэн;
  • TCP холболтыг хурдан нээх механизмын төгсгөлийн дэмжлэгийг нэмсэн (TFO - TCP Fast Open, RFC 7413) нь эхнийх нь нэг хүсэлт, хоёр дахь алхамыг нэгтгэснээр холболтын тохиргооны алхмуудын тоог багасгах боломжийг олгодог. сонгодог 3 үе шаттай холболтын хэлэлцээрийн процесс бөгөөд холболт үүсгэх эхний шатанд өгөгдөл илгээх боломжийг олгодог;
  • Шинэ үйлдлүүд нэмэгдсэн:
    • "http-request replace-uri" URL-г ердийн илэрхийлэл ашиглан солих;
    • "tcp-request content do-resolve" болон "http-request do-resolve" хостын нэрийг шийдвэрлэх;
    • Зорилтот IP хаяг болон портыг орлуулахын тулд "tcp-request content set-dst" болон "tcp-request content set-dst-port".
  • Шинэ хувиргах модулиудыг нэмсэн:
    • AES128-GCM, AES192-GCM болон AES256-GCM алгоритмуудыг ашиглан урсгалын кодыг тайлахад aes_gcm_dev;
    • Protocol Buffers мессежүүдээс талбаруудыг задлах protobuf;
    • gRPC мессежүүдээс талбаруудыг задлахын тулд ungrpc.

    Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх