HAProxy 2.0 HTTP/TCP теңгерімінің шығарылымы

жарияланды жүктеме балансын босату HA прокси 2.0, ол көптеген факторларды (мысалы, серверлердің қолжетімділігін тексереді, жүктеме деңгейін бағалайды, DDoS қарсы шаралары бар) ескере отырып, серверлер тобы арасында HTTP трафигі мен ерікті TCP сұрауларын таратуға мүмкіндік береді және бастапқы деректерді сүзуді жүзеге асырады (мысалы, , HTTP тақырыптарын талдауға, жіберудің қате сұрау параметрлерін сүзуге, SQL және XSS ауыстыруды блоктауға, мазмұнды өңдеу агенттерін қосуға болады). HAProxy де мүмкін қолдану микросервис архитектурасына негізделген жүйелердегі компоненттердің өзара әрекеттесуін үйлестіру. Жоба коды Си тілінде жазылған және жеткізілген 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 құрастыру опциялары қосылды, олар ағындар мен процестер санының жоғарғы шегін шектейді;
  • Өңдеушілерді желі мекенжайларына байланыстыру үшін 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 жүйесіндегі барлық кезеңдерді өңдеу, соның ішінде проксидің клиентпен әрекеттесуі ғана емес, серверге қоңыраулар);
  • gRPC екі бағытты проксиге толық қолдау көрсету gRPC ағындарын талдау, жеке хабарларды шығару, журналдағы gRPC трафигін көрсету және ACL арқылы хабарларды сүзу мүмкіндігімен жүзеге асырылды. gRPC әмбебап API көмегімен бір-бірімен әрекеттесетін әртүрлі бағдарламалау тілдерінде микросервистердің жұмысын ұйымдастыруға мүмкіндік береді. gRPC желісіндегі желілік байланыс HTTP/2 протоколының жоғарғы жағында жүзеге асырылады және деректерді сериялау үшін протокол буферлерін пайдалануға негізделген.
  • Желі қосылымын орнату мәселелерімен байланысты емес бағдарламалық құрал ақаулары кезінде (мысалы, POST-қа жауап болмаса немесе бос жауап болмаса) қайталанатын HTTP сұрауларын жіберуге мүмкіндік беретін «7-деңгейді қайталау» режиміне қолдау қосылды. сұрау). Режимді өшіру үшін «http-сұрау» опциясына «disable-l7-retry» жалаушасы қосылды, ал «қайталау-қосу» опциясы дәл баптау үшін әдепкі, тыңдау және сервер бөлімдерінде пайда болды. Келесі қайталау жалаушалары қол жетімді: барлығын қайталауға болатын қателер, ешқайсысы, қосылым сәтсіздігі, бос жауап, қалаусыз жауап, жауап күту уақыты, 0rtt-қабылданбаған және қайтарылған күй кодтарына байланыстыру (404, т.б.);
  • HAProxy үшін өңдеушілері бар сыртқы орындалатын файлдардың шақыруын конфигурациялауға мүмкіндік беретін жаңа процесс менеджері енгізілді.
    Мысалы, мұндай сыртқы өңдеуші түрінде Data Plan API (/usr/sbin/dataplaneapi), сондай-ақ әртүрлі түсіру ағынын өңдеу қозғалтқыштары жүзеге асырылады;

  • SPOE (Stream Processing Offload Engine) және SPOP (Stream Processing Offload Protocol) кеңейтімдерін әзірлеу үшін .NET Core, Go, Lua және Python үшін байланыстырулар қосылды. Бұрын тек C кеңейтімін әзірлеуге қолдау көрсетілді;
  • Сұраныстарды бөлек серверге көшіру үшін сыртқы споа айна өңдегіші (/usr/sbin/spoa-mirror) қосылды (мысалы, нақты жүктемеде эксперименттік ортаны сынау үшін жұмыс трафикінің бір бөлігін көшіру үшін);
  • Жіберген HAProxy Kubernetes кіру контроллері Kubernetes платформасымен интеграцияны қамтамасыз ету;
  • Мониторинг жүйесіне статистиканы экспорттау үшін кірістірілген қолдау қосылды Прометей;
  • HAProxy көмегімен басқа түйіндермен ақпарат алмасу үшін пайдаланылатын Peers протоколы кеңейтілді. Соның ішінде Heartbeat және шифрланған деректерді тасымалдау үшін қосымша қолдау;
  • «Үлгі» параметрі «лог» директивасына қосылды, бұл сұраулардың тек бір бөлігін журналға тастауға мүмкіндік береді, мысалы, аналитикалық үлгіні қалыптастыру үшін 1-нан 10;
  • Автоматты профильдеу режимі қосылды (мәндерді автоматты түрде қосуға және өшіруге болатын profiling.tasks директивасы). Орташа кешігу мәні 1000 мс асатын болса, автоматты профильдеу қосылады. Профильдеу деректерін көру үшін Runtime API интерфейсіне «профильді көрсету» пәрмені қосылды немесе журналға статистиканы қалпына келтіруге болады;
  • SOCKS4 хаттамасы арқылы серверлерге қол жеткізуге қолдау қосылды;
  • TCP Fast Open (TFO - TCP Fast Open, RFC 7413) үшін қосылған терминал (сұраныс өңдеу жолында, серверді қамтитын) қосылымды біріктіру арқылы қосылымды орнату қадамдарының санын азайтуға мүмкіндік береді. біріншісі бір сұрауға және классикалық 3-қадамды қосылым келіссөз процесінің екінші қадамдары және қосылымды орнатудың бастапқы кезеңінде деректерді жіберуге мүмкіндік береді;
  • Жаңа әрекеттер қосылды:
    • Тұрақты өрнек арқылы URL мекенжайын ауыстыру үшін "http-request replace-uri";
    • хост атауын шешу үшін "tcp-сұраныс мазмұнын шешу" және "http-сұрауды орындау";
    • Мақсатты IP мекенжайы мен портты ауыстыру үшін "tcp-сұраныс мазмұны жиынтығы-dst" және "tcp-сұрау мазмұны жиынтығы-dst-порт".
  • Жаңа түрлендіру модульдері қосылды:
    • aes_gcm_dev AES128-GCM, AES192-GCM және AES256-GCM алгоритмдерін пайдаланып ағындардың шифрын шешуге арналған;
    • Protocol Buffers хабарламаларынан өрістерді шығару үшін протобуф;
    • gRPC хабарларынан өрістерді шығару үшін ungrpc.

    Ақпарат көзі: opennet.ru

пікір қалдыру