ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Linux. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’Π΅Π±-прилоТСния Π½Ρ‹Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ повсСмСстно, Π° срСди всСх транспортных ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² Π»ΡŒΠ²ΠΈΠ½ΡƒΡŽ долю Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ HTTP. Π˜Π·ΡƒΡ‡Π°Ρ Π½ΡŽΠ°Π½ΡΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ удСляСт ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ внимания ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, Π³Π΄Π΅ эти прилоТСния Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ. Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (Dev) ΠΈ эксплуатации (Ops) лишь ΡƒΡ…ΡƒΠ΄ΡˆΠ°Π»ΠΎ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ. Но с распространСниСм ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€Ρ‹ DevOps Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ нСсти ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° запуск своих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°ΠΊΠ΅, поэтому для Π½ΠΈΡ… ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ досконально ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с бэкСндом ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Π­Ρ‚ΠΎ особСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ систСму для тысяч ΠΈΠ»ΠΈ дСсятков тысяч ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Π² Π²Π΅Π±-слуТбах ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° ограничСния Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… прилоТСниях. Π‘ΡƒΠ΄ΡŒ Ρ‚ΠΎ балансировщики Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ»ΠΈ сСрвСры Π‘Π”, Ρƒ всСх этих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ срСдС. ПониманиС этих Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΈ способов ΠΈΡ… прСодолСния Π² Ρ†Π΅Π»ΠΎΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ Π²Π°ΡˆΠΈΡ… Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π― ΠΏΠΈΡˆΡƒ эту ΡΠ΅Ρ€ΠΈΡŽ статСй Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° вопросы ΠΌΠΎΠ»ΠΎΠ΄Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят ΡΡ‚Π°Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ систСмными Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ. НСвозмоТно Ρ‡Ρ‘Ρ‚ΠΊΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Linux, Π½Π΅ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΠ²ΡˆΠΈΡΡŒ Π² основы, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Π₯отя Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π² этом Ρ†ΠΈΠΊΠ»Π΅ я Ρ…ΠΎΡ‡Ρƒ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ сСтСвыС прилоТСния, Π° Π½Π΅ дСсктопныС, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΈΠ»ΠΈ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€. Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» рассчитан Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Linux ΠΈΠ»ΠΈ Unix ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

LinuxΒ β€” это сСрвСрная опСрационная систСма, ΠΈ Ρ‡Π°Ρ‰Π΅ всСго ваши прилоТСния Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° этой ОБ. Π₯отя я Π³ΠΎΠ²ΠΎΡ€ΡŽ Β«LinuxΒ», Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ с ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Ρƒ всС Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы Π² Ρ†Π΅Π»ΠΎΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, я Π½Π΅ тСстировал ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… систСмах. Π˜Ρ‚Π°ΠΊ, Ссли вас интСрСсуСт FreeBSD ΠΈΠ»ΠΈ OpenBSD, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. Когда я ΠΏΡ€ΠΎΠ±ΡƒΡŽ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Linux-спСцифичСскоС, Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽ Π½Π° это.

Π₯отя Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ знания для создания прилоТСния с нуля, ΠΈ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Ρ‚Π°ΠΊ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ. Если Π²Ρ‹ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Π²Π΅Π±-сСрвСр Π½Π° C ΠΈΠ»ΠΈ C++ для бизнСс-прилоТСния своСй ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это Π±ΡƒΠ΄Π΅Ρ‚ ваш послСдний дСнь Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅. Однако Π·Π½Π°Π½ΠΈΠ΅ структуры этих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π² Π²Ρ‹Π±ΠΎΡ€Π΅ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π’Ρ‹ смоТСтС ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ систСмы Π½Π° основС процСссов с систСмами Π½Π° основС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π° основС событий. Π’Ρ‹ ΠΏΠΎΠΉΠΌΡ‘Ρ‚Π΅ ΠΈ ΠΎΡ†Π΅Π½ΠΈΡ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Nginx Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ Apache httpd, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Python Π½Π° основС Tornado ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ большС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Python Π½Π° основС Django.

ZeroHTTPd: инструмСнт обучСния

ZeroHTTPdΒ β€” Π²Π΅Π±-сСрвСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я написал с нуля Π½Π° C Π² качСствС ΡƒΡ‡Π΅Π±Π½ΠΎΠ³ΠΎ инструмСнта. Π£ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ Π²Π½Π΅ΡˆΠ½ΠΈΡ… зависимостСй, Π² Ρ‚ΠΎΠΌ числС доступа ΠΊ Redis. ΠœΡ‹ запускаСм собствСнныС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Redis. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ см. Π½ΠΈΠΆΠ΅.

Π₯отя ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π΄ΠΎΠ»Π³ΠΎ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ Ρ‚Π΅ΠΎΡ€ΠΈΡŽ, Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ собой всС сСрвСрных Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹. Π­Ρ‚ΠΎ самый наглядный ΠΌΠ΅Ρ‚ΠΎΠ΄. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ простой Π²Π΅Π±-сСрвСр ZeroHTTPd, примСняя ΠΊΠ°ΠΆΠ΄ΡƒΡŽ модСль: Π½Π° основС процСссов, ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ событий. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих сСрвСров ΠΈ посмотрим, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. ZeroHTTPd Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ C. Π’ состав сСрвСра Π½Π° основС событий Π²Ρ…ΠΎΠ΄ΠΈΡ‚ uthash, отличная рСализация Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, которая поставляСтся Π² ΠΎΠ΄Π½ΠΎΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях Π½ΠΈΠΊΠ°ΠΊΠΈΡ… зависимостСй Π½Π΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

Π’ ΠΊΠΎΠ΄Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ. Π‘ΡƒΠ΄ΡƒΡ‡ΠΈ простым Π²Π΅Π±-сСрвСром Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строчках ΠΊΠΎΠ΄Π°, ZeroHTTPd Ρ‚Π°ΠΊΠΆΠ΅ прСдставляСт собой ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π£ Π½Π΅Π³ΠΎ ограничСнная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½ΠΎ ΠΎΠ½ способСн Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ статичСскиС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΎΡ‡Π΅Π½ΡŒ простыС «динамичСскиС» страницы. Π”ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ZeroHTTPd Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для обучСния, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Linux-прилоТСния. По Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ счёту, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π²Π΅Π±-сСрвисов ΠΆΠ΄ΡƒΡ‚ запросов, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΈΡ… ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚. ИмСнно это Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ZeroHTTPd. Π­Ρ‚ΠΎ инструмСнт для обучСния, Π° Π½Π΅ для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½Π°. Он Π½Π΅ силён Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ошибок ΠΈ вряд Π»ΠΈ похвастаСтся Π»ΡƒΡ‡ΡˆΠΈΠΌΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°ΠΌΠΈ бСзопасности (ΠΎ Π΄Π°, я использовал strcpy) ΠΈΠ»ΠΈ Π·Π°ΡƒΠΌΠ½Ρ‹ΠΌΠΈ Ρ‚Ρ€ΡŽΠΊΠ°ΠΌΠΈ языка C. Но я надСюсь, ΠΎΠ½ Ρ…ΠΎΡ€ΠΎΡˆΠΎ справится со своСй Π·Π°Π΄Π°Ρ‡Π΅ΠΉ.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Linux. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
Заглавная страница ZeroHTTPd. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Ρ„Π°ΠΉΠ»ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ изобраТСния

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ гостСвой ΠΊΠ½ΠΈΠ³ΠΈ

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²Π΅Π±-прилоТСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ статичСскими Ρ„Π°ΠΉΠ»Ρ‹. Π£ Π½ΠΈΡ… слоТныС взаимодСйствия с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π‘Π”, кСшами ΠΈ Ρ‚.Β Π΄. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ создадим простоС Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ «ГостСвая ΠΊΠ½ΠΈΠ³Π°Β», Π³Π΄Π΅ посСтитСли ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ записи ΠΏΠΎΠ΄ своими ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. Π’ гостСвой ΠΊΠ½ΠΈΠ³Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ записи, оставлСнныС Ρ€Π°Π½Π΅Π΅. Π•ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ счётчик посСтитСлСй Π² Π½ΠΈΠΆΠ½Π΅ΠΉ части страницы.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Linux. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ «ГостСвая ΠΊΠ½ΠΈΠ³Π°Β» ZeroHTTPd

Π‘Ρ‡Ρ‘Ρ‚Ρ‡ΠΈΠΊ посСтитСлСй ΠΈ записи гостСвой ΠΊΠ½ΠΈΠ³ΠΈ хранятся Π² Redis. Для ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΉ с Redis Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ собствСнныС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, ΠΎΠ½ΠΈ Π½Π΅ зависят ΠΎΡ‚ внСшнСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π― Π½Π΅ большой ΠΏΠΎΠΊΠ»ΠΎΠ½Π½ΠΈΠΊ Π²Ρ‹ΠΊΠ°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΎΠΌΠΎΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ общСдоступныС ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ протСстированныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Но Ρ†Π΅Π»ΡŒ ZeroHTTPdΒ β€” ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Linux ΠΈ доступ ΠΊ внСшним слуТбам, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ обслуТиваниС HTTP-запросов ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ влияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ с Redis Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½Π°ΡˆΠΈΡ… сСрвСрных Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€. Π’ ΠΎΠ΄Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹, Π² Π΄Ρ€ΡƒΠ³ΠΈΡ…Β β€” ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π½Π° основС событий. ИспользованиС внСшнСй клиСнтской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Redis Π½Π΅ даст Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, наш малСнький ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Redis выполняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅, настройка ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π°; ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊ массиву). К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Redis ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ элСгантный ΠΈ простой. Π•Π³ΠΎ Π΄Π°ΠΆΠ΅ ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ Π½Π°Π΄ΠΎ. Π‘Π°ΠΌ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ всю Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» выполняСт ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² ста строчках ΠΊΠΎΠ΄Π°, Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, насколько ΠΎΠ½ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½.

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ рисункС ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ дСйствия прилоТСния, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ (Π±Ρ€Π°ΡƒΠ·Π΅Ρ€) Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ /guestbookURL.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Linux. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния гостСвой ΠΊΠ½ΠΈΠ³ΠΈ

Когда Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π΄Π°Ρ‚ΡŒ страницу гостСвой ΠΊΠ½ΠΈΠ³ΠΈ, происходит ΠΎΠ΄ΠΈΠ½ Π²Ρ‹Π·ΠΎΠ² ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС для чтСния шаблона Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ Ρ‚Ρ€ΠΈ сСтСвых Π²Ρ‹Π·ΠΎΠ²Π° ΠΊ Redis. Π€Π°ΠΉΠ» шаблона содСрТит Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ содСрТимого HTML для страницы Π½Π° ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅ Π²Π²Π΅Ρ€Ρ…Ρƒ. Π’Π°ΠΌ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΠΈ для динамичСской части ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°: записСй ΠΈ счётчика посСтитСлСй. ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΡ… ΠΈΠ· Redis, вставляСм Π½Π° страницу ΠΈ Π²Ρ‹Π΄Π°Ρ‘ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ сформированный ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚. Π’Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Redis ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Redis Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° ΠΏΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ. Однако для нашСго сСрвСра с асинхронной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ Π½Π° основС событий мноТСство сСтСвых Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²Β β€” Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ испытаниС Π² ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ… цСлях. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ отбрасываСм Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Redis ΠΎ количСствС посСтитСлСй ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ.

Π‘Π΅Ρ€Π²Π΅Ρ€Π½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ZeroHTTPd

ΠœΡ‹ строим сСмь вСрсий ZeroHTTPd с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, Π½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°ΠΌΠΈ:

  • Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ
  • Π€ΠΎΡ€ΠΊ сСрвСр (ΠΎΠ΄ΠΈΠ½ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс Π½Π° запрос)
  • ΠŸΡ€Π΅-Ρ„ΠΎΡ€ΠΊ сСрвСр (ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΊΠΈΠ½Π³ процСссов)
  • CΠ΅Ρ€Π²Π΅Ρ€ c ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ выполнСния (ΠΎΠ΄ΠΈΠ½ thread Π½Π° запрос)
  • Π‘Π΅Ρ€Π²Π΅Ρ€ с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ созданиСм ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
  • АрхитСктура Π½Π° Π±Π°Π·Π΅ poll()
  • АрхитСктура Π½Π° Π±Π°Π·Π΅ epoll

Π˜Π·ΠΌΠ΅Ρ€ΡΠ΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ² сСрвСр HTTP-запросами. Но ΠΏΡ€ΠΈ сравнСнии Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ с высокой ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° количСство запросов увСличиваСтся. ВСстируСм Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π° ΠΈ считаСм срСднСС.

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ тСстирования

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Linux. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
Установка для Π½Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ³ΠΎ тСстирования ZeroHTTPd

Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ тСстов всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ машинС. Π’ этом случаС ОБ нСсёт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΡΠΎΠΏΠ΅Ρ€Π½ΠΈΡ‡Π°ΡŽΡ‚ Π·Π° CPU. Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… сСрвСрных Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ этого упраТнСния. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ большСго количСства ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… станСт ΠΏΠ°Π³ΡƒΠ±Π½Ρ‹ΠΌ для процСсса. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, настройка Π½Π° рисункС Π²Ρ‹ΡˆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ всСго.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих сСрвСров

  • load.unixism.net: здСсь ΠΌΡ‹ запускаСм ab, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ Apache Benchmark. Она Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для тСстирования Π½Π°ΡˆΠΈΡ… сСрвСрных Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€.
  • nginx.unixism.net: ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ экзСмпляра сСрвСрной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Для этого сСрвСр Nginx с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ настройками Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ балансировщик Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰Π΅ΠΉ ΠΎΡ‚ ab Π½Π° наши сСрвСрныС процСссы.
  • zerohttpd.unixism.net: здСсь ΠΌΡ‹ запускаСм наши сСрвСрныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° сСми Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ…, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π·Π° Ρ€Π°Π·.
  • redis.unixism.net: Π½Π° этом сСрвСрС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄Π΅ΠΌΠΎΠ½ Redis, Π³Π΄Π΅ хранятся записи Π² гостСвой ΠΊΠ½ΠΈΠ³Π΅ ΠΈ счётчик посСтитСлСй.

ВсС сСрвСры Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ процСссорном ядрС. ИдСя Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€. Π’Π°ΠΊ ΠΊΠ°ΠΊ всС сСрвСрныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ, это Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ для ΠΈΡ… сравнСния. Моя тСстовая установка состоит ΠΈΠ· Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… сСрвСров, Π°Ρ€Π΅Π½Π΄ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρƒ Digital Ocean.

Π§Ρ‚ΠΎ ΠΌΡ‹ измСряСм?

МоТно ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. ΠœΡ‹ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, загруТая сСрвСры запросами Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… уровнях ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°: Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° растёт ΠΎΡ‚ 20 Π΄ΠΎ 15Β 000 ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстов

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСрвСров Π½Π° Ρ€Π°Π·Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΠΏΡ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… уровнях ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°. По оси y β€” количСство запросов Π² сСкунду, ΠΏΠΎ оси x β€” ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ соСдинСния.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Linux. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Linux. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Linux. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

НиТС Ρ‚Π°Π±Π»ΠΈΡ†Π° с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ.

запросов Π² сСкунду

ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ
ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ
Ρ„ΠΎΡ€ΠΊ
ΠΏΡ€Π΅-Ρ„ΠΎΡ€ΠΊ
ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ
ΠΏΡ€Π΅-ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ
poll
epoll

20
7
112
2100
1800
2250
1900
2050

50
7
190
2200
1700
2200
2000
2000

100
7
245
2200
1700
2200
2150
2100

200
7
330
2300
1750
2300
2200
2100

300
–
380
2200
1800
2400
2250
2150

400
–
410
2200
1750
2600
2000
2000

500
–
440
2300
1850
2700
1900
2212

600
–
460
2400
1800
2500
1700
2519

700
–
460
2400
1600
2490
1550
2607

800
–
460
2400
1600
2540
1400
2553

900
–
460
2300
1600
2472
1200
2567

1000
–
475
2300
1700
2485
1150
2439

1500
–
490
2400
1550
2620
900
2479

2000
–
350
2400
1400
2396
550
2200

2500
–
280
2100
1300
2453
490
2262

3000
–
280
1900
1250
2502
большой разброс
2138

5000
–
большой разброс
1600
1100
2519
–
2235

8000
–
–
1200
большой разброс
2451
–
2100

10Β 000
–
–
большой разброс
–
2200
–
2200

11Β 000
–
–
–
–
2200
–
2122

12Β 000
–
–
–
–
970
–
1958

13Β 000
–
–
–
–
730
–
1897

14Β 000
–
–
–
–
590
–
1466

15Β 000
–
–
–
–
532
–
1281

Из Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΡˆΠ΅ 8000 ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… запросов Ρƒ нас остаётся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π΅ ΠΈΠ³Ρ€ΠΎΠΊΠ°: ΠΏΡ€Π΅-Ρ„ΠΎΡ€ΠΊ ΠΈ epoll. Π‘ ростом Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ сСрвСр Π½Π° Π±Π°Π·Π΅ poll Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ…ΡƒΠΆΠ΅, Ρ‡Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ. АрхитСктура с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ созданиСм ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² составляСт Π΄ΠΎΡΡ‚ΠΎΠΉΠ½ΡƒΡŽ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΡŽ epoll: это ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ, насколько Ρ…ΠΎΡ€ΠΎΡˆΠΎ ядро Linux ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚ большоС количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ZeroHTTPd

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ZeroHTTPd здСсь. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.

ZeroHTTPd
β”‚
β”œβ”€β”€ 01_iterative
β”‚   β”œβ”€β”€ main.c
β”œβ”€β”€ 02_forking
β”‚   β”œβ”€β”€ main.c
β”œβ”€β”€ 03_preforking
β”‚   β”œβ”€β”€ main.c
β”œβ”€β”€ 04_threading
β”‚   β”œβ”€β”€ main.c
β”œβ”€β”€ 05_prethreading
β”‚   β”œβ”€β”€ main.c
β”œβ”€β”€ 06_poll
β”‚   β”œβ”€β”€ main.c
β”œβ”€β”€ 07_epoll
β”‚    └── main.c
β”œβ”€β”€ Makefile
β”œβ”€β”€ public
β”‚   β”œβ”€β”€ index.html
β”‚   └── tux.png
└── templates
    └── guestbook
        └── index.html

ΠšΡ€ΠΎΠΌΠ΅ сСми Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ для всСх Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€, Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ Π΄Π²Π΅: public ΠΈ templates. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π»Π΅ΠΆΠΈΡ‚ Ρ„Π°ΠΉΠ» index.html ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π°. Π’ΡƒΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΏΠ°ΠΏΠΊΠΈ, ΠΈ ZeroHTTPd Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π²Ρ‹Π΄Π°Ρ‚ΡŒ эти статичСскиС Ρ„Π°ΠΉΠ»Ρ‹. Если path Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ соотвСтствуСт ΠΏΡƒΡ‚ΠΈ Π² ΠΏΠ°ΠΏΠΊΠ΅ public, Ρ‚ΠΎ ZeroHTTPd ΠΈΡ‰Π΅Ρ‚ Π² этом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Ρ„Π°ΠΉΠ» index.html. ΠšΠΎΠ½Ρ‚Π΅Π½Ρ‚ для гостСвой ΠΊΠ½ΠΈΠ³ΠΈ гСнСрируСтся динамичСски. Π£ Π½Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ главная страница, Π° Π΅Ρ‘ содСрТимоС основано Π½Π° Ρ„Π°ΠΉΠ»Π΅ ‘templates/guestbook/index.html’. Π’ ZeroHTTPd Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ динамичСскиС страницы для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ. ИдСя Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² этом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ZeroHTTPd ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.

Для сборки всСх сСми сСрвСров запуститС make all ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня — ΠΈ всС Π±ΠΈΠ»Π΄Ρ‹ появятся Π² этом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΡ‰ΡƒΡ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ public ΠΈ templates Π² Ρ‚ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ.

Linux API

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² этом Ρ†ΠΈΠΊΠ»Π΅ статСй, Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² Linux API. Однако Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ большС Π½Π° эту Ρ‚Π΅ΠΌΡƒ, Π² Π‘Π΅Ρ‚ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ справочных рСсурсов. Π₯отя ΠΌΡ‹ коснёмся Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ Linux API, нашС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ сосрСдоточСно Π² основном Π½Π° процСссах, ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…, событиях ΠΈ сСтСвом стСкС. ΠšΡ€ΠΎΠΌΠ΅ ΠΊΠ½ΠΈΠ³ ΠΈ статСй ΠΏΡ€ΠΎ Linux API, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΌΠ°Π½Ρ‹ для систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ

Одно Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ. ВСорСтичСски ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ связи. Π£ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅Π±-сСрвис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, с Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° Π² нСсколько миллисСкунд, Π½ΠΎ ΠΎΠ½ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ»ΠΎΡ…ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ нСсколько сСкунд для ΠΎΡ‚Π²Π΅Ρ‚Π°, Π½ΠΎ ΠΎΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π½Π° дСсятки для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ дСсятков тысяч ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, сочСтаниС высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈΒ β€” ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠΎΡ‰Π½ΠΎΠ΅ сочСтаниС. Π’Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ прилоТСния Π² Ρ†Π΅Π»ΠΎΠΌ экономно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ рСсурсы ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, эффСктивно ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ большС ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° сСрвСрС, сниТая Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹.

Π—Π°Π΄Π°Ρ‡ΠΈ CPU ΠΈ I/O

НаконСц, Π² вычислСниях всСгда Π΄Π²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° Π·Π°Π΄Π°Ρ‡: для I/O ΠΈ CPU. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ запросов Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ (сСтСвой Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄), обслуТиваниС Ρ„Π°ΠΉΠ»ΠΎΠ² (сСтСвой ΠΈ дисковый Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄), ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… (сСтСвой ΠΈ дисковый Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄)Β β€” всё это дСйствия I/O. НСкоторыС запросы ΠΊ Π‘Π” ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ CPU (сортировка, вычислСниС срСднСго значСния ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΈ Ρ‚.Β Π΄.). Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ ΠΏΠΎ максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΌΡƒ I/O, Π° процСссор Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π° ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ. Когда Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π΅ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ CPU, скорСС всСго, это ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ ΠΏΠ»ΠΎΡ…ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ прилоТСния. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ рСсурсы CPU тратятся Π½Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ процСссами ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста — ΠΈ это Π½Π΅ совсСм ΠΏΠΎΠ»Π΅Π·Π½ΠΎ. Если Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, прСобразования Π°ΡƒΠ΄ΠΈΠΎΡ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ машинного обучСния, Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΌΠΎΡ‰Π½Ρ‹Ρ… рСсурсов CPU. Но для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ это Π½Π΅ Ρ‚Π°ΠΊ.

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ сСрвСрных Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ…

  1. Π§Π°ΡΡ‚ΡŒ I. Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°
  2. Π§Π°ΡΡ‚ΡŒ II. Π€ΠΎΡ€ΠΊ-сСрвСры
  3. Π§Π°ΡΡ‚ΡŒ III. ΠŸΡ€Π΅-Ρ„ΠΎΡ€ΠΊ сСрвСры
  4. Π§Π°ΡΡ‚ΡŒ IV. CΠ΅Ρ€Π²Π΅Ρ€Ρ‹ c ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ выполнСния
  5. Π§Π°ΡΡ‚ΡŒ V. Π‘Π΅Ρ€Π²Π΅Ρ€Ρ‹ с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ созданиСм ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
  6. Π§Π°ΡΡ‚ΡŒ VI. АрхитСктура Π½Π° Π±Π°Π·Π΅ poll
  7. Π§Π°ΡΡ‚ΡŒ VII. АрхитСктура Π½Π° Π±Π°Π·Π΅ epoll

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com