HTTP/TCP баланстоочу HAProxy 2.0 чыгарылышы

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

Негизги чыгаруу өзгөчөлүктөрү:

  • Жаңы API киргизилди Маалыматтар планы, бул сизге REST Web API аркылуу HAProxy жөндөөлөрүн башкарууга мүмкүндүк берет. Анын ичинде, сиз динамикалык түрдө серверлерди жана серверлерди кошуп жана алып салсаңыз, ACL түзө аласыз, суроо-талаптын маршрутун өзгөртө аласыз, иштеткичтердин байланыштарын IPге өзгөртө аласыз;
  • Көп ядролуу процессорлордо иштөөнү оптималдаштыруу үчүн HAProxyде колдонулган жиптердин санын конфигурациялоого мүмкүндүк берген nbthread директивасы кошулду. Демейки боюнча, жумушчу жиптердин саны учурдагы чөйрөдө жеткиликтүү CPU өзөктөрүнө жараша тандалат, ал эми булут чөйрөлөрүндө демейки бир жип болуп саналат. Катуу чектерди коюу үчүн, жиптердин жана процесстердин санынын жогорку чегин чектөөчү MAX_THREADS жана MAX_PROCS монтаждык опциялары кошулду;
  • Иштетүүчүлөрдү тармак даректерине байланыштыруу үчүн байланыш директивасын колдонуу жөнөкөйлөштүрүлдү. Орнотуу учурунда процесстин параметрлерин аныктоонун кереги жок - демейки боюнча, байланыштар жиптер арасында активдүү байланыштардын санына жараша бөлүштүрүлөт.
  • Бөлүнгөн контейнерлерде иштөөдө журналдарды орнотуу жөнөкөйлөштүрүлдү - журналды эми stdout жана stderr, ошондой эле учурдагы каалаган файл дескрипторуна жөнөтсө болот (мисалы, “log fd@1 local0”);
  • HTX (Native HTTP Representation) колдоосу демейки боюнча иштетилип, аягына чейин HTTP/2, Layer 7 Retries жана gRPC сыяктуу өркүндөтүлгөн функцияларды колдонууда балансташтырууга мүмкүндүк берет. HTX аталыштарды ордунда алмаштырбайт, бирок өзгөртүү операциясын тизменин аягына алып салууга жана жаңы аталышты кошууга азайтат, бул HTTP протоколунун бардык кеңейтилген варианттарын башкарууга, баш аттардын баштапкы семантикасын сактоого жана сизге мүмкүндүк берет. HTTP/2ден HTTP/1.1ге жана тескерисинче которууда жогорку көрсөткүчтөргө жетишүү үчүн;
  • End-to-End HTTP/2 режимине расмий колдоо кошулду (HTTP/2деги бардык этаптарды иштетүү, анын ичинде прокси менен кардардын ортосундагы өз ара аракеттенүү эмес, серверге чалуулар);
  • gRPC протоколунун эки багыттуу проксисин толук колдоо gRPC агымдарын талдоо, жеке билдирүүлөрдү бөлүп көрсөтүү, журналдагы gRPC трафигин чагылдыруу жана ACL аркылуу билдирүүлөрдү чыпкалоо мүмкүнчүлүгү менен ишке ашырылган. gRPC универсалдуу API аркылуу бири-бири менен өз ара аракеттенген ар кандай программалоо тилдеринде микросервистердин ишин уюштурууга мүмкүндүк берет. gRPCдеги тармактык байланыш HTTP/2 протоколунун үстүндө ишке ашырылат жана маалыматтарды сериялаштыруу үчүн Протокол буферлерин колдонууга негизделген.
  • Тармактык туташууну орнотуудагы көйгөйлөр менен байланышпаган программалык камсыздоо бузулган учурда (мисалы, жооп жок же бош жооп жок болсо) кайталанган HTTP суроо-талаптарын жөнөтүүгө мүмкүндүк берген "Layer 7 Retries" режимине колдоо кошулду. 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 үчүн байланыштар кошулду. Буга чейин кеңейтүүнү иштеп чыгуу С тилинде гана колдоого алынган;
  • Сурамдарды өзүнчө серверге чагылдыруу үчүн (мисалы, реалдуу жүктүн астында эксперименталдык чөйрөнү сыноо үчүн өндүрүш трафигинин бир бөлүгүн көчүрүү үчүн) тышкы spoa-күзгү иштеткич (/usr/sbin/spoa-mirror) кошулду;
  • киргизилген HAProxy Kubernetes Ingress Controller Kubernetes платформасы менен интеграцияны камсыз кылуу;
  • Мониторинг системасына статистиканы экспорттоо үчүн орнотулган колдоо кошулду Prometheus;
  • HAProxy иштеткен башка түйүндөр менен маалымат алмашуу үчүн колдонулган Peers протоколу узартылды. Анын ичинде Heartbeat жана шифрленген маалыматтарды берүү үчүн кошумча колдоо;
  • “Журнал” директивасына “үлгү” параметри кошулду, ал сурамдардын бир бөлүгүн гана журналга таштоого мүмкүндүк берет, мисалы, аналитикалык үлгүнү түзүү үчүн 1дон 10;
  • Автоматтык профилдөө режими кошулду (profiling.tasks директивасы, маанилерди авто, күйгүзүп жана өчүрө алат). Орточо күтүү 1000 мс ашса, автоматтык профилдөө иштетилет. Профильдөө берилиштерин көрүү үчүн Runtime API'ге "профильди көрсөтүү" буйругу кошулду же журналга статистиканы кайра коюуга болот;
  • SOCKS4 протоколун колдонуу менен серверлердин серверлерине кирүү үчүн кошумча колдоо;
  • TCP туташууларын тез ачуу механизмине аягына чейин колдоо кошулду (TFO - TCP Fast Open, RFC 7413), бул биринчисин бир суроого жана экинчи кадамды бириктирүү аркылуу туташууну орнотуу кадамдарынын санын кыскартууга мүмкүндүк берет. классикалык 3 баскычтуу туташуу сүйлөшүү процесси жана байланышты түзүүнүн баштапкы этабында маалыматтарды жөнөтүүгө мүмкүндүк берет;
  • Жаңы аракеттер кошулду:
    • "http-request replace-uri" URL дарегин кадимки туюнтманы колдонуу менен алмаштыруу үчүн;
    • Хост атын чечүү үчүн "tcp-суроо-талаптын мазмунун чечүү" жана "http-суроо-талаптарды чечүү";
    • Максаттуу IP даректи жана портту алмаштыруу үчүн "tcp-суроо-талаптын мазмуну топтому-dst" жана "tcp-суроо мазмунунун топтому-dst-порт".
  • Жаңы конверсия модулдары кошулду:
    • aes_gcm_dev AES128-GCM, AES192-GCM жана AES256-GCM алгоритмдерин колдонуу менен агымдарды чечмелөө үчүн;
    • protobuf Protocol Buffers билдирүүлөрүнөн талааларды чыгаруу үчүн;
    • gRPC билдирүүлөрүнөн талааларды алуу үчүн ungrpc.

    Source: opennet.ru

Комментарий кошуу