Представлен HTTP-сервер hinsightd, использующий Linux-подсистему io_uring

Опубликован компактный HTTP-сервер hinsightd, примечательный использованием предоствляемого в ядре Linux интерфейса асинхронного ввода/вывода io_uring. Сервер поддерживает протокол HTTP/1.1 и спроектирован для низкого потребления ресурсов с предоставлением при этом востребованной функциональности. Например, hinsightd поддерживает TLS, обратное проксирование (rproxy), кэширование динамически генерируемого контента в локальной ФС, сжатие на лету отдаваемых данных, перезапуск без разрыва установленных соединений, подключение динамических обработчиков запросов при помощи механизмов FastCGI и CGI. Код проекта написан на языке Си и распространяется под лицензией BSD.

Для обработки конфигурации, написания дополнений и создания обработчиков запросов предоставлена возможность использования языка Lua, при этом подобные обработчики могут определяться непосредственно в файле конфигурации сервера. В форме плагинов реализованы такие возможности как изменение формата записи в лог, привязка отдельных логов к виртуальным хостам, определение стратегии балансировки нагрузки, HTTP-аутентификация, перезапись URL и выполнение плановых работ по расписанию (например, обновление сертификатов Let’s Encrypt).

Вместе с сервером поставляется библиотека для интеграции функций hinsightd в свои приложения. Hinsightd также включает интегрированную функциональность для отправки HTTP-запросов из командной строки, например, для загрузки страницы можно выполнить команду «hinsightd -d URL». Сервер очень компактный и занимает в скомпилированном виде около 200КБ (100КБ исполняемый файл и 100КБ разделяемая библиотека). Среди внешних зависимостей только libc, lua, liburing и zlib, а также опционально openssl/libressl и ffcall.

Из планов по дальнейшему развитию упоминается возможность хранения в кэше сжатых файлов, sandbox-изоляция на базе фильтрации системных вызовов и использовании пространств имён, управление пропускной способностью (traffic shaping), многопоточность, улучшенная обработка ошибок и определение виртуальных хостов на основе масок.

Результаты синтетического тестирования производительности (без оптимизаций в конфигурации как есть) утилитой ab при запуске 250 и 500 (в скобках) параллельных запросов («ab -k -c 250 -n 10000 http://localhost/»):

  • hinsightd/0.9.17 — 63035.01 запросов в секунду (54984.63)
  • lighttpd/1.4.67 — 53693.29 запросов в секунду (1613.59)
  • Apache/2.4.54 — 37474.10 запросов в секунду (34305.55)
  • Caddy/2.6.2 — 35412.02 запросов в секунду (33995.57)
  • nginx/1.23.2 — 26673.64 запросов в секунду (26172.73)

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

Добавить комментарий