Представлений HTTP-сервер hinsightd, який використовує Linux-підсистему io_uring

Опубліковано компактний HTTP-сервер hinsightd, примітний використанням інтерфейсу асинхронного вводу/виводу io_uring, що надається в ядрі Linux. Сервер підтримує протокол 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

Додати коментар або відгук