ΠΠ΅ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ΅Π½ hinsightd HTTP ΡΡΡΠ²ΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΎΡΠ»ΠΈΡΠ°Π²Π° Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΈΡ I/O ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ io_uring, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ Π² ΡΠ΄ΡΠΎΡΠΎ Π½Π° Linux. Π‘ΡΡΠ²ΡΡΡΡ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° 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.
ΠΠ»Π°Π½ΠΎΠ²Π΅ΡΠ΅ Π·Π° ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΡΠ½ΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ Π²ΠΊΠ»ΡΡΠ²Π°Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΡΡΡ ΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π² ΠΊΠ΅ΡΠ°, ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ Π½Π° ΠΏΡΡΡΡΠ½ΠΈΠΊΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡ ΠΈΠΌΠ΅Π½Π°, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΠΎΡΠ½Π°ΡΠ° Π»Π΅Π½ΡΠ° (ΠΎΡΠΎΡΠΌΡΠ½Π΅ Π½Π° ΡΡΠ°ΡΠΈΠΊ), ΠΌΠ½ΠΎΠ³ΠΎΠ½ΠΈΡΠΊΠΎΠ²ΠΎΡΡ, ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΈ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ Ρ ΠΎΡΡΠΎΠ²Π΅ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΌΠ°ΡΠΊΠΈ.
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΠΈΠ½ΡΠ΅ΡΠΈΡΠ½ΠΎΡΠΎ ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° (Π±Π΅Π· ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, ΠΊΠ°ΠΊΡΠΎ Π΅) ΠΎΡ ΠΏΠΎΠΌΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ab ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° 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