Einführung des Hinsightd-HTTP-Servers mit dem Linux-Subsystem io_uring

Es wurde ein kompakter Hinsightd-HTTP-Server veröffentlicht, der sich durch die Verwendung der im Linux-Kernel bereitgestellten asynchronen E/A-Schnittstelle io_uring auszeichnet. Der Server unterstützt das HTTP/1.1-Protokoll und ist auf geringen Ressourcenverbrauch ausgelegt und bietet gleichzeitig dringend benötigte Funktionen. Hinsightd unterstützt beispielsweise TLS, Reverse Proxying (rproxy), Caching dynamisch generierter Inhalte im lokalen Dateisystem, On-the-Fly-Datenkomprimierung, verbindungsloser Neustart, Anbindung dynamischer Request-Handler über FastCGI- und CGI-Mechanismen. Der Projektcode ist in der Sprache C geschrieben und wird unter der BSD-Lizenz vertrieben.

Um die Konfiguration zu verarbeiten, Ergänzungen zu schreiben und Anforderungshandler zu erstellen, besteht die Möglichkeit, die Lua-Sprache zu verwenden, während solche Handler direkt in der Serverkonfigurationsdatei definiert werden können. In Form von Plugins sind Funktionen wie das Ändern des Protokollierungsformats, das Verknüpfen einzelner Protokolle mit virtuellen Hosts, das Definieren einer Lastausgleichsstrategie, HTTP-Authentifizierung, URL-Umschreiben und geplante geplante Arbeiten (z. B. Aktualisieren von Let's Encrypt-Zertifikaten) implementiert Form von Plugins.

Der Server verfügt über eine Bibliothek zur Integration von Hinsightd-Funktionalitäten in Ihre Anwendungen. Hinsightd enthält auch integrierte Funktionen zum Senden von HTTP-Anfragen über die Befehlszeile. Um beispielsweise eine Seite zu laden, können Sie „hinsightd -d URL“ ausführen. Der Server ist sehr kompakt und benötigt etwa 200 KB kompiliert (100 KB ausführbare Datei und 100 KB gemeinsam genutzte Bibliothek). Zu den externen Abhängigkeiten gehören nur libc, lua, liburing und zlib sowie optional openssl/libressl und ffcall.

Zu den Plänen für die Weiterentwicklung gehören die Möglichkeit, komprimierte Dateien im Cache zu speichern, eine Sandbox-Isolation basierend auf Systemaufruffilterung und der Verwendung von Namespaces, Bandbreitenmanagement (Traffic Shaping), Multithreading, eine verbesserte Fehlerbehandlung und die Definition virtueller Hosts basierend auf Masken.

Die Ergebnisse synthetischer Leistungstests (ohne Optimierungen in der aktuellen Konfiguration) durch das Dienstprogramm ab bei der Ausführung von 250 und 500 (in Klammern) parallelen Anforderungen („ab -k -c 250 -n 10000 http://localhost/“):

  • hinsightd/0.9.17 – 63035.01 Anfragen pro Sekunde (54984.63)
  • lighttpd/1.4.67 – 53693.29 Anfragen pro Sekunde (1613.59)
  • Apache/2.4.54 – 37474.10 Anfragen pro Sekunde (34305.55)
  • Caddy/2.6.2 – 35412.02 Anfragen pro Sekunde (33995.57)
  • nginx/1.23.2 – 26673.64 Anfragen pro Sekunde (26172.73)

Source: opennet.ru

Kommentar hinzufügen