Se introdujo el servidor HTTP hinsightd usando el subsistema Linux io_uring

Se ha publicado un servidor HTTP hinsightd compacto, que destaca por utilizar la interfaz de E/S asíncrona io_uring proporcionada en el kernel de Linux. El servidor es compatible con el protocolo HTTP/1.1 y está diseñado para un bajo consumo de recursos al tiempo que proporciona una funcionalidad muy necesaria. Por ejemplo, hinsightd admite TLS, proxy inverso (rproxy), almacenamiento en caché de contenido generado dinámicamente en el sistema de archivos local, compresión de datos sobre la marcha, reinicio sin conexión, conexión de controladores de solicitudes dinámicas mediante mecanismos FastCGI y CGI. El código del proyecto está escrito en lenguaje C y se distribuye bajo la licencia BSD.

Para procesar la configuración, escribir adiciones y crear controladores de solicitudes, se proporciona la capacidad de usar el lenguaje Lua, mientras que dichos controladores se pueden definir directamente en el archivo de configuración del servidor. En forma de complementos, se implementan funciones como cambiar el formato de registro, vincular registros individuales a hosts virtuales, definir una estrategia de balanceo de carga, autenticación HTTP, reescritura de URL y trabajo programado programado (por ejemplo, actualización de certificados Let's Encrypt). forma de complementos.

El servidor viene con una biblioteca para integrar la funcionalidad de hinsightd en sus aplicaciones. Hinsightd también incluye una funcionalidad integrada para enviar solicitudes HTTP desde la línea de comandos, por ejemplo, para cargar una página, puede ejecutar "hinsightd -d URL". El servidor es muy compacto y requiere alrededor de 200 KB compilados (100 KB ejecutables y 100 KB de biblioteca compartida). Las dependencias externas incluyen solo libc, lua, liburing y zlib y, opcionalmente, openssl/libressl y ffcall.

Los planes para un mayor desarrollo incluyen la capacidad de almacenar archivos comprimidos en la memoria caché, aislamiento de espacio aislado basado en el filtrado de llamadas del sistema y el uso de espacios de nombres, administración de ancho de banda (conformación de tráfico), subprocesos múltiples, manejo mejorado de errores y definición de hosts virtuales basados ​​en máscaras.

Los resultados de las pruebas de rendimiento sintéticas (sin optimizaciones en la configuración tal cual) realizadas por la utilidad 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

Añadir un comentario