ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Π½ Π΅ hinsightd HTTP ΡΡŠΡ€Π²ΡŠΡ€, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ Linux io_uring подсистСма

Π‘Π΅ΡˆΠ΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π΅Π½ 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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€