Wprowadzono serwer HTTP hinsightd używający podsystemu Linux io_uring

Opublikowano kompaktowy serwer HTTP hinsightd, wyróżniający się używaniem asynchronicznego interfejsu I/O io_uring dostępnego w jądrze Linuksa. Serwer obsługuje protokół HTTP/1.1 i został zaprojektowany z myślą o niskim zużyciu zasobów, zapewniając jednocześnie bardzo potrzebną funkcjonalność. Na przykład hinsightd obsługuje TLS, odwrotne proxy (rproxy), buforowanie dynamicznie generowanych treści w lokalnym systemie plików, kompresję danych w locie, bezpołączeniowy restart, połączenie dynamicznych handlerów żądań z wykorzystaniem mechanizmów FastCGI i CGI. Kod projektu napisany jest w języku C i rozpowszechniany na licencji BSD.

Do przetwarzania konfiguracji, pisania dodatków i tworzenia handlerów zapewniona jest możliwość korzystania z języka Lua, przy czym takie handlery można zdefiniować bezpośrednio w pliku konfiguracyjnym serwera. W postaci wtyczek takie funkcje, jak zmiana formatu logowania, łączenie poszczególnych logów z wirtualnymi hostami, definiowanie strategii równoważenia obciążenia, uwierzytelnianie HTTP, przepisywanie adresów URL oraz zaplanowane zaplanowane prace (np. aktualizacja certyfikatów Let's Encrypt) są realizowane w postaci wtyczek.

Serwer jest dostarczany z biblioteką do integracji funkcji hinsightd z twoimi aplikacjami. Hinsightd zawiera również zintegrowaną funkcjonalność wysyłania żądań HTTP z wiersza poleceń, na przykład, aby załadować stronę, można uruchomić „hinsightd -d URL”. Serwer jest bardzo kompaktowy i zajmuje około 200 KB skompilowanych (100 KB pliku wykonywalnego i 100 KB biblioteki współdzielonej). Zewnętrzne zależności obejmują tylko libc, lua, liburing i zlib oraz opcjonalnie openssl/libressl i ffcall.

Plany dalszego rozwoju obejmują możliwość przechowywania skompresowanych plików w pamięci podręcznej, izolację piaskownicy w oparciu o filtrowanie wywołań systemowych i wykorzystanie przestrzeni nazw, zarządzanie pasmem (kształtowanie ruchu), wielowątkowość, ulepszoną obsługę błędów oraz definiowanie wirtualnych hostów na podstawie masek.

Wyniki syntetycznego testu wydajności (bez optymalizacji w obecnej konfiguracji) przeprowadzonego przez narzędzie ab podczas wykonywania 250 i 500 (w nawiasach) równoległych żądań („ab -k -c 250 -n 10000 http://localhost/”):

  • hinsightd/0.9.17 — 63035.01 żądań na sekundę (54984.63)
  • lighttpd/1.4.67 — 53693.29 żądań na sekundę (1613.59)
  • Apache/2.4.54 — 37474.10 żądań na sekundę (34305.55)
  • Caddy/2.6.2 — 35412.02 żądań na sekundę (33995.57)
  • nginx/1.23.2 — 26673.64 żądań na sekundę (26172.73)

Źródło: opennet.ru

Dodaj komentarz