Linux io_uring ํ•˜์œ„ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” hinsightd HTTP ์„œ๋ฒ„ ๋„์ž…

Linux ์ปค๋„์—์„œ ์ œ๊ณต๋˜๋Š” io_uring ๋น„๋™๊ธฐ I/O ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์œ ๋ช…ํ•œ ์†Œํ˜• hinsightd HTTP ์„œ๋ฒ„๊ฐ€ ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” HTTP/1.1 ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•˜๋ฉฐ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉด์„œ ๋ฆฌ์†Œ์Šค ์†Œ๋น„๋ฅผ ์ค„์ด๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, hinsightd๋Š” TLS, ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ(rproxy), ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ ์ฝ˜ํ…์ธ  ์บ์‹ฑ, ์ฆ‰์„ ๋ฐ์ดํ„ฐ ์••์ถ•, ์—ฐ๊ฒฐ ์—†๋Š” ๋‹ค์‹œ ์‹œ์ž‘, FastCGI ๋ฐ CGI ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•œ ๋™์  ์š”์ฒญ ์ฒ˜๋ฆฌ๊ธฐ ์—ฐ๊ฒฐ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” C ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ BSD ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€ ์‚ฌํ•ญ์„ ์ž‘์„ฑํ•˜๊ณ  ์š”์ฒญ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Lua ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋˜๋ฉฐ ์ด๋Ÿฌํ•œ ํ•ธ๋“ค๋Ÿฌ๋Š” ์„œ๋ฒ„ ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ์ง์ ‘ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ ํ˜•ํƒœ๋กœ ๋กœ๊น… ํ˜•์‹ ๋ณ€๊ฒฝ, ๊ฐœ๋ณ„ ๋กœ๊ทธ๋ฅผ ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ์— ์—ฐ๊ฒฐ, ๋ถ€ํ•˜ ๋ถ„์‚ฐ ์ „๋žต ์ •์˜, HTTP ์ธ์ฆ, URL ์žฌ์ž‘์„ฑ, ์˜ˆ์•ฝ๋œ ์ž‘์—…(์˜ˆ: Let's Encrypt ์ธ์ฆ์„œ ์—…๋ฐ์ดํŠธ)๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ํ˜•ํƒœ.

์„œ๋ฒ„์—๋Š” hinsightd ๊ธฐ๋Šฅ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. Hinsightd์—๋Š” ๋ช…๋ น์ค„์—์„œ HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ํ†ตํ•ฉ ๊ธฐ๋Šฅ๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ•˜๋ ค๋ฉด "hinsightd -d URL"์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ๋งค์šฐ ์ปดํŒฉํŠธํ•˜๋ฉฐ ์ปดํŒŒ์ผ๋œ ์•ฝ 200KB(100KB ์‹คํ–‰ ํŒŒ์ผ ๋ฐ 100KB ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ์ข…์†์„ฑ์—๋Š” libc, lua, liburing ๋ฐ zlib๋งŒ ํฌํ•จ๋˜๋ฉฐ ์„ ํƒ์ ์œผ๋กœ openssl/libressl ๋ฐ ffcall์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ๊ฐœ๋ฐœ ๊ณ„ํš์—๋Š” ์••์ถ• ํŒŒ์ผ์„ ์บ์‹œ์— ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ, ์‹œ์Šคํ…œ ํ˜ธ์ถœ ํ•„ํ„ฐ๋ง ๋ฐ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์‚ฌ์šฉ์— ๊ธฐ๋ฐ˜ํ•œ ์ƒŒ๋“œ๋ฐ•์Šค ๊ฒฉ๋ฆฌ, ๋Œ€์—ญํญ ๊ด€๋ฆฌ(ํŠธ๋ž˜ํ”ฝ ์…ฐ์ดํ•‘), ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ, ํ–ฅ์ƒ๋œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐ ๋งˆ์Šคํฌ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ ์ •์˜๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

250 ๋ฐ 500(๊ด„ํ˜ธ ์•ˆ) ๋ณ‘๋ ฌ ์š”์ฒญ("ab -k -c 250 -n 10000 http://localhost/")์„ ์‹คํ–‰ํ•  ๋•Œ ab ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ์˜ํ•œ ํ•ฉ์„ฑ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ(๊ตฌ์„ฑ์—์„œ ์ตœ์ ํ™” ์—†์ด) ๊ฒฐ๊ณผ:

  • hinsightd/0.9.17 - ์ดˆ๋‹น 63035.01 ์š”์ฒญ(54984.63)
  • lighttpd/1.4.67 - ์ดˆ๋‹น 53693.29 ์š”์ฒญ(1613.59)
  • Apache/2.4.54 - ์ดˆ๋‹น 37474.10 ์š”์ฒญ(34305.55)
  • ์บ๋””/2.6.2 - ์ดˆ๋‹น 35412.02 ์š”์ฒญ(33995.57)
  • nginx/1.23.2 - ์ดˆ๋‹น 26673.64 ์š”์ฒญ(26172.73)

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€