Se ha publicado un servidor HTTP compacto llamado hinsightd, notable por el uso de la interfaz de entrada/salida asíncrona io_uring, que se proporciona en el núcleo de Linux. El servidor es compatible con el protocolo HTTP/1.1 y está diseñado para consumir pocos recursos mientras ofrece funcionalidad demandada. Por ejemplo, hinsightd soporta TLS, proxy inverso (rproxy), caché de contenido generado dinámicamente en el sistema de archivos local, compresión en tiempo real de los datos entregados, reinicio sin interrumpir las conexiones establecidas, y la conexión de manejadores de solicitudes dinámicos a través de mecanismos FastCGI y CGI. El código del proyecto está escrito en C y se distribuye bajo la licencia BSD.
Para procesar la configuración, escribir complementos y crear manejadores de solicitudes, se proporciona la posibilidad de utilizar el lenguaje Lua, siendo que tales manejadores pueden definirse directamente en el archivo del servidor. En forma de complementos, se implementan características como el cambio del formato de registro en el log, la vinculación de logs individuales a hosts virtuales, la definición de estrategias de balanceo de carga, autenticación HTTP, reescritura de URLs y la ejecución de tareas programadas (por ejemplo, la actualización de certificados Let’s Encrypt).
Junto con el servidor se incluye una biblioteca para integrar las funciones de hinsightd en sus aplicaciones. Hinsightd también incluye funcionalidad integrada para enviar solicitudes HTTP desde la línea de comandos, por ejemplo, para cargar una página se puede ejecutar el comando "hinsightd -d URL". El servidor es muy compacto y ocupa alrededor de 200KB en forma compilada (100KB para el archivo ejecutable y 100KB para la biblioteca compartida). Las únicas dependencias externas son libc, lua, liburing y zlib, además de openssl/libressl y ffcall opcionalmente.
Entre los planes de desarrollo futuro se menciona la posibilidad de almacenar en caché archivos comprimidos, aislamiento mediante sandbox basado en filtrado de llamadas al sistema y uso de espacios de nombres, gestión de ancho de banda (traffic shaping), multihilo, mejor manejo de errores y definición de hosts virtuales basada en máscaras.
Los resultados de la prueba de rendimiento sintética (sin optimizaciones en la configuración tal como está) utilizando la herramienta ab al ejecutar 250 y 500 (entre paréntesis) solicitudes paralelas ("ab -k -c 250 -n 10000 http://localhost/"):
- hinsightd/0.9.17 — 63035.01 solicitudes por segundo (54984.63)
- lighttpd/1.4.67 — 53693.29 solicitudes por segundo (1613.59)
- Apache/2.4.54 — 37474.10 solicitudes por segundo (34305.55)
- Caddy/2.6.2 — 35412.02 solicitudes por segundo (33995.57)
- nginx/1.23.2 — 26673.64 solicitudes por segundo (26172.73)
Fuente: opennet.ru
