Enkondukis prudentan HTTP-servilon uzante Linuksan io_uring-subsistemon

Kompakta HTTP-servilo, hinsightd, estis publikigita, rimarkinda pro sia uzo de la io_uring nesinkrona I/O-interfaco disponigita en la Linukso-kerno. La servilo subtenas la HTTP/1.1-protokolon kaj estas desegnita por malalta konsumo de rimedoj dum ĝi provizas postulatajn funkciojn. Ekzemple, hinsightd subtenas TLS, inversan prokuradon (rproxy), kaŝmemoron dinamike generitan enhavon en la loka dosiersistemo, surla-fluga kunpremado de elsenditaj datenoj, rekomencante sen rompado de establitaj ligoj, konektante dinamikajn petojn per FastCGI kaj CGI-mekanismoj. La projektkodo estas skribita en C kaj distribuita sub la permesilo BSD.

Por prilabori la agordon, skribi aldonojn kaj krei petojn, eblas uzi la Lua-lingvon, kaj tiaj pritraktiloj povas esti difinitaj rekte en la servila agorda dosiero. En la formo de kromaĵoj, tiaj funkcioj kiel ŝanĝi la registroformaton, ligi individuajn protokolojn al virtualaj gastigantoj, difini ŝarĝan ekvilibran strategion, HTTP-aŭtentikigon, URL-reskribon kaj plenumi planitan laboron (ekzemple, ĝisdatigi Let's Encrypt atestiloj) estas efektivigitaj.

La servilo venas kun biblioteko por integri antaŭvidajn funkciojn en viajn aplikojn. Hinsightd ankaŭ inkluzivas integran funkcion por sendi HTTP-petojn de la komandlinio, ekzemple, vi povas ruli la komandon "hinsightd -d URL" por ŝargi paĝon. La servilo estas tre kompakta kaj okupas ĉirkaŭ 200KB en kompilita formo (100KB rulebla dosiero kaj 100KB komuna biblioteko). Eksteraj dependecoj inkluzivas nur libc, lua, liburing kaj zlib, kaj laŭvole openssl/libressl kaj ffcall.

Planoj por plua evoluo inkluzivas la kapablon konservi kunpremitajn dosierojn, sablokestan izolitecon bazitan sur filtrado de sistemvokoj kaj uzado de nomspacoj, trafikformado, multi-fadenado, plibonigita erartraktado kaj mask-bazita virtuala gastiga detekto.

Rezultoj de sinteza agado-testado (sen optimumigoj en la agordo tia) kun la ab-utilo dum rulado de 250 kaj 500 (en krampoj) paralelaj petoj ("ab -k -c 250 -n 10000 http://localhost/"):

  • hinsightd/0.9.17 - 63035.01 petoj sekundo (54984.63)
  • lighttpd/1.4.67 - 53693.29 petoj sekundo (1613.59)
  • Apache/2.4.54 - 37474.10 petoj sekundo (34305.55)
  • Caddy/2.6.2 - 35412.02 petoj sekundo (33995.57)
  • nginx/1.23.2 - 26673.64 petoj sekundo (26172.73)

fonto: opennet.ru

Aldoni komenton