Издаване на HTTP/TCP балансировчик HAProxy 2.0

Публикувано версия на балансировчика на натоварването HAProxy 2.0, който позволява разпределяне на HTTP трафик и произволни TCP заявки между група сървъри, като се вземат предвид множество фактори (например, проверява наличността на сървърите, оценява натовареността, предлага средства за защита срещу DDoS) и извършва предварителна филтрация на данни (например, може да анализира HTTP заглавия, да филтрира предаване на неправилни параметри на заявките, да блокира SQL инжекции и XSS, да свързва агенти за обработка на съдържание). HAProxy също може да се използва за координиране на взаимодействието на компонентите в системи, базирани на микросервизна архитектура. Кодът на проекта е написан на езика Си и се предоставя под лицензия GPLv2. Проектът се използва на много големи сайтове, включително Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter и Vimeo.

Ключови особености на изданието:

  • Представен е нов API Data Plan, позволяващ в движение управление на настройките на HAProxy чрез REST Web API. Включително е възможно динамично да се добавят и изтриват бекенди и сървъри, да се създават ACL, да се променя маршрутизацията на заявките, да се променят привързванията на обработчиците към IP;
  • Добавена е директива nbthread, позволяваща настройка на броя на нишките, използвани в HAProxy за оптимизация на работата на многоядрени CPU. По подразбиране броят на работните нишки се определя в зависимост от наличните ядра на CPU в текущата среда, а в облачни среди по подразбиране се задава една нишка. За задаване на стриктни лимити са добавени опции MAX_THREADS и MAX_PROCS, ограничаващи горния предел на броя на нишките и процесите;
  • Улеснено е използването на директивата bind за свързване на обработчици към мрежови адреси. При настройка вече не е задължително определянето на параметри на процеса — по подразбиране връзките ще се разпределят по нишки в зависимост от броя на активните връзки.
  • Улеснено е настройването на логовете при стартиране в изолирани контейнери — логът вече може да бъде насочен към stdout и stderr, както и към всеки съществуващ файлов дескриптор (например, «log fd@1 local0»);
  • По подразбиране е активирана поддръжка на HTX (Native HTTP Representation), която осигурява балансировка при прилагането на разширени функции като end-to-end 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 и се основава на използването на Protocol Buffers за сериализация на данни.
  • Добавена е поддръжка на режима «Layer 7 Retries», който позволява повторно изпращане на HTTP заявки в случай на софтуерни сблъсъци, несвързани с проблеми при установяване на мрежова връзка (например, при липса на отговор или празен отговор на POST заявка). За деактивиране на режима в опцията «http-request» е добавен флаг «disable-l7-retry», а за финна настройка в секциите defaults, listen и backend е налична опция «retry-on». Достъпни са следните знаци за повторно изпращане: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, както и свързване с върнатите кодове на състояние (404 и т.н.);
  • Реализиран е нов организатор на процеси (Process Manager), който позволява настройка на извикване на външни изпълними файлове с обработващи механизми за HAProxy.
    Например, под формата на такъв външен обработчик е реализиран API Data Plan ( /usr/sbin/dataplaneapi ), както и различни механизми за Offload обработка на потоци;
  • Добавени са биндинги за .NET Core, Go, Lua и Python за разработка на разширения SPOE (Stream Processing Offload Engine) и SPOP (Stream Processing Offload Protocol). Преди това се поддържаше разработка на разширения само на Си;
  • Добавен е външен обработчик spoa-mirror (\/usr\/sbin\/spoa-mirror) за зеркалене на заявки на отделен сървър (например, за копиране на част от работния трафик за тестване на експериментална среда под реално натоварване);
  • Представено HAProxy Kubernetes Ingress Controller за осигуряване на интеграция с платформата Kubernetes;
  • Добавена е вградена поддръжка за експортиране на статистика в системата за мониторинг Prometheus;
  • Разширен е протоколът Peers Protocol, използван за обмен на информация с други възли с HAProxy. Включително е добавена поддръжка за Heartbeat и криптирана предаване на данни;
  • В директивата „log“ е добавен параметър „sample“, позволяващ записване в лог само на част от заявките, например 1 от 10, за формиране на аналитична извадка;
  • Добавен е режим на автоматично профилиране (директива profiling.tasks, която може да приема стойности auto, on и off). Автоматичното профилиране се включва, когато средната стойност на закъснението превишава границата от 1000 мс. За преглед на данните от профилирането в Runtime API е добавена команда „show profiling“ или има възможност за нулиране на статистиката в лог;
  • Добавена е поддръжка за обращение към бэкенд-сървъри с използване на протокол SOCKS4;
  • Добавена е крайна (end-to-end, в своя път на обработка на заявка, обхващаща бэкенд) поддръжка на механизма за бързо отваряне на TCP-съединения (TFO — TCP Fast Open, RFC 7413), който позволява да се намали броят на стъпките за установяване на съединение чрез комбиниране в една заявка на първите и вторите стъпки от класическия 3-степенен процес на установяване на съединение и позволява изпращането на данни на начален етап на установяване на съединение;
  • Добавени са нови действия:
    • „http-request replace-uri“ за замяна на URL с използване на регулярни изрази;
    • „tcp-request content do-resolve“ и „http-request do-resolve“ за резолвиране на името на хоста;
    • „tcp-request content set-dst“ и „tcp-request content set-dst-port“ за подмяна на целевия IP-адрес и порт.
  • Добавени са нови модули за конвертиране:
    • aes_gcm_dev за декриптиране на потоци с използване на алгоритми AES128-GCM, AES192-GCM и AES256-GCM;
    • protobuf за извличане на полета от съобщения Protocol Buffers;
    • ungrpc за извличане на полета от съобщения gRPC.

    Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster