เปเบ™เบฐเบ™เปเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ HTTP hinsightd เป‚เบ”เบเปƒเบŠเป‰เบฅเบฐเบšเบปเบšเบเปˆเบญเบ Linux io_uring

เป€เบŠเบตเบšเป€เบงเบต HTTP hinsightd เบ‚เบฐเปœเบฒเบ”เบเบฐเบ—เบฑเบ”เบฎเบฑเบ”เป„เบ”เป‰เบ–เบทเบเป€เบœเบตเบเปเบœเปˆ, เป€เบ›เบฑเบ™เบ—เบตเปˆเป‚เบ”เบ”เป€เบ”เบฑเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš io_uring asynchronous I/O เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เบขเบนเปˆเปƒเบ™ Linux kernel. เป€เบŠเบตเบšเป€เบงเบตเบฎเบญเบ‡เบฎเบฑเบš HTTP/1.1 protocol เปเบฅเบฐเบ–เบทเบเบญเบญเบเปเบšเบšเป€เบžเบทเปˆเบญเบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบ•เปเปˆเบฒ เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเปƒเบซเป‰เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบผเบฒเบ. เบ•เบปเบงเบขเปˆเบฒเบ‡, hinsightd เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ TLS, reverse proxying (rproxy), caching เบ‚เบญเบ‡เป€เบ™เบทเป‰เบญเบซเบฒเบ—เบตเปˆเบชเป‰เบฒเบ‡เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเปƒเบ™เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™, เบเบฒเบ™เบšเบตเบšเบญเบฑเบ”เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เป€เบงเบฅเบฒเบšเบดเบ™, restart เบ—เบตเปˆเบšเปเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเป‚เบ”เบเปƒเบŠเป‰ FastCGI เปเบฅเบฐ CGI เบเบปเบ™เป„เบ. เบฅเบฐเบซเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™เปเบกเปˆเบ™เบ‚เบฝเบ™เป€เบ›เบฑเบ™เบžเบฒเบชเบฒ C เปเบฅเบฐเปเบˆเบเบขเบฒเบเบžเบฒเบเปƒเบ•เป‰เปƒเบšเบญเบฐเบ™เบธเบเบฒเบ” BSD.

เป€เบžเบทเปˆเบญเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เบ‚เบฝเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปเบฅเบฐเบชเป‰เบฒเบ‡เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป, เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบžเบฒเบชเบฒ Lua เปเบกเปˆเบ™เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบชเบฒเบกเบฒเบ”เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบเบปเบ‡เปƒเบ™เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ plugins, เบฅเบฑเบเบชเบฐเบ™เบฐเป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เบ›เปˆเบฝเบ™เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบ, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบšเบฑเบ™เบ—เบถเบเบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™เบเบฑเบš virtual hosts, เบเปเบฒเบ™เบปเบ”เบเบธเบ”เบ—เบฐเบชเบฒเบ”เบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”, HTTP authentication, URL rewriting, เปเบฅเบฐเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ (เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™ Let's Encrypt) เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเบนเปˆเปƒเบ™ เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ plugins.

เป€เบŠเบตเบšเป€เบงเบตเบกเบฒเบžเป‰เบญเบกเบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เบชเบณเบฅเบฑเบšเบเบฒเบ™เบฅเบงเบกเป€เบญเบปเบฒเบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ‚เบญเบ‡เบ„เบงเบฒเบกเบฎเบนเป‰เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเป€เบ‚เบปเป‰เบฒเปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™. Hinsightd เบเบฑเบ‡เบ›เบฐเบเบญเบšเบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆเบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป HTTP เบˆเบฒเบเป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบžเบทเปˆเบญเป‚เบซเบฅเบ”เบซเบ™เป‰เบฒ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ "hinsightd -d URL". เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบกเปˆเบ™เบซเบ™เบฒเปเบซเบ™เป‰เบ™เบซเบผเบฒเบเปเบฅเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒเบ›เบฐเบกเบฒเบ™ 200KB เบฅเบงเบšเบฅเบงเบก (100KB เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เปเบฅเบฐ 100KB เปเบšเปˆเบ‡เบ›เบฑเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”). เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบžเบฒเบเบ™เบญเบเบ›เบฐเบเบญเบšเบกเบตเบžเบฝเบ‡เปเบ•เปˆ libc, lua, liburing เปเบฅเบฐ zlib, เปเบฅเบฐเบ—เบฒเบ‡เป€เบฅเบทเบญเบ openssl/libressl เปเบฅเบฐ ffcall.

เปเบœเบ™เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ•เบทเปˆเบกเบญเบตเบเบ›เบฐเบเบญเบšเบกเบตเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบŸเบฅเปŒเบ—เบตเปˆเบ–เบทเบเบšเบตเบšเบญเบฑเบ”เบขเบนเปˆเปƒเบ™เปเบ„เบ”, เบเบฒเบ™เปเบเบ sandbox เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบšเปเบฅเบฐเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ namespaces, เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เปเบšเบ™เบงเบดเบ” (เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™), multithreading, เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปเบฅเบฐเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ‚เบญเบ‡ virtual hosts เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบซเบ™เป‰เบฒเบเบฒเบ.

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบฑเบ‡เป€เบ„เบฒเบฐ (เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบ›เบฑเบ™) เป‚เบ”เบ ab utility เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปเบฅเปˆเบ™ 250 เปเบฅเบฐ 500 (เปƒเบ™เบงเบปเบ‡เป€เบฅเบฑเบš) เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ‚เบฐเบซเบ™เบฒเบ™ ("ab -k -c 250 -n 10000 http://localhost/"):

  • hinsightd/0.9.17 - 63035.01 เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต (54984.63)
  • lighttpd/1.4.67 - 53693.29 เบฎเป‰เบญเบ‡เบ‚เปเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต (1613.59)
  • Apache/2.4.54 - 37474.10 เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต (34305.55)
  • Caddy/2.6.2 - 35412.02 เบฎเป‰เบญเบ‡เบ‚เปเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต (33995.57)
  • nginx/1.23.2 - 26673.64 เบฎเป‰เบญเบ‡เบ‚เปเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต (26172.73)

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™