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