ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ HTTP-сСрвСр hinsightd, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Linux-подсистСму io_uring

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ HTTP-сСрвСр hinsightd, ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ использованиСм прСдоствляСмого Π² ядрС Linux интСрфСйса асинхронного Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° io_uring. Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» HTTP/1.1 ΠΈ спроСктирован для Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ потрСблСния рСсурсов с прСдоставлСниСм ΠΏΡ€ΠΈ этом вострСбованной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. НапримСр, hinsightd ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ TLS, ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ проксированиС (rproxy), ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ динамичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Π² локальной Π€Π‘, сТатиС Π½Π° Π»Π΅Ρ‚Ρƒ ΠΎΡ‚Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, пСрСзапуск Π±Π΅Π· Ρ€Π°Π·Ρ€Ρ‹Π²Π° установлСнных соСдинСний, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ динамичСских ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² запросов ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² FastCGI ΠΈ CGI. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° написан Π½Π° языкС Π‘ΠΈ ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ BSD.

Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, написания Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ ΠΈ создания ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² запросов прСдоставлСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования языка Lua, ΠΏΡ€ΠΈ этом ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ нСпосрСдствСнно Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ сСрвСра. Π’ Ρ„ΠΎΡ€ΠΌΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‚Π°ΠΊΠΈΠ΅ возмоТности ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° записи Π² Π»ΠΎΠ³, привязка ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π»ΠΎΠ³ΠΎΠ² ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ хостам, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ стратСгии балансировки Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, HTTP-аутСнтификация, ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ URL ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ»Π°Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚ ΠΏΠΎ Ρ€Π°ΡΠΏΠΈΡΠ°Π½ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ сСртификатов Let’s Encrypt).

ВмСстС с сСрвСром поставляСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ hinsightd Π² свои прилоТСния. Hinsightd Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ HTTP-запросов ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ «hinsightd -d URL». Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π² скомпилированном Π²ΠΈΠ΄Π΅ ΠΎΠΊΠΎΠ»ΠΎ 200ΠšΠ‘ (100ΠšΠ‘ исполняСмый Ρ„Π°ΠΉΠ» ΠΈ 100ΠšΠ‘ раздСляСмая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°). Π‘Ρ€Π΅Π΄ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… зависимостСй Ρ‚ΠΎΠ»ΡŒΠΊΠΎ libc, lua, liburing ΠΈ zlib, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ openssl/libressl ΠΈ ffcall.

Из ΠΏΠ»Π°Π½ΠΎΠ² ΠΏΠΎ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌΡƒ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΡŽ упоминаСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ хранСния Π² кэшС сТатых Ρ„Π°ΠΉΠ»ΠΎΠ², sandbox-изоляция Π½Π° Π±Π°Π·Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ использовании пространств ΠΈΠΌΡ‘Π½, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ (traffic shaping), ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… хостов Π½Π° основС масок.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ синтСтичСского тСстирования ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (Π±Π΅Π· ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ) ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ 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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ