Opublikowano kompaktowy serwer HTTP hinsightd, wyróżniający się wykorzystaniem interfejsu asynchronicznego wejścia/wyjścia io_uring, dostarczanego w jądrze Linuksa. Serwer obsługuje protokół HTTP/1.1 i został zaprojektowany z myślą o niskim zużyciu zasobów, jednocześnie oferując wymaganą funkcjonalność. Na przykład, hinsightd obsługuje TLS, odwrotne proxy (rproxy), buforowanie dynamicznie generowanego contentu w lokalnym systemie plików, kompresję danych w locie, restart bez przerywania nawiązanych połączeń oraz podłączanie dynamicznych przetwarzaczy zapytań przy pomocy mechanizmów FastCGI i CGI. Kod projektu napisany jest w języku C i jest rozpowszechniany na licencji BSD.
Do obsługi konfiguracji, pisania wtyczek oraz tworzenia przetwarzaczy zapytań udostępniono możliwość użycia języka Lua, przy czym takie przetwarzacze mogą być definiowane bezpośrednio w pliku konfiguracji serwera. W formie wtyczek zrealizowano takie funkcjonalności, jak zmiana formatu zapisu w logach, przypisanie poszczególnych logów do wirtualnych hostów, określenie strategii równoważenia obciążenia, HTTP-autoryzacja, przepisywanie URL oraz wykonywanie zaplanowanych zadań (na przykład aktualizacja certyfikatów Let's Encrypt).
Razem z serwerem dostarczana jest biblioteka do integracji funkcji hinsightd w aplikacjach. Hinsightd zawiera również zintegrowaną funkcjonalność do wysyłania żądań HTTP z linii poleceń, na przykład, aby załadować stronę, można wykonać polecenie „hinsightd -d URL”. Serwer jest bardzo kompaktowy i w skompilowanej formie zajmuje około 200 KB (100 KB to plik wykonywalny, a 100 KB to biblioteka współdzielona). Wśród zewnętrznych zależności znajduje się tylko libc, lua, liburing oraz zlib, a także opcjonalnie openssl/libressl i ffcall.
W planach dalszego rozwoju wymienia się możliwość przechowywania w cache'u skompresowanych plików, izolację sandboxową opartą na filtracji wywołań systemowych oraz wykorzystanie przestrzeni nazw, zarządzanie przepustowością (traffic shaping), wielowątkowość, ulepszone zarządzanie błędami oraz określanie wirtualnych hostów na podstawie masek.
Wyniki syntetycznego testowania wydajności (bez optymalizacji w konfiguracji jak jest) przy użyciu narzędzia ab, przy uruchomieniu 250 i 500 (w nawiasach) równoległych zapytań („ab -k -c 250 -n 10000 http://localhost/”):
- hinsightd/0.9.17 — 63035.01 zapytań na sekundę (54984.63)
- lighttpd/1.4.67 — 53693.29 zapytań na sekundę (1613.59)
- Apache/2.4.54 — 37474.10 zapytań na sekundę (34305.55)
- Caddy/2.6.2 — 35412.02 zapytań na sekundę (33995.57)
- nginx/1.23.2 — 26673.64 zapytań na sekundę (26172.73)
Źródło: opennet.ru
