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

После года разработки состоялся релиз балансировщика нагрузки HAProxy 1.8, позволяющего распределять HTTP-трафик и произвольные TCP-запросы между группой серверов, учитывая множество факторов (например, проверяет доступность серверов, оценивает уровень нагрузки, имеет средства противостояния DDoS) и проводя первичную фильтрацию данных (например, можно разбирать HTTP-заголовки, отфильтровывать передачу некорректных параметров запроса, блокировать подстановку SQL и XSS, подключать агенты обработки контента). HAProxy также может применяться для координации взаимодействия компонентов в системах на базе архитектуры микросервисов. Код проекта написан на языке Си и поставляется под лицензией GPLv2. Проект используется на многих крупных сайтах, включая Twitter и GitHub.

Ключевые особенности выпуска:

  • Поддержка работы в многопоточном режиме в дополнение многопроцессной модели обработки соединений;
  • Поддержка HTTP/2 и автоматическое определение возможности взаимодействия по данному протоколу;
  • Кэш мелких объектов, позволяющий кэшировать на балансировщике тривиальные типовые запросы, такие как файлы favicon.ico и main.css;
  • Поддержка вывода статистики «show stat» и «show info» в формате JSON в дополнение к CSV;
  • Реализация директивы «server-template», позволяющей определить шаблоны настроек хостов. При помощи данной возможности можно устанавливать на бэкенды типовую конфигурацию и активировать серверы на лету через CLI или DNS (в записи SRV) без перезапуска;
  • Динамические Cookie теперь могут генерироваться на лету на основе адреса сервера;
  • В SPOE (Stream Processing Offload Engine) добавлена возможность передачи запросов через существующее соединение в асинхронном режиме, не дожидаясь окончания передачи прошлого запроса (pipelined);
  • Поддержка перезапуска без закрытия сетевых сокетов и обрыва установленных соединений (применяется SO_REUSEPORT);
  • Поддержка библиотеки регулярных выражений PCRE2;
  • Поддержка движков шифрования OpenSSL, работающих в асинхронном режиме;
  • Автономный резолвер DNS и возможность определения параметров работы серверов (адрес, порт, вес) через SRV-записи в DNS;
  • Поддержка TLS 1.3 с Early-Data (AKA 0-RTT) на обоих концах соединения;
  • Поддержка сборки для работы в виде сервиса, управляемого systemd.

© OpenNet