Der HTTP-Server hinsightd verwendet die Linux-Subsystem io_uring

Ein kompakter HTTP-Server namens hinsightd wurde veröffentlicht, der durch die Verwendung des im Linux-Kernel bereitgestellten asynchronen I/O-Interfaces io_uring bemerkenswert ist. Der Server unterstützt das Protokoll HTTP/1.1 und ist so konzipiert, dass er wenig Ressourcen verbraucht und gleichzeitig die geforderte Funktionalität bereitstellt. Zum Beispiel unterstützt hinsightd TLS, Reverse Proxying (rproxy), das Caching von dynamisch generierten Inhalten im lokalen FS, die On-the-Fly-Komprimierung der übertragenen Daten, den nahtlosen Neustart bereits etablierter Verbindungen und das Hinzufügen dynamischer Anfrage-Handler mittels FastCGI- und CGI-Mechanismen. Der Projektcode ist in C geschrieben und wird unter der BSD-Lizenz veröffentlicht.

Zur Verarbeitung der Konfiguration, zum Schreiben von Erweiterungen und zur Erstellung von Anfrage-Handlern besteht die Möglichkeit, die Programmiersprache Lua zu verwenden, wobei solche Handler direkt in der Datei definiert werden können. Serverkonfiguration hinzugefügt.Funktionen wie die Änderung des Logformat, das Binden einzelner Logs an virtuelle Hosts, die Definition von Lastverteilungstrategien, HTTP-Authentifizierung, URL-Umschreibung und die Durchführung geplanter Aufgaben zu festgelegten Zeiten (z. B. das Aktualisieren von Let’s Encrypt-Zertifikaten) werden in Form von Plugins bereitgestellt.

Zusammen mit Server Es wird eine Bibliothek zur Integration der Funktionen von hinsightd in eigene Anwendungen geliefert. Hinsightd umfasst auch eine integrierte Funktionalität zum Senden von HTTP-Anfragen aus der Befehlszeile; zum Beispiel kann man mit dem Befehl „hinsightd -d URL“ eine Seite laden. Der Server ist sehr kompakt und benötigt in kompilierter Form etwa 200 KB (100 KB ausführbare Datei und 100 KB gemeinsame Bibliothek). Unter den externen Abhängigkeiten befinden sich nur libc, lua, liburing und zlib sowie optional openssl/libressl und ffcall.

Bei den Plänen für die zukünftige Entwicklung wird die Möglichkeit erwähnt, komprimierte Dateien im Cache zu speichern, Sandbox-Isolation basierend auf der Filterung von Systemaufrufen und der Verwendung von Namespaces zu implementieren, die Bandbreite zu steuern (Traffic Shaping), Multithreading, verbesserte Fehlerbehandlung und die Definition von virtuellen Hosts basierend auf Masken.

Die Ergebnisse der synthetischen Leistungstests (ohne Optimierungen in der Standardkonfiguration) mit dem Tool ab bei der Ausführung von 250 und 500 (in Klammern) parallelen Anfragen („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)

Quelle: opennet.ru

60GB SSD 8Gb DDR4