[ON] Выпуск HTTP/TCP-балансировщика HAProxy 2.0

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Ответить
Аватара пользователя
rssbot
Бот
Сообщения: 6002
ОС: gnu/linux

[ON] Выпуск HTTP/TCP-балансировщика HAProxy 2.0

Сообщение rssbot »

Опубликован релиз балансировщика нагрузки 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 c возможностью разбора потоков 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.


    Источник: https://www.opennet.ru/opennews/art.shtml?num=50904
    (opennet.ru, основная лента)
Последний раз редактировалось rssbot 20.06.2019 20:06, всего редактировалось 1 раз.
Причина: Updated upstream
Спасибо сказали:
Ответить