Introduction du serveur HTTP hinsightd utilisant le sous-système Linux io_uring

Un serveur HTTP hinsightd compact a été publié, notamment pour l'utilisation de l'interface d'E/S asynchrone io_uring fournie dans le noyau Linux. Le serveur prend en charge le protocole HTTP/1.1 et est conçu pour une faible consommation de ressources tout en offrant des fonctionnalités indispensables. Par exemple, hinsightd prend en charge TLS, le proxy inverse (rproxy), la mise en cache du contenu généré dynamiquement dans le système de fichiers local, la compression des données à la volée, le redémarrage sans connexion, la connexion des gestionnaires de requêtes dynamiques à l'aide des mécanismes FastCGI et CGI. Le code du projet est écrit en langage C et distribué sous licence BSD.

Pour traiter la configuration, écrire des ajouts et créer des gestionnaires de requêtes, la possibilité d'utiliser le langage Lua est fournie, tandis que ces gestionnaires peuvent être définis directement dans le fichier de configuration du serveur. Sous la forme de plug-ins, des fonctionnalités telles que la modification du format de journalisation, la liaison de journaux individuels à des hôtes virtuels, la définition d'une stratégie d'équilibrage de charge, l'authentification HTTP, la réécriture d'URL et les travaux planifiés (par exemple, la mise à jour des certificats Let's Encrypt) sont implémentées dans le forme de plugins.

Le serveur est livré avec une bibliothèque pour intégrer la fonctionnalité d'insightd dans vos applications. Hinsightd inclut également une fonctionnalité intégrée pour envoyer des requêtes HTTP à partir de la ligne de commande, par exemple, pour charger une page, vous pouvez exécuter "hinsightd -d URL". Le serveur est très compact et prend environ 200 Ko compilé (100 Ko d'exécutable et 100 Ko de bibliothèque partagée). Les dépendances externes incluent uniquement libc, lua, liburing et zlib, et éventuellement openssl/libressl et ffcall.

Les plans de développement ultérieur incluent la possibilité de stocker des fichiers compressés dans le cache, l'isolement du bac à sable basé sur le filtrage des appels système et l'utilisation d'espaces de noms, la gestion de la bande passante (mise en forme du trafic), le multithreading, l'amélioration de la gestion des erreurs et la définition d'hôtes virtuels basés sur des masques.

Les résultats des tests de performances synthétiques (sans optimisations dans la configuration telle quelle) par l'utilitaire ab lors de l'exécution de requêtes parallèles 250 et 500 (entre parenthèses) ("ab -k -c 250 -n 10000 http://localhost/") :

  • hinsightd/0.9.17 - 63035.01 requêtes par seconde (54984.63)
  • lighttpd/1.4.67 - 53693.29 requêtes par seconde (1613.59)
  • Apache/2.4.54 - 37474.10 requêtes par seconde (34305.55)
  • Caddie/2.6.2 - 35412.02 requêtes par seconde (33995.57)
  • nginx/1.23.2 - 26673.64 requêtes par seconde (26172.73)

Source: opennet.ru

Ajouter un commentaire