Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡

Асинхронный ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΏΡƒΠ» Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠ² Π½Π° Perl

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡

Π’ Ρ€Π°Π±ΠΎΡ‚Π΅ Π²Π΅Π±-сСрвиса, Π΄Π° ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… систСм, часто встрСчаСтся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ выполнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. Для этого ΠΏΠΈΡˆΡƒΡ‚ скрипты β€” Π²ΠΎΡ€ΠΊΠ΅Ρ€Ρ‹ β€” ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Π΅Ρ€ΡƒΡ‚ список ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π·Π°Π΄Π°Ρ‡ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ β€” с ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠŸΠΎΠ½ΡΡ‚Π½ΠΎΠ΅ Π΄Π΅Π»ΠΎ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ, ΠΊΠΎΠ³Π΄Π° всС Π·Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ быстро ΠΈ Π±Π΅Π· ΠΏΡ€ΠΎΠ²ΠΎΠ»ΠΎΡ‡Π΅ΠΊ.

Для ускорСния выполнСния Π·Π°Π΄Π°Ρ‡ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΄Π²Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

ΠœΠΎΠ΄ΡƒΠ»ΡŒ AnyEvent

Для программирования Π² асинхронном Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π² ΠŸΠ΅Ρ€Π»Π΅ Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ AnyEvent.

На всякий случай слСдуСт ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ AnyEvent являСтся ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΎΠΉ Π½Π°Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌΠΈ асинхронными модулями. Как DBI являСтся ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΎΠΉ ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ интСрфСйсом ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ AnyEvent являСтся ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΎΠΉ ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ интСрфСйсом ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ рСализациям асинхронных Π΄Π²ΠΈΠΆΠΊΠΎΠ².

Для AnyEvent имССтся ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство всСвозмоТных Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ, Π² Ρ‚ΠΎΠΌ числС Π΅ΡΡ‚ΡŒ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ для написания ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ β€” ΠΌΠΎΠ΄ΡƒΠ»ΡŒ AnyEvent::Fork::Pool.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ AnyEvent::Fork::Pool прСдоставляСт простой способ создания ΠΏΡƒΠ»Π° Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ Π² асинхронном ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.

Π‘ΠΊΡ€ΠΈΠΏΡ‚

Рассмотрим скрипт anyevent_pool.pl:

НСсмотря Π½Π° нСбольшой объСм, этот скрипт прСдставляСт собой ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ΅ асинхронноС ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π΅Π³ΠΎ ΠΏΠΎ частям.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

Π­Ρ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π·Π°Π΄Π°ΡŽΡ‚ связку ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡƒΠ»ΠΎΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»ΡΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ. ΠŸΡƒΠ» β€” ΠΎΠ½ ΠΎΠ΄ΠΈΠ½ Π½Π° всСх, Π° Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅. Π­Ρ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡƒΠ»Ρƒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠ΄ (ΠΊΠ°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· ΠΊΠ°ΠΊΠΎΠ³ΠΎ модуля) Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ для выполнСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ.

НапримСр, Ρƒ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Text для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ тСкста, Π° Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ length ΠΈ trim. И Π΅Ρ‰Π΅ Ρƒ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Image, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ resize ΠΈ crop. ΠŸΡƒΠ»Ρƒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π±Π΅Π· Ρ€Π°Π·Π½ΠΈΡ†Ρ‹, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ ваши Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ устроСны. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ просто ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΠ»Ρƒ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ ΠΎΠ½ΠΈ находятся ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ, ΠΈ ΠΏΡƒΠ» ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚.

Π’Π°ΠΆΠ½ΠΎ! ΠœΠΎΠ΄ΡƒΠ»ΡŒ Π²ΠΎΡ€ΠΊΠ΅Ρ€Π° Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² скриптС Ρ‡Π΅Ρ€Π΅Π· Β«use WorkerΒ». ΠŸΡƒΠ» сам автоматичСски ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΈΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²ΠΎΡ€ΠΊΠ΅Ρ€Π°, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ модуля Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ядСр

Для ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ выполнСния Π·Π°Π΄Π°Ρ‡ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ, сколько Π² систСмС имССтся ядСр. Π–Π΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ, Ρ€Π°Π²Π½ΡΠ»ΠΎΡΡŒ количСству ядСр. Если ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ мСньшС β€” Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ядра Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΡΡ‚Π°ΠΈΠ²Π°Ρ‚ΡŒ зря, Ссли ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ большС β€” Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΡΡ‚Π°Π²Π°Ρ‚ΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈ вмСсто ускорСния получатся ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π½Π° Π΄ΠΈΡΠΏΠ΅Ρ‚Ρ‡Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ.

Если ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ количСство ядСр Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС это 1.

ПояснСния ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ:

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΡƒΠ»Ρƒ

ΠŸΡƒΠ»Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ послСдним ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ коллбэк. Коллбэк β€” это анонимная функция, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΠΎΡ€ΠΊΠ΅Ρ€ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π·Π°Π΄Π°Ρ‡Ρƒ. Π’ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²ΠΎΡ€ΠΊΠ΅Ρ€Π°.

Π’ нашСм случаС функция-коллбэк просто ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ всС, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚.

Π’ зависимости ΠΎΡ‚ ситуации вмСсто строки ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ всё, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ β€” имя Ρ„Π°ΠΉΠ»Π°, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ записи Π² Π±Π°Π·Π΅, матСматичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ссылка Π½Π° ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ структуру с данными… ΠΊΠΎΡ€ΠΎΡ‡Π΅ говоря β€” всё, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. ΠŸΡƒΠ»Ρƒ Π±Π΅Π· Ρ€Π°Π·Π½ΠΈΡ†Ρ‹, Ρ‡Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚, ΠΎΠ½ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΡƒΠ» просто ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²ΠΎΡ€ΠΊΠ΅Ρ€Ρƒ, Π° Π²ΠΎΡ‚ Ρ‚ΠΎΡ‚ ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ с этим Π΄Π΅Π»Π°Ρ‚ΡŒ.

Запуск Π΄Π²ΠΈΠΆΠΊΠ°

Π­Ρ‚Π° строка Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ AnyEvent, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π² Ρ€Π°Π±ΠΎΡ‚Ρƒ событийный Π΄Π²ΠΈΠΆΠΎΠΊ ΠΈ Π΄Π°Π»Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ бСсконСчно.

Π’ этом мСстС скрипт зациклится. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ способа остановки ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· бСсконСчного Ρ†ΠΈΠΊΠ»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π·Π°Π΄Π°Ρ‡. Вопрос условного Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° AnyEvent являСтся Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΌ, Π° я здСсь Ρ…ΠΎΡ‡Ρƒ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ частный случай использования ΠΏΡƒΠ»Π°. ΠŸΡ€ΠΎ условный Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚ΡƒΡ‚.

Π‘Π°ΠΌ Π²ΠΎΡ€ΠΊΠ΅Ρ€

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос β€” Π° Π³Π΄Π΅ ΠΆΠ΅, собствСнно, сам Π²ΠΎΡ€ΠΊΠ΅Ρ€? Π“Π΄Π΅ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ нСпосрСдствСнно Ρ€Π°Π±ΠΎΡ‚Ρƒ?

Π’ΠΎΡ‚ ΠΊΠΎΠ΄ модуля Worker:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” init ΠΈ work.

Ѐункция init ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π²ΠΎΡ€ΠΊΠ΅Ρ€. Π’ нашСм случаС функция ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π»ΠΎΠ³-Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π»Π΅Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ work. Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅ β€” функция init являСтся Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ, Π² нашСм случаС я сдСлал Π΅Π΅ просто для наглядности.

Π’ нашСм случаС функция выполняСт ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ β€” вычисляСт Π΄Π»ΠΈΠ½Ρƒ строки. Для Π±ΠΎΠ»Π΅Π΅ наглядной дСмонстрации Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²ΠΎΡ€ΠΊΠ΅Ρ€Π° я Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ†ΠΈΠΊΠ» с сСкундной Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ строку Π² Π»ΠΎΠ³ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·, сколько Π² строкС Π±ΡƒΠΊΠ².

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ β€” функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π²Π° значСния β€” саму строку ΠΈ Π΅Π΅ Π΄Π»ΠΈΠ½Ρƒ. ИмСнно эти Π΄Π²Π° значСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Π² коллбэк, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° этапС постановки Π·Π°Π΄Π°Ρ‡ ΠΏΡƒΠ»Ρƒ (Π° Π² коллбэкС, ΠΊΠ°ΠΊ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, эти значСния Π±ΡƒΠ΄ΡƒΡ‚ просто Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½Ρ‹).

Π’ΠΎΡ‚, собствСнно, ΠΈ вСсь ΠΊΠΎΠ΄.

ЗапускаСм ΠΏΡƒΠ»

Π’Π΅ΠΏΠ΅Ρ€ΡŒ запустим наш ΠΏΡƒΠ» ΠΈ посмотрим, Ρ‡Ρ‚ΠΎ получится:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡

Π’ΡƒΡ‚ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡƒΠ»Π°. МоТно Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ порядок Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² отличаСтся ΠΎΡ‚ порядка строк, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² Ρ†ΠΈΠΊΠ»Π΅ Π² скриптС. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° понятна β€” Ρƒ строк разная Π΄Π»ΠΈΠ½Π°, поэтому Π²ΠΎΡ€ΠΊΠ΅Ρ€Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ строки с Ρ€Π°Π·Π½ΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ. Π§Π΅ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ Π·Π°Π΄Π°Ρ‡Π° β€” Ρ‚Π΅ΠΌ ΠΎΠ½Π° быстрСС выполняСтся.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим Π½Π΅ просто Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, Π½ΠΎ ΠΈ Π½Π° процСсс Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠ². Для этого Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΊΠ½Π΅ запустим tail для Π»ΠΎΠ³-Ρ„Π°ΠΉΠ»Π°:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ β€” Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ выводятся Π²ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠΊΡƒ, Ρ‚Π°ΠΊ-ΠΊΠ°ΠΊ Π·Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π‘Π»Π΅Π²Π° Π²ΠΈΠ΄Π½Ρ‹ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ процСссов β€” Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ задСйствованы 4 процСсса. Π£ мСня Π² систСмС 4 ядра, поэтому ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ всС 4 Π·Π°Π΄Π°Ρ‡ΠΈ.

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, посмотрим Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ процСссов:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡

Π’Π°ΠΊ выглядит Π΄Π΅Ρ€Π΅Π²ΠΎ процСссов нашСго ΠΏΡƒΠ»Π°.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π² спискС ΠΈΠ΄Π΅Ρ‚ скрипт, Π΄Π°Π»Π΅Π΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΡƒΠ»ΠΎΠ² (Π΄Π°-Π΄Π°, ΠΏΡƒΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько ΡˆΡ‚ΡƒΠΊ), ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΡƒΠ»Π°, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π²ΠΎΡ€ΠΊΠ΅Ρ€Ρ‹.

Если Π½Π΅ ΠΏΠΎΠ»Π΅Π½ΠΈΡ‚ΡŒΡΡ ΠΈ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ процСссов, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠ² ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ Π² Π»ΠΎΠ³-Ρ„Π°ΠΉΠ»Π΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡƒΠ» фрилансСров ΠΈ Π²Ρ‹ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ систСму ΠΌΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ. КСйс ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ «Аравия»

Π‘ΠΈΡ€ΠΆΠ° фриланса FL.ru ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΡΠ΅Ρ€ΠΈΡŽ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ прСдставитСли ΠΌΠ°Π»ΠΎΠ³ΠΎ, срСднСго ΠΈ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠ³ΠΎ бизнСса Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎ кСйсах Ρ€Π°Π±ΠΎΡ‚Ρ‹ с фрилансСрами. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ бизнСс-совСтами подСлилась Π˜Ρ€ΠΈΠ½Π° Π›ΡƒΠ±Π°Π½Π΅Ρ†, HR-Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ «Аравия» β€” российского производитСля ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ космСтики.

Наша компания β€” «Аравия» β€” российский ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ космСтики, Π»ΠΈΠ΄Π΅Ρ€ Π² своСм сСгмСнтС. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄Π°Π²Π°Π»ΠΈ наш ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ экспСртам Π±ΡŒΡŽΡ‚ΠΈ-индустрии: космСтологам, мастСрам индустрии красоты. БСйчас ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌ ΠΈ Ρ€ΠΎΠ·Π½ΠΈΡ‡Π½ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, выпустив для ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ сСрии космСтики, ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ задСйствуСм соврСмСнныС ΠΊΠ°Π½Π°Π»Ρ‹ ΠΏΡ€ΠΎΠ΄Π°ΠΆ – российскиС ΠΈ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹Π΅ маркСтплСйсы. Π‘ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ Π½ΠΎΠ²Ρ‹Ρ… бизнСс-Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ростом появилась Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΡƒΡΠΈΠ»ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π½ΠΎΠ²Ρ‹ΠΌΠΈ ΠΊΠ°Π΄Ρ€Π°ΠΌΠΈ. БСйчас Ρƒ нас порядка 470 ΡˆΡ‚Π°Ρ‚Π½Ρ‹Ρ… сотрудников ΠΈ 18 Π²Π½Π΅ΡˆΡ‚Π°Ρ‚Π½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ† β€” фрилансСров. Π’ основном ΠΌΡ‹ ΠΎΡ‚Π΄Π°Π΅ΠΌ ΠΈΠΌ ΠΊΠΎΠΏΠΈΡ€Π°ΠΉΡ‚ΠΈΠ½Π³, Π΄ΠΈΠ·Π°ΠΉΠ½, ΠΌΠ°Ρ€ΠΊΠ΅Ρ‚ΠΈΠ½Π³ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ.

ΠœΡ‹ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π² сфСрС ΠΌΠ°Ρ€ΠΊΠ΅Ρ‚ΠΈΠ½Π³ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΉ β€” Ρ‡Π°ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ этого направлСния Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ Π½Π° фриланс ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ Ρ‚Π°ΠΊΠΈΡ… спСциалистов Π² свою бизнСс-модСль. ΠœΡ‹ с нуля создали постоянный ΠΏΡƒΠ» ΠΊΠΎΠΏΠΈΡ€Π°ΠΉΡ‚Π΅Ρ€ΠΎΠ² ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с Π½ΠΈΠΌΠΈ ΡƒΠΆΠ΅ 4–5 Π»Π΅Ρ‚.

Π§Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈ создании ΠΏΡƒΠ»Π°? Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°ΠΉΡ‚Π΅Ρ€Π° свои ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ стороны: ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚ быстро, ΠΊΡ‚ΠΎ-Ρ‚ΠΎ большС ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ Π² бизнСс-ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Ρ‹Π½ΠΊΠ°, Π° ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ разбираСтся Π² составах космСтики ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΆΠΈΠ²ΠΎΠΉ ΠΎΠ±Π·ΠΎΡ€. ВсС эти Π½Π°Π²Ρ‹ΠΊΠΈ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ заносим Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ быстро ΡΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π΄Π΅Π΄Π»Π°ΠΉΠ½Π°Ρ… ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ.

ПозТС ΠΌΡ‹ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠ»ΠΈ свой ΠΏΡƒΠ» фрилансСров ΠΈ стали ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΈΡ… для Π·Π°Π΄Π°Ρ‡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π΄ΠΈΠ·Π°ΠΉΠ½Π°, e-commerce-Π·Π°Π΄Π°Ρ‡ ΠΈ ΠΏΠΎΠ΄Π±ΠΎΡ€Π° сотрудников (HR-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ).

CСйчас для нас самыС дСйствСнныС инструмСнты поиска фрилансСров β€” Facebook ΠΈ Telegram-ΠΊΠ°Π½Π°Π»Ρ‹. ΠœΡ‹ сформировали список Ρ‚Π°ΠΊΠΈΡ… ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΎΠΊ, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΉ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ бСсплатно. Π§Π°ΡΡ‚ΡŒ вакансий ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ Π² ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏΠ°Ρ… ΠΈ ΠΊΠ°Π½Π°Π»Π°Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² β€œΠ Π°Π±ΠΎΡ‚Π° с Π΄ΠΈΠ΄ΠΆΠΈΡ‚Π°Π» ΠΈ мСдиа” ΠΈ β€œΠΠΎΡ€ΠΌ работа”, Π° для поиска ΡƒΠ·ΠΊΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… спСциалистов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ тСматичСскиС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€œPR in Beauty” ΠΈΠ»ΠΈ β€œJob in IT&Digital”.

Π§ΡƒΡ‚ΡŒ Ρ€Π΅ΠΆΠ΅ для поиска Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π°ΠΉΡ‚Π΅Ρ€ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π±ΠΈΡ€ΠΆΠΈ Etext, ΠœΠΈΡ€Π°Π»ΠΈΠ½ΠΊΡ. А для Ρ‚Π°ΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡, ΠΊΠ°ΠΊ Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, FL.ru. Π’ΠΎΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½Π°ΡˆΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Π±Ρ€Π΅Π½Π΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сдСлал фрилансСр с этой Π±ΠΈΡ€ΠΆΠΈ.

ΠœΡ‹ Π²Π΅Π΄Π΅ΠΌ свой ΠΊΠ°Π½Π°Π» Π² ЯндСкс.Π”Π·Π΅Π½. Π­Ρ‚ΠΎ нСбольшиС ΡΡ‚Π°Ρ‚ΡŒΠΈ с совСтами ΠΈ Π³Π°ΠΉΠ΄Π°ΠΌΠΈ Π½Π° Ρ‚Π΅ΠΌΡƒ ΡƒΡ…ΠΎΠ΄Π°. ΠœΡ‹ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ»ΠΈ фрилансСра для написания ΡΡ‚Π°Ρ‚ΡŒΠΈ. Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ составила всСго 367 Ρ€ΡƒΠ±Π»Π΅ΠΉ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ 1000 ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΉ, 100 ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² Π½Π° страницу с Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, 1 просмотр обошСлся Π² 36 ΠΊΠΎΠΏΠ΅Π΅ΠΊ, Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ β€” Π² 3 рубля. Π­Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ взяли Π·Π° ΠΈΠ΄Π΅Π°Π» Π² дальнСйшСй Ρ€Π°Π±ΠΎΡ‚Π΅.

Π’ Ρ†Π΅Π»ΠΎΠΌ, Ρ‡Ρ‚ΠΎ касаСтся конвСрсии ΠΎΡ‚ фрилансСров, Π΅Π΅ ΠΏΡ€ΠΎΡ‰Π΅ всСго ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ ЯндСкс.Π”Π·Π΅Π½Ρƒ. ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π°Π» ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈ Π²ΠΈΠ·ΡƒΠ°Π», раскрыл Ρ‚Π΅ΠΌΡƒ – ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» CTR ΠΈ дочитывания. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ сразу, Π±Π΅Π· Π³Π°Π΄Π°Π½ΠΈΠΉ Π½Π° ΠΊΠΎΡ„Π΅ΠΉΠ½ΠΎΠΉ Π³ΡƒΡ‰Π΅. Пик Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° ΡΡ‚Π°Ρ‚ΡŒΠΈ Π”Π·Π΅Π½Π° приходятся Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 3 дня ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. БоотвСтствСнно, Ссли ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ, Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Ρ‡Ρ‚ΠΎ этот Π°Π²Ρ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΎΡ‚ нас большС Π·Π°ΠΊΠ°Π·ΠΎΠ² ΠΈ большС Π΄Π΅Π½Π΅Π³.

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΏΠΎ ЯндСкс.Π”Π·Π΅Π½Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡŒΠ·Ρƒ фрилансСров для бизнСса, сколько ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ. НапримСр, Π² Ρ„Π΅Π²Ρ€Π°Π»Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ фрилансСров Π½Π° нашСм ΠΊΠ°Π½Π°Π»Π΅ Π±Ρ‹Π»ΠΎ создано 19 ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΉ. Π‘ Π½ΠΈΡ… ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ 56 подписчиков, 24082 Π΄ΠΎΡ‡ΠΈΡ‚Ρ‹Π²Π°Π½ΠΈΠΉ – это Ρ‚ΠΎ количСство ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ…, Β«ΠΏΡ€ΠΎΠ³Ρ€Π΅Ρ‚Ρ‹Ρ…Β» ΠΏΠΎΠΊΡƒΠΏΠ°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… заинтСрСсовала Ρ‚Π΅ΠΌΠ°, наш ΠΊΠ°Π½Π°Π» ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π² Ρ†Π΅Π»ΠΎΠΌ.

Однако Π½Π΅ всСгда ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с фрилансСрами Ρ‚Π°ΠΊ Π³Π»Π°Π΄ΠΎΠΊ, ΠΊΠ°ΠΊ Π² истории Π²Ρ‹ΡˆΠ΅. Π’ самом Π½Π°Ρ‡Π°Π»Π΅ ΠΌΡ‹ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π»ΠΈ ошибки. ΠžΠ΄Π½Π°ΠΆΠ΄Ρ‹ Π½Π°ΠΌ понадобилось провСсти ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΡƒΡŽ ΡΡŠΠ΅ΠΌΠΊΡƒ Π½ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²ΠΎΠΉ Π»ΠΈΠ½Π΅ΠΉΠΊΠΈ. ΠœΡ‹ нашли Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„Π°-фрилансСра ΠΏΠΎ знакомству, ΠΎΠ±Ρ‰Π°Π»ΠΈΡΡŒ Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтях. БпСциалист Π²Ρ‹Π΅Ρ…Π°Π» Π² офис Π½Π° тСстовоС Π·Π°Π΄Π°Π½ΠΈΠ΅, отснял ΠΊΠ°Π΄Ρ€Ρ‹, ΠΈ Π½Π°ΠΌ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ ΠΈΡ… качСство. Он ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ ΠΏΠΎ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Ρƒ, ΠΌΡ‹ просто обсудили ΠΏΡ€ΠΈ Π»ΠΈΡ‡Π½ΠΎΠΉ бСсСдС ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ, послС ΠΏΠ°Ρ€Ρƒ Ρ€Π°Π· списались Π² мСссСндТСрС. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Π΄Ρ€Ρ‹ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄ΠΎΠΌΠ°, ΠΌΡ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ ΠΈΡ… ΠΊΡƒΡ€ΡŒΠ΅Ρ€ΠΎΠΌ. ПослС этого Π½Π° связь Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ Π½Π΅ Π²Ρ‹ΡˆΠ΅Π» ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ², соотвСтствСнно, Π½Π΅ Π²Π΅Ρ€Π½ΡƒΠ».

Π”ΠΎΠ²Π΅Ρ€Ρ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ стоила Π½Π°ΠΌ порядка 15 000 Ρ€ΡƒΠ±Π»Π΅ΠΉ ΠΏΡ€Π΅Π΄ΠΎΠΏΠ»Π°Ρ‚Ρ‹ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„Ρƒ ΠΈ ΠΎΠΊΠΎΠ»ΠΎ 5000 Ρ€ΡƒΠ±Π»Π΅ΠΉ Π·Π° ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ, Π½ΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅ β€” Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ экстрСнно ΠΈΡΠΊΠ°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„Π° ΠΈ ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ сроки запуска Ρ€Π΅ΠΊΠ»Π°ΠΌΠ½ΠΎΠΉ ΠΊΠ°ΠΌΠΏΠ°Π½ΠΈΠΈ. Π’Π°ΠΊ ΠΌΡ‹ ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ Π² значимости Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π½Ρ‹Ρ… ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π² с Ρ‡Π΅Ρ‚ΠΊΠΈΠΌ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ сроков, Π’Π—, условий ΠΎΡ‚Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ.

МногиС ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ привлСчСния фрилансСров, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ смогут ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈΡ… качСство. Для сСбя ΠΌΡ‹ нашли Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ΠœΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ€Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚. Π•Π³ΠΎ Ρ†Π΅Π»ΡŒ β€” Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ всС этапы сотрудничСства.

Π Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя:

МногиС Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ с фрилансСрами ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π½Π΅ Π·Π½Π°ΡŽΡ‚ всСх нюансов сотрудничСства, Π² особСнности β€” Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ сопровоТдСния. Π’ этом случаС ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ БСзопасной Π‘Π΄Π΅Π»ΠΊΠΈ, Ссли Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π½Π° Π±ΠΈΡ€ΠΆΠ΅. Π“Π»Π°Π²Π½Ρ‹Π΅ возмоТности β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Π΄Π΅Π½Π΅Π³, Ссли Ρ€Π°Π±ΠΎΡ‚Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π½Π΅ ΠΏΠΎ Π’Π— ΠΈΠ»ΠΈ Π½Π΅ Π² срок, Π° Ρ‚Π°ΠΊΠΆΠ΅ автоматичСскоС составлСниС Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°, Π°ΠΊΡ‚ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Поиском фрилансСров Π½Π° Π±ΠΈΡ€ΠΆΠ°Ρ… ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ своСго ΠΏΡƒΠ»Π° Ρƒ нас Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ Ρ‚Π΅Ρ… ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят ΡƒΡΠΈΠ»ΠΈΡ‚ΡŒ направлСния. ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ объявлСний ΠΈ вакансий Π² соцсСтях занимаСтся HR-ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅.

Π’Ρ‹Π±ΠΎΡ€ добросовСстных фрилансСров ΠΌΡ‹ осущСствляСм ΠΏΠΎ Ρ‡Π΅ΠΊ-листу:

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ для ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с фрилансСрами β€” ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ процСсс, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉ усилий ΠΈ вовлСчСнности для эффСктивного Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

НСобходимо Π½Π°ΠΉΡ‚ΠΈ Π³Ρ€Π°Π½ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹, с ΠΎΠ΄Π½ΠΎΠΉ стороны, фрилансСр Ρ€Π°Π±ΠΎΡ‚Π°Π» Π² ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎΠΌ для сСбя Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π° с Π΄Ρ€ΡƒΠ³ΠΎΠΉ – соблюдал Ρ‡Π΅Ρ‚ΠΊΠΎΠ΅ Π’Π—, Ρ€Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ Π΄Π΅Π΄Π»Π°ΠΉΠ½Ρ‹. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΌΠΎΠΆΠ½ΠΎ бСсконСчно ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΡƒΡŽ ΠΏΠΎΠΌΠΈΠ½ΡƒΡ‚Π½ΡƒΡŽ ΠΎΡ‚Ρ‡Π΅Ρ‚Π½ΠΎΡΡ‚ΡŒ, Π½ΠΎ ΠΌΡ‹ стараСмся Π½Π΅ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ процСсс: вСдь ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ фрилансСры Ρ‚ΠΎΠΆΠ΅ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ нас.

Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ удСляСм Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΡŽ фрилансСров. ВсСх, ΠΊΡ‚ΠΎ сотрудничаСт с Π½Π°ΠΌΠΈ Π±ΠΎΠ»Π΅Π΅ Π³ΠΎΠ΄Π°, ΠΌΡ‹ Π·ΠΎΠ²Π΅ΠΌ Π½Π° ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ мСроприятия ΠΈ Π΄Π°Ρ€ΠΈΠΌ ΠΏΠΎΠ΄Π°Ρ€ΠΎΡ‡Π½Ρ‹Π΅ сСртификаты Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡŽ ΠΊΠΎ дню роТдСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ отправляСм ΠΊΡƒΡ€ΡŒΠ΅Ρ€ΠΎΠΌ/ΠΏΠΎΡ‡Ρ‚ΠΎΠΉ Π»ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ партнСрскиС ΠΏΠΎΠ΄Π°Ρ€ΠΊΠΈ Π½Π° Новый Π³ΠΎΠ΄. МногиС становятся «амбассадорами» нашСго Π±Ρ€Π΅Π½Π΄Π°, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ Π² соцсСтях ΠΈ Π»ΠΈΡ‡Π½ΠΎ. Попадая Π² наш ΠΏΡƒΠ», фрилансСры ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΈΡ… ΠΆΠ΄ΡƒΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ интСрСсныС Π·Π°Π΄Π°Ρ‡ΠΈ, Π½ΠΎ ΠΈ мотивация ΠΈ ΡƒΠ²Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ПонимаСм соСдинСния ΠΈ ΠΏΡƒΠ»Ρ‹

ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².: Π°Π²Ρ‚ΠΎΡ€ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ β€” тСхничСский Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€ Sudhir Jonathan β€” рассказываСт ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Ρ‚Π΅Ρ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ², с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ сталкиваСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈ систСмный администратор. Однако Π΄ΠΎ возникновСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… (ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° довольно спСцифичных) ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π½Π΅ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Β«ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌΒ». Автор устраняСт этот ΠΏΡ€ΠΎΠ±Π΅Π», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ популярныС Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ, сСрвСры Π‘Π” ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² качСствС понятных ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» Π·Π°Π΄Π°Ρ‡

БоСдинСния β€” это скрытый ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Π΅ систСмы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для общСния Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Они стали Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ нашСй ΠΆΠΈΠ·Π½ΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ часто Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ, насколько ΠΎΠ½ΠΈ Π²Π°ΠΆΠ½Ρ‹, Π½Π΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΈ тСрпят Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ. Часто ΠΌΡ‹ Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ ΠΎ Π½ΠΈΡ… Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. ΠŸΡ€ΠΈ этом ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½Π° проявляСтся массовым ΠΎΡ‚ΠΊΠ°Π·ΠΎΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Ρ‚ΠΎ врСмя, ΠΊΠΎΠ³Π΄Π° систСмы Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ сильнСС всСго. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ соСдинСния Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ²ΡΡŽΠ΄Ρƒ ΠΈ ΠΎΠ½ΠΈ Π²Π°ΠΆΠ½Ρ‹ практичСски для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ систСмы, стоит ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΈΡ… ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅.

БоСдинСния β€” Ρ‡Ρ‚ΠΎ это?

Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ β€” это ΡΠ²ΡΠ·ΡƒΡŽΡ‰Π΅Π΅ Π·Π²Π΅Π½ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя систСмами, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΠΈΠΌ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½ΡƒΠ»Π΅ΠΉ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†: ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π±Π°ΠΉΡ‚Ρ‹.

Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ располоТСны систСмы ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ, комбинация Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ обСспСчСния Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ физичСскоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, абстрагируя Π΅Π΅. НапримСр, ΠΏΡ€ΠΈ взаимодСйствии Π΄Π²ΡƒΡ… Unix-процСссов Π·Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΏΡ€ΠΈΡ‘ΠΌ/доставку Π±Π°ΠΉΡ‚ΠΎΠ² с ΠΎΠ±Π΅ΠΈΡ… сторон ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ систСма мСТпроцСссного взаимодСйствия (IPC). Если систСмы располоТСны Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…, ΠΎΠ½ΠΈ скорСС всСго Π±ΡƒΠ΄ΡƒΡ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ TCP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ обСспСчит ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ бСспроводной систСмС связи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌΠΈ. Π”Π΅Ρ‚Π°Π»ΠΈ совмСстной Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² для Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈ ΠΏΡ€ΠΈΡ‘ΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ… скорСС относятся ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ стандартизации, ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ систСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ, прСдоставляСмыС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌΠΈ UDP ΠΈ TCP. Π’ΠΎ, ΠΊΠ°ΠΊ эти соСдинСния ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΠΊΠΎΠ½Ρ†ΠΎΠ², являСтся Π±ΠΎΠ»Π΅Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. О Π½Π΅ΠΉ ΠΌΡ‹ ΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ сСйчас.

Π“Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ соСдинСния?

БоСдинСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ прямо сСйчас. Π’Π°Ρˆ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ установил соСдинСниС с Π²Π΅Π±-сСрвСром, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ этот Π±Π»ΠΎΠ³, ΠΈ ΠΏΠΎ Π½Π΅ΠΌΡƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π±Π°ΠΉΡ‚Ρ‹, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ HTML, CSS, JavaScript ΠΈ изобраТСния, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ сСйчас смотритС. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ HTTP/1.1 Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ устанавливал мноТСство соСдинСний с сСрвСром β€” ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» HTTP/2 ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ соСдинСнию (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ). Π’ΠΎ всСх этих случаях Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ выступал ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, Π° сСрвСр Π±Π»ΠΎΠ³Π°, собствСнно, Π±Ρ‹Π» сСрвСром.

Но сСрвСр, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Ρ‚Π°ΠΊΠΆΠ΅ устанавливал соСдинСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ эту страницу. Π’Π°ΠΊ, ΠΎΠ½ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» Π΅ΠΉ запрос, содСрТащий URL страницы. Π’ ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π΅Ρ‘ содСрТимоС. Π’ Π΄Π°Π½Π½ΠΎΠΌ сцСнарии сСрвСр ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ выступал ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, Π° Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… β€” сСрвСром. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, сСрвСр ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠ³ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ соСдинСния с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ сторонними сСрвисами, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ сСрвис подписки ΠΈΠ»ΠΈ ΠΎΠΏΠ»Π°Ρ‚Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ сСрвис опрСдСлСния мСстополоТСния.

ΠžΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«ΠΎΡ‚Π³Ρ€ΡƒΠ·ΠΊΡƒΒ» статичСских Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ JS, CSS ΠΈ изобраТСния, ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ CDN-систСма, располоТСнная ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ ΠΈ сСрвСром Π±Π»ΠΎΠ³Π°. Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€ (ΠΊΠ»ΠΈΠ΅Π½Ρ‚) установил соСдинСниС с блиТайшим сСрвСром CDN, ΠΈ, Ссли Π½ΡƒΠΆΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π΅ оказалось Π² кэшС CDN-сСрвСра, Ρ‚ΠΎΡ‚ (выступая ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚) связался с сСрвСром Π±Π»ΠΎΠ³Π° (сСрвСр).

Если Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° систСмы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΈΠ»ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ создаём, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ мноТСство всСвозмоТных соСдинСний. Часто ΠΎΠ½ΠΈ скрыты ΠΎΡ‚ Π³Π»Π°Π·, ΠΈ, забывая ΠΎΠ± ΠΈΡ… Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌ сущСствовании ΠΈ ограничСниях, ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΠ³Π΄Π° мСньшС всСго этого оТидаСшь.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π²Π°ΠΆΠ½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° соСдинСний?

ПониманиС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ вСдСтся Ρ€Π°Π±ΠΎΡ‚Π° с соСдинСниями, Π²Π°ΠΆΠ½Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡ… ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ асиммСтрична: ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ, связанныС с созданиСм соСдинСния, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ сСрвСра. Π’ ΠΎΠ΄Π½ΠΎΡ€Π°Π½Π³ΠΎΠ²ΠΎΠΉ (P2P) систСмС это Π½Π΅ Ρ‚Π°ΠΊ, ΠΈ соСдинСния ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ Β«ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΒ» Π½Π° ΠΎΠ±ΠΎΠΈΡ… ΠΊΠΎΠ½Ρ†Π°Ρ…, Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π΅Π΄ΠΊΠΎ. Π’ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ использованиС соСдинСний всСгда ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ сСрвСра, ΠΏΡ€ΠΈ этом ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ, связанныС с созданиСм соСдинСния, Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ сСрвСра.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ соСдинСний, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ²Π΅ΠΆΠΈΡ‚ΡŒ знания ΠΎ способах запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… ΠΈ ΠΎΠ± ΠΈΡ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅.

ΠŸΡ€ΠΈ стартС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ опСрационная систСма запускаСт ΠΊΠΎΠ΄ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ экзСмпляр процСсса. Π’ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ процСсс Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ ядро CPU ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΡ‘ΠΌ памяти, ΠΈ Π½Π΅ дСлится своСй ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π½ΠΈ с ΠΊΠ°ΠΊΠΈΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ процСссами.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ threads (ΠΏΠΎΡ‚ΠΎΠΊΠΈ выполнСния) β€” Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты процСсса, способныС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ совмСстно с процСссом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡ… ΠΏΠΎΡ€ΠΎΠ΄ΠΈΠ» (Ρ‚ΠΎΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ большС памяти для ΠΈΡ… использования).

Π’Π°ΠΊΠΆΠ΅ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ event loop (Ρ†ΠΈΠΊΠ» событий), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выглядит ΠΊΠ°ΠΊ систСма с ΠΎΠ΄Π½ΠΈΠΌ процСссом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отслСТиваСт ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ задания, Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ ΠΈ бСсконСчно пСрСбирая ΠΈΡ…. ΠŸΡ€ΠΈ этом ΠΎΠ½ выполняСт Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ задания ΠΈ пропускаСт Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅.

Π”Ρ€ΡƒΠ³ΠΎΠΉ способ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ использованиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… конструкций, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ fibers (Ρ„Π°ΠΉΠ±Π΅Ρ€Ρ‹), green-threads (Π·Π΅Π»Ρ‘Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ), coroutines (сопрограммы) ΠΈΠ»ΠΈ actors (Π°ΠΊΡ‚ΠΎΡ€Ρ‹). КаТдая ΠΈΠ· этих конструкций Ρ‡ΡƒΡ‚ΡŒ отличаСтся ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… (Π² Ρ‚ΠΎΠΌ числС, Π² смыслС ΠΈΠ·Π΄Π΅Ρ€ΠΆΠ΅ΠΊ), Π½ΠΎ всС ΠΎΠ½ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ процСссом ΠΈ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ соСдинСний, Π΄Π°Π²Π°ΠΉΡ‚Π΅ сначала рассмотрим ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Для сСрвСра ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π² Π΄Π°Π½Π½ΠΎΠΌ случаС) установка TCP-соСдинСния связана с Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ нСбольшого ΠΎΠ±ΡŠΡ‘ΠΌΠ° памяти для Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π°.

Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ PostgreSQL, Π½Π° сторонС сСрвСра ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ соСдинСниС обрабатываСтся ΠΏΡƒΡ‚Ρ‘ΠΌ создания Π½ΠΎΠ²ΠΎΠ³ΠΎ процСсса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ занимаСтся всСми запросами, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠΌΠΈ ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΌΡƒ соСдинСнию. Π’Π°ΠΊΠΎΠΉ процСсс Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ядро процСссора ΠΈ ΠΎΠΊΠΎΠ»ΠΎ 10 Мб памяти (ΠΈΠ»ΠΈ большС).

MySQL для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ создаёт ΠΏΠΎΡ‚ΠΎΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ процСсса. ВрСбования ΠΊ памяти Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π½ΠΈΠΆΠ΅ Π² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π½ΠΎ ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ Π·Π° это приходится постоянным ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ контСкстов.

Redis ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ соСдинСниС ΠΊΠ°ΠΊ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ Π² Ρ†ΠΈΠΊΠ»Π΅ событий, Ρ‡Ρ‚ΠΎ сниТаСт трСбования ΠΊ рСсурсам, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ Π·Π° это приходится Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ соСдинСниС доТидаСтся своСй ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΏΡ€ΠΈ этом Redis ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ запросы строго ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС запрос ΠΊ сСрвСру ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ TCP-соСдинСниС Π² качСствС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (это Π΅ΠΌΡƒ обходится Π΄Ρ‘ΡˆΠ΅Π²ΠΎ β€” нСбольшой ΠΎΠ±ΡŠΡ‘ΠΌ памяти для Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ€Ρ‚). На сторонС сСрвСра ситуация ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ иная:

Если сСрвСр ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ruby on Rails, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ соСдинСниС обрабатываСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, ΠΏΠΎΡ€ΠΎΠΆΠ΄Ρ‘Π½Π½Ρ‹ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ фиксированного числа Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… процСссов (Π² случаС Π²Π΅Π±-сСрвСра Puma), ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΈΠΌ процСссом (Unicorn).

Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ PHP, систСма CGI запускаСт Π½ΠΎΠ²Ρ‹ΠΉ PHP-процСсс для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ соСдинСния, Π° Π±ΠΎΠ»Π΅Π΅ популярная рСализация FastCGI ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ нСсколько Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… процСссов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π½ΠΎΠ²Ρ‹Ρ… соСдинСний.

Π’ случаС Go для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ соСдинСния создаСтся goroutine (Π΄Π΅ΡˆΡ‘Π²Π°Ρ ΠΈ лСгковСсная потокоподобная структура, управляСмая & планируСмая исполняСмой срСдой Go).

Π’ Node.js/Deno входящиС соСдинСния ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ†ΠΈΠΊΠ»Π΅ событий ΠΏΡƒΡ‚Ρ‘ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° запросы ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π·Π° Ρ€Π°Π·.

Π’ систСмах Π²Ρ€ΠΎΠ΄Π΅ Erlang/Elixir ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ соСдинСниС обрабатываСтся Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ β€” Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎΠΉ лСгковСсной ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅-ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ конструкциСй.

АрхитСктуры ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ соСдинСний

Из ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π²Ρ‹ΡˆΠ΅ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ нСсколько Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… стратСгий ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ соСдинСний:

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹. КаТдоС соСдинСниС обрабатываСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ процСссом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»ΠΈΠ±ΠΎ создаСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для этого соСдинСния (CGI, PostgreSQL), Π»ΠΈΠ±ΠΎ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π½Π΅ΠΊΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ доступных процСссов (Unicorn, FastCGI).

ΠŸΠΎΡ‚ΠΎΠΊΠΈ. КаТдоС соСдинСниС обрабатываСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»ΠΈΠ±ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ создаётся, Π»ΠΈΠ±ΠΎ бСрётся ΠΈΠ· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅Π·Π΅Ρ€Π²Π°. ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ распрСдСлСны ΠΏΠΎ нСскольким процСссам, ΠΏΡ€ΠΈ этом всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ эквивалСнтны ΠΌΠ΅ΠΆΠ΄Ρƒ собой (Puma/Ruby, Tomcat/Java, MySQL).

Π¦ΠΈΠΊΠ» событий. КаТдоС соСдинСниС Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ†ΠΈΠΊΠ» событий Π² Π²ΠΈΠ΄Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΈ соСдинСния с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ для чтСния ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ (Node, Redis). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ систСмы β€” однопроцСссныС ΠΈ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Π΅, Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π±Ρ‹Π²Π°ΡŽΡ‚ многопроцСссными, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс дСйствуСт ΠΊΠ°ΠΊ полунСзависимая систСма с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ событий.

Coroutines / Green-Threads / Fibers / Actors. КаТдоС соСдинСниС обрабатываСтся лСгковСсной конструкциСй с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ (Go, Erlang, Scala/Akka).

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ сСрвСр ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ соСдинСния, ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для понимания Π΅Π³ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ. Π”Π°ΠΆΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ использованиС ΠΈΠ»ΠΈ настройка Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ понимания Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ соСдинСния: Redis ΠΈ PostgreSQL, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ сСмантику Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Π»ΠΈΡΡŽΡ‚ ΠΈΡ… ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ соСдинСний. Π‘Π΅Ρ€Π²Π΅Ρ€Ρ‹, основанныС Π½Π° процСссах ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…, ΠΌΠΎΠ³ΡƒΡ‚ Β«ΡƒΠΏΠ°ΡΡ‚ΡŒΒ» ΠΈΠ·-Π·Π° исчСрпания рСсурсов, Ссли ΠΈΡ… максимальноС количСство Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ Π² Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ…. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, установка ΠΏΡ€Π΅Π΄Π΅Π»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½ΠΎΠΌΡƒ нСдоиспользованию сСрвСров ΠΈΠ·-Π·Π° слишком Π½ΠΈΠ·ΠΊΠΈΡ… Π»ΠΈΠΌΠΈΡ‚ΠΎΠ². БистСмы, основанныС Π½Π° Ρ†ΠΈΠΊΠ»Π°Ρ… событий, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Π²Π°ΡŽΡ‚ ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° 64-ядСрных CPU (Ссли, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΈΡ… 64 ΠΊΠΎΠΏΠΈΠΈ Π½Π΅ настроСны Π½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡ‚Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ β€” Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² случаС Π²Π΅Π±-сСрвСров, Π½ΠΎ ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…).

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих способов ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ соСдинСний ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ проявляСт сСбя ΠΏΡ€ΠΈ использовании Π² сСрвСрах ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ·-Π·Π° распрСдСлённой ΠΈΠ»ΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ систСмы. НапримСр, сСрвСры ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ подходят для Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ β€” ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ΄ΠΈΠ½ Π»ΠΈ Ρƒ вас сСрвСр, 10 ΠΈΠ»ΠΈ 10000. Π’ этих случаях ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ процСссов/ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ росту ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ использованиСм памяти ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ контСкста процСссором.

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ Π½Π° Ρ†ΠΈΠΊΠ»Π°Ρ… событий Π²Ρ€ΠΎΠ΄Π΅ Node ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Π·Π°Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π»ΠΈ сСбя Π½Π° одноядСрных сСрвСрах, ΠΈ для использования Π½Π° многоядСрных сСрвСрах ΠΈΡ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ»Π°ΡΡ‚Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. БистСмы, основанныС Π½Π° сопрограммах/Π°ΠΊΡ‚ΠΎΡ€Π°Ρ…, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Go ΠΈΠ»ΠΈ Erlang, Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»Π΅Π³Ρ‡Π΅ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ядра процСссора, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для этого: Π½Π° ΠΎΠ΄Π½ΠΎΠΉ машинС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ тысячи Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ ΠΈ Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ².

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

На ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌ сСрвСрС PostgreSQL ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ нСсколькими сотнями соСдинСний, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ MySQL способСн ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ тысяч. Redis способСн ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ наибольшСС количСство соСдинСний (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, дСсятки тысяч), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ†ΠΈΠΊΠ» событий ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π΅ΠΌΡƒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ Π·Π° это приходится Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° опСрация.

РаспрСдСлённыС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ΠΎΠΉΡ‚ΠΈ ΠΎΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ, основанной Π½Π° процСссах ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ нСскольким машинам, ΠΎΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ сСкционирования (partitioning). Π’Π°ΠΊΠΈΠ΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… способны ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ мноТСство соСдинСний ΠΌΠ΅ΠΆΠ΄Ρƒ большим числом сСрвСров. НапримСр, AWS DynamoDB ΠΈΠ»ΠΈ Google Datastore, Π° Ρ‚Π°ΠΊΠΆΠ΅ распрСдСлСнныС Π‘Π”, написанныС Π½Π° Go, с Π³ΠΎΡ‚ΠΎΠ²Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΈΠΌΡƒΡ‚ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

Однако всС эти Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅ΡŽΡ‚ послСдствия β€” ΠΎΠ½ΠΈ ΠΆΠ΅Ρ€Ρ‚Π²ΡƒΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ опСрациями (join’Ρ‹, ad-hoc-запросы) ΠΈ гарантиями согласованности, прСдоставляСмыми Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ/односСрвСрными Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Но, идя Π½Π° эту ΠΆΠ΅Ρ€Ρ‚Π²Ρƒ, ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ соСдинСния сСкционированным, Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ, практичСски Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ способом, позволяя Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, которая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ мноТСство соСдинСний Π½Π° мноТСствС машин. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° соСдинСний Π² Π΄Π°Π½Π½ΠΎΠΌ случаС снимаСтся: ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр Π΄ΠΎΠ»ΠΆΠ΅Π½ сам Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎΠ± ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Π½ΠΎ Π² совокупности, с тысячами ΠΈ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ машин с ΡƒΠΌΠ½ΠΎΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π΄Π°Π½Π½Ρ‹Π΅ систСмы часто Π²Π΅Π΄ΡƒΡ‚ сСбя Ρ‚Π°ΠΊ, словно ΠΎΠ½ΠΈ бСсконСчно ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½?

Β«Π”ΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΈΠ·Π½Π°Β» соСдинСний Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΈΡ… эффСктивного ΠΈ экономного использования. Часто Π±Ρ‹Π²Π°Π΅Ρ‚ слоТно ΠΏΠΎΠ½ΡΡ‚ΡŒ, насколько Π΄ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ΠΈ обходятся. Бвязано это с асиммСтриСй: с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° соСдинСниС стоит Π΄Ρ‘ΡˆΠ΅Π²ΠΎ, ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΡ‚ ΠΈΡ… Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ числа страдаСт ΠΈΠΌΠ΅Π½Π½ΠΎ сСрвСр.

Π’ процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ сСбС Ρ€ΠΎΡΠΊΠΎΡˆΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ соСдинСниС для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. НапримСр, сСрвСр ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Устанавливая для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ запроса Π½ΠΎΠ²ΠΎΠ΅ соСдинСниС, ΠΎΠ½ искусствСнно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ» Π±Ρ‹ сСбя возмоТностями Π‘Π” (ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ) ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ соСдинСний. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ эффСктивСн β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли сСрвСр ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ являСтся прокси-сСрвСром для Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ сСрвСры ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΊΡƒΡ‡Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹: ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ поступлСния Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° сСрвСр, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ Π΅Π³ΠΎ, Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ запрос, ΠΏΠ΅Ρ€Π΅ΡΡ‹Π»Π°ΡŽΡ‚ Π΅Π³ΠΎ Π² Π‘Π” ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ соСдинСнию, ΠΆΠ΄ΡƒΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΈΡ…, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ HTML/JSON/RPC, ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ сСтСвыС запросы Π΄Ρ€ΡƒΠ³ΠΈΠΌ сСрвисам, ΠΈ Ρ‚.Π΄. ΠžΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ соСдинСниС простаиваСт β€” Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, дорогостоящий рСсурс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСэффСктивно. И это ΠΌΡ‹ Π΅Ρ‰Ρ‘ Π½Π΅ ΡƒΡ‡Π»ΠΈ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ, связанныС с созданиСм соСдинСния (запуск процСсса, аутСнтификация) ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° сторонС сСрвСра.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ использования соСдинСний, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ connection pools (ΠΏΡƒΠ»Ρ‹ соСдинСний). ΠŸΡƒΠ» β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ соСдинСний, Π½Π΅ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ прямого доступа ΠΈΠ»ΠΈ использования. ΠŸΡƒΠ» Π²Ρ‹Π΄Π°Π΅Ρ‚ соСдинСния, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. БоСдинСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΏΡƒΠ» послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹. ΠŸΡƒΠ» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ числом соСдинСний, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ нСобходимости. ИдСальноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ»Π° соСдинСний выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΠΊΠΎΠ΄ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ соСдинСниС Ρƒ ΠΏΡƒΠ»Π° (checkout), ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ Π΅ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ ΠΈ сразу Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π² ΠΏΡƒΠ» (release). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ΄ Π½Π΅ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ соСдинСниС, ΠΏΠΎΠΊΠ° выполняСтся Ρ€Π°Π±ΠΎΡ‚Π°, Π½ΠΈΠΊΠ°ΠΊ с Π½ΠΈΠΌ Π½Π΅ связанная, Ρ‡Ρ‚ΠΎ сущСствСнно ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ с использованиСм ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… соСдинСний. Если всС соСдинСния Π² ΠΏΡƒΠ»Π΅ заняты, ΠΊΠΎΠ³Π΄Π° происходит ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ запрос (checkout), Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ сторонС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ приходится ΠΆΠ΄Π°Ρ‚ΡŒ (block), ΠΏΠΎΠΊΠ° соСдинСниС Π½Π΅ освободится.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΡƒΠ»ΠΎΠ² ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… языках ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°Ρ…:

Ruby on Rails, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, автоматичСски выдСляСт ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ соСдинСния Π² ΠΏΡƒΠ», ΠΏΡ€ΠΈ этом Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ нюансов Π΄Π°Π½Π½ΠΎΠ³ΠΎ процСсса ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ нСэффСктивному ΠΊΠΎΠ΄Ρƒ. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ запрос ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ сСтСвой запрос ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ сСрвису, ΠΈ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ запрос ΠΊ Π‘Π”. Π’ этом случаС соСдинСниС простаиваСт Π²ΠΎ врСмя выполнСния сСтСвого запроса (автоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Rails Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ консСрвативным ΠΈ остороТным, Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ β€” нСэффСктивным).

Π’ Go Π΅ΡΡ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π‘Π”, входящий Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΡƒΠ»ΠΎΠΌ соСдинСний. Однако Π½Π΅ΡƒΡ‡Π΅Ρ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ соСдинСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΏΡƒΠ» ΠΌΠ΅ΠΆΠ΄Ρƒ обращСниями ΠΊ Π‘Π”, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ воспроизводимым Π±Π°Π³Π°ΠΌ. Иногда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ исходят ΠΈΠ· прСдполоТСния, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ запросС ΠΈΠ΄ΡƒΡ‚ ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ соСдинСнию, ΠΎΠ΄Π½Π°ΠΊΠΎ автоматичСский ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ соСдинСния ΠΈΠ· ΠΏΡƒΠ»Π° (Π³Π΅ΠΉΠ·Π΅Π½Π±Π°Π³ Π² Go, связанный с Postgres advisory locks).

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΡƒΡΡƒΠ³ΡƒΠ±Π»ΡΡŽΡ‚ Π΄Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ: Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… часто ΠΏΡ€ΠΈΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΊ соСдинСнию (ΠΈΠ½ΠΎΠ³Π΄Π° это Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ session β€” сСссиСй). Начав Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Ρ‘ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (commit) ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ (roll back) Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ соСдинСнию, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½Π° ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Π»Π°ΡΡŒ. АвтоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ»ΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ этот Ρ„Π°ΠΊΡ‚ΠΎΡ€ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ соСдинСниС Π² ΠΏΡƒΠ» Π²ΠΎ врСмя выполнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π’ зависимости ΠΎΡ‚ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ выраТСния (prepared statements), Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ привязку ΠΊ соСдинСниям.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ эффСктивный ΠΊΠΎΠ΄, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡƒΠ»ΠΈΠ½Π³ соСдинСний Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅, ΠΊΠ°ΠΊΠΈΠ΅ дСйствия Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ автоматичСски, ΠΈ ΠΊΠΎΠ³Π΄Π° Π°Π²Ρ‚ΠΎΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎ. Pooling-прокси (Π²Ρ€ΠΎΠ΄Π΅ pgBouncer, Odyssey ΠΈΠ»ΠΈ AWS RDS Proxy) β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· инструмСнтов, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰ΠΈΠΉ Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΎΠ± этих Π½ΡŽΠ°Π½ΡΠ°Ρ…. Π­Ρ‚ΠΈ систСмы ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ соСдинСний с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, сколько Π½ΡƒΠΆΠ½ΠΎ, Π½Π΅ Π·Π°Π±ΠΎΡ‚ΡΡΡŒ ΠΎΠ± ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ выдСляСмыС соСдинСния Π½Π΅ настоящиС, Π° ΠΈΡ… Β«Π΄Π΅ΡˆΡ‘Π²Π°ΡΒ» имитация, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π°Ρ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов. Когда ΠΊΠ»ΠΈΠ΅Π½Ρ‚ пытаСтся Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΉ, pooling-прокси ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ настоящСС соСдинСниС ΠΈΠ· Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ ΠΏΡƒΠ»Π° ΠΈ сопоставляСт ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΡŽ с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ соСдинСниСм. Когда прокси Π·Π°ΠΌΠ΅Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ соСдинСниС большС Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΎΠ½ оставляСт ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ соСдинСниС с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, Π½ΠΎ агрСссивно освобоТдаСт ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ соСдинСниС с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. Число соСдинСний ΠΈ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ «агрСссивности» ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Π² Ρ‚ΠΎΠΌ числС с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Ρ‚Π°ΠΊΠΈΡ… нюансов, ΠΊΠ°ΠΊ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ выраТСния ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

Π Π΅ΡˆΠΈΡ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свой ΠΊΠΎΠ΄ ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² Π½Π΅Π³ΠΎ эффСктивноС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ соСдинСниями, ΠΈΠ»ΠΈ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚Π΅ инструмСнт Π²Ρ€ΠΎΠ΄Π΅ pgBouncer, Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счётС Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΌ компромиссом ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ развСртывания. Π›ΡŽΠ±ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, сколько ΠΊΠΎΠ΄Π° Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, насколько ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ соСдинСниями Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌ языкС программирования ΠΈ насколько эффСктивным Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

Pooling Π½Π΅ ограничиваСтся ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…. ΠœΡ‹ Π½Π°Π·Ρ‹Π²Π°Π»ΠΈ соСдинСния Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Β«Π΄Π΅ΡˆΡ‘Π²Ρ‹ΠΌΠΈΒ», Π½ΠΎ β€” ΡƒΠ²Ρ‹ β€” ΠΎΠ½ΠΈ Π½Π΅ бСсплатны. Они Ρ‚ΠΎΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΏΠΎΡ€Ρ‚Ρ‹ ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ дСскрипторы Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° β€” рСсурсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ языки/Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡƒΠ»Ρ‹ для HTTP-соСдинСний с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ сСрвСром, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΡƒΠ»Ρ‹ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… рСсурсов. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, эти ΠΏΡƒΠ»Ρ‹ скрыты ΠΎΡ‚ Π³Π»Π°Π· Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° систСма Π½Π΅ исчСрпаСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ рСсурс, ΠΈ Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ½Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠ°Π΄Π°Π΅Ρ‚. Π—Π½Π°Π½ΠΈΠ΅ ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ спСцификС сильно ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ β€” ΠΏΠΎΠΌΠΈΠΌΠΎ соСдинСний, Π²ΠΈΠ½ΠΎΠ²Π½ΠΈΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ часто Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ дСскрипторы.

Настройка ΠΎΠ±Ρ‰ΠΈΡ… ΠΏΡƒΠ»ΠΎΠ²

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ соСдинСния, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… комбинациях сСрвСр ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ + Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ количСство запросов, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π½Π° сСрвСрС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, минимизируя количСство ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π₯отя эта ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· Π½ΠΈΡ… ΠΏΠΎΡ…ΠΎΠΆΠΈ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈΡ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ комбинациями. Π”Π°ΠΉΡ‚Π΅ ΠΌΠ½Π΅ Π·Π½Π°Ρ‚ΡŒ, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ я Π΄ΠΎΠ±Π°Π²ΠΈΠ» большС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ/систСм.

1. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° основС процСссов ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Puma, популярный сСрвСр для запуска Ruby-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΏΠ°Ρ€Ρƒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² для управлСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ входящих HTTP-запросов. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ β€” это число запускаСмых процСссов, прСдставлСнноС Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ workers. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс сСрвСра нСзависим ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ стСк прилоТСния Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ N Мб памяти, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π½Π° машинС ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ доступно workersΓ—N Мб памяти для запуска всСх ΠΊΠΎΠΏΠΈΠΉ. Π•ΡΡ‚ΡŒ способ ΡΠΌΡΠ³Ρ‡ΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ: Ruby 2+ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ копирования ΠΏΡ€ΠΈ записи (copy-on-write), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ мноТСство процСссов ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ Ρ€Π°Π·Π²Π΅Ρ‚Π²Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° Π½ΡƒΠΆΠ½ΠΎΠ΅ число Π±Π΅Π· нСобходимости ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всю ΠΏΠ°ΠΌΡΡ‚ΡŒ β€” ΠΎΠ±Ρ‰ΠΈΠ΅ области памяти Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ совмСстно Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π² Π½ΠΈΡ… Π½Π΅ внСсут измСнСния. Активация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ copy-on-write с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ preload_app! ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΎΠΉ (workersΓ—N). Однако Π½Π΅ стоит Π²ΠΎΠ·Π»Π°Π³Π°Ρ‚ΡŒ Π½Π° Π½Π΅Ρ‘ слишком большиС Π½Π°Π΄Π΅ΠΆΠ΄Ρ‹, Π½Π΅ протСстировав ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°Ρ….

Π‘Π΅Ρ€Π²Π΅Ρ€Ρ‹, основанныС ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° процСссах, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Unicorn, ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° этом ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ β€” ΠΊΠ°ΠΊ ΠΈ популярныС сСрвСры для Python, PHP ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈΠ»ΠΈ построСнныС ΠΏΠΎ схСмС ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ/ΠΎΠ΄ΠΈΠ½ процСсс. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ запрос Π·Π° Ρ€Π°Π·, Π½ΠΎ это Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ: ΠΏΠΎΠΊΠ° процСсс доТидаСтся выполнСния запроса ΠΊ Π‘Π” ΠΈΠ»ΠΈ сСтСвого запроса ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ сСрвису, ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ запросы, ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ядро процСссора Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡΡ‚Π°ΠΈΠ²Π°Ρ‚ΡŒ. Для устранСния этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ большС процСссов, Ρ‡Π΅ΠΌ имССтся ядСр CPU (Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌ, связанным с ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ контСкста), ΠΈΠ»ΠΈ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ.

Π§Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ нас ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Puma β€” числу ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² для запуска Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ процСссС/worker’e. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° threads позволяСт Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ минимальноС ΠΈ максимальноС число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² ΠΏΡƒΠ»Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ worker’Π°. ИспользованиС Π΄Π²ΡƒΡ… этих Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² позволяСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ запросов для прилоТСния. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, ΠΎΠ½ΠΎ Ρ€Π°Π²Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡŽ числа worker’ΠΎΠ² Π½Π° число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

ЭмпиричСскоС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ доступноС ядро CPU приходится ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ worker’Ρƒ β€” ΠΏΡ€ΠΈ условии, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‡Ρ‚ΠΎ для этого достаточно памяти. Π­Ρ‚ΠΎ позволяСт эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΊΠΈΠ½ΡƒΡ‚ΡŒ, сколько RAM Π½ΡƒΠΆΠ½ΠΎ, провСдя нСсколько тСстов с этим Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ CPU β€” ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ, увСличивая максимальноС количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Как ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ совмСстно с процСссом, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΈΡ… числа Π½Π΅ слишком отраТаСтся Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠΈ памяти. ВмСсто этого большСС число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ всё сильнСС Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ процСссор, ΠΏΠΎΠΏΡƒΡ‚Π½ΠΎ позволяя ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ большС запросов ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π­Ρ‚ΠΎ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ, ΠΏΠΎΠΊΠ° ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ спит Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² запроса ΠΊ Π‘Π” ΠΈΠ»ΠΈ сСтСвого запроса, ядро CPU ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ процСсса. Но ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ большоС число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΠΈ Π·Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ процСссов, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ придСтся ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, сколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ для Π·Π½Π°Ρ‡ΠΈΠΌΠΎΠ³ΠΎ увСличСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Но ΠΊΠ°ΠΊ всС эта конфигурация влияСт Π½Π° количСство соСдинСний с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…? Rails ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ автоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ потрСбуСтся собствСнноС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… для эффСктивной Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Π΅Π· оТидания, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ. Он ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡƒΠ» соСдинСний (Π΅Π³ΠΎ настройки хранятся Π² Ρ„Π°ΠΉΠ»Π΅ database.yml ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ процСсса/worker’Π°). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ€Π°Π²Π½ΠΎΠ΅ 5, Rails Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ максимум 5 соСдинСний для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ worker’Π°. Π’Π°ΠΊΠΎΠΉ Π»ΠΈΠΌΠΈΡ‚ Π½Π΅ слишком Ρ…ΠΎΡ€ΠΎΡˆΠΎ сработаСт, Ссли ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ максимальноС число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² β€” всС ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π±ΠΎΡ€ΠΎΡ‚ΡŒΡΡ Π·Π° эти ΠΏΡΡ‚ΡŒ соСдинСний Π² ΠΏΡƒΠ»Π΅. ЭмпиричСскоС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ число соСдинСний Π² ΠΏΡƒΠ»Π΅ Ρ€Π°Π²Π½Ρ‹ΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ количСству процСссов, ΠΊΠ°ΠΊ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½ΠΎ Π² руководствС ΠΏΠΎ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΡŽ Heroku Puma.

Но Ρ‚ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ другая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: количСство соСдинСний, Ρ€Π°Π²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡŽ числа worker’ΠΎΠ² Π½Π° число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (workers Γ— threads), Π±Π»Π°Π³ΠΎΡ‚Π²ΠΎΡ€Π½ΠΎ влияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСрвСра ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€ΠΎΠ΄Π΅ PostgreSQL ΠΈ, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях, для MySQL. Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, сколько Ρƒ вас ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти (Π² случаС Postgres) ΠΈ сколько CPU (Π² случаС MySQL), данная конфигурация ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. МоТно ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΡ‘ΠΌ ΠΏΡƒΠ»Π° (pool) ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ threads, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ число соСдинСний, ΠΈΠ»ΠΈ число worker’ΠΎΠ², ΠΈΠ»ΠΈ ΠΎΠ±Π° этих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Π’ зависимости ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ прилоТСния, всС эти Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, вСроятно, Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ эффСкт: Ссли ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ запрос Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, количСство ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΊ Π‘Π” всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΡƒΠ·ΠΊΠΈΠΌ мСстом, ограничивая число запросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Но Ссли Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ запросы ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π±Π΅Π· ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ Π‘Π”, Ρ‚ΠΎ число worker’ΠΎΠ² ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ высоким, Π° ΠΎΠ±ΡŠΡ‘ΠΌ ΠΏΡƒΠ»Π° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΈΠ·ΠΊΠΈΠΌ β€” Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ мноТСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ запросы, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСбольшая ΠΈΡ… Ρ‡Π°ΡΡ‚ΡŒ станСт ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π‘Π” Π² ΠΏΡƒΠ»Π΅ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.

Π­Ρ‚Ρƒ идСю ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом: пСрСвСсти ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ соСдинСниями Π² ΠΊΠΎΠ΄ ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ эффСктивно Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΡŽΡ‚ΡΡ (checkout) ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ (release). Π­Ρ‚ΠΎ особСнно Π²Π°ΠΆΠ½ΠΎ, Ссли ΠΌΠ΅ΠΆΠ΄Ρƒ обращСниями ΠΊ Π‘Π” Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ сСтСвыС запросы.

Если станСт понятно, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ соСдинСниями Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ эти Ρ†ΠΈΡ„Ρ€Ρ‹ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ сСрвСр ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ искусствСнно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ ΠΏΡ€Π΅Π΄Π΅Π»ΠΎΠΌ Π½Π° количСство ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΊ Π‘Π”, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ инструмСнтом Π²Ρ€ΠΎΠ΄Π΅ pgBouncer, Odyssey, AWS RDS Proxy. Запуск pooling-прокси ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡƒΠ»Π° Ρ€Π°Π²Π½Ρ‹ΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ числу ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΠΏΠΎΠΏΡƒΡ‚Π½ΠΎ обСспСчит ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ прокси-сСрвСр сдСлаСт всС максимально эффСктивно.

Π§Ρ‚ΠΎ касаСтся Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, PostgreSQL ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π° основС процСссов, поэтому приходится ΠΏΡ€ΠΎΡΠ²Π»ΡΡ‚ΡŒ ΡΠ΄Π΅Ρ€ΠΆΠ°Π½Π½ΠΎΡΡ‚ΡŒ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ числа соСдинСний ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с этой Π‘Π”. MySQL ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ количСство соСдинСний ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ β€” хотя это ΠΈ способно привСсти ΠΊ сниТСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ·-Π·Π° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкста ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ.

2. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° основС Ρ†ΠΈΠΊΠ»Π° событий

Node / Deno β€” ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ сСрвСр Π½Π° основС Ρ†ΠΈΠΊΠ»Π° событий (event loop), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ рассмотрим. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ сСрвСр с конфигурациями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ способСн вСсьма эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ядро процСссора, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ практичСски ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. Π”Π°, Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ подсистСмы ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ядра, Π½ΠΎ сСйчас ΠΌΡ‹ большС заинтСрСсованы Π² ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅, ΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π² этом кластСризация (clustering). Она достигаСтся ΠΏΡƒΡ‚Π΅ΠΌ запуска ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ всС входящиС соСдинСния, Π° Π·Π°Ρ‚Π΅ΠΌ дСйствуСт ΠΊΠ°ΠΊ прокси-сСрвСр ΠΈ распрСдСляСт соСдинСния ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ процСссам, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌ Π½Π° Ρ‚ΠΎΠΉ ΠΆΠ΅ машинС. Π£ Node имССтся ΠΌΠΎΠ΄ΡƒΠ»ΡŒ кластСризации, входящий Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, ΠΈ популярныС сСрвСры Π²Ρ€ΠΎΠ΄Π΅ PM2 Π΅Π³ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚. ОсновноС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ здСсь состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠ΅ процСссов, сколько ядСр CPU доступно (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ памяти достаточно).

Stripe выпустил интСрСсный ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Einhorn, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ соСдинСний, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π²Π½Π΅ стСка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ ΠΊΠΎΠ΄. Он запускаСт собствСнный процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ соСдинСния, ΠΈ распрСдСляСт ΠΈΡ… ΠΏΠΎ экзСмплярам прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ запускаСт ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ управляСт ΠΊΠ°ΠΊ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ процСссами. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ Π²Ρ€ΠΎΠ΄Π΅ этого ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π² систСмах, основанных Π½Π° Ρ†ΠΈΠΊΠ»Π°Ρ… событий, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ возмоТности всСгда Π±ΡƒΠ΄Π΅Ρ‚ максимально ΠΏΠΎΠ»Π½ΠΎ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ядро процСссора. Однако сам ΠΏΠΎ сСбС ΠΎΠ½ Π½Π΅ Ρ‚Π°ΠΊ ΠΏΠΎΠ»Π΅Π·Π΅Π½ с Ruby/Python, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ, хотя ΠΈ позволяСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ нСсколько процСссов, отсутствиС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· процСссов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ запрос Π·Π° Ρ€Π°Π·.

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π° основС кластСризации Ρ†ΠΈΠΊΠ»Π° событий ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ систСмами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для языка, основанного Π½Π° процСссах. Π‘Π΅Ρ€Π²Π΅Ρ€ Tornado для Python, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ запросов Python Π² систСму Π½Π° основС Ρ†ΠΈΠΊΠ»Π° событий, Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΊΠ°ΠΊ non-blocking I/O. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ»Π°ΡΡ‚Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π° всС доступныС ядра CPU (ΠΏΡ€ΠΈ условии достаточного количСства памяти).

Аналогичный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π²Π΅Π±-сСрвСрС Falcon для Ruby. Π’ Π½ΠΎΠ²Ρ‹Ρ… вСрсиях Ruby имССтся Π°Π½Π°Π»ΠΎΠ³ Π·Π΅Π»Π΅Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (green-thread), Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ±Π΅Ρ€ΠΎΠΌ (fiber), ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ входящий запрос Falcon ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ruby-ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π°. Π€Π°ΠΉΠ±Π΅Ρ€Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ автоматичСски ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС ядра CPU, поэтому Falcon запускаСт копию прилоТСния Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ доступном ядрС процСссора (ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ памяти достаточно).

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

Redis ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ соСдинСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° событий. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ соСдинСний, сколько имССтся доступных ΠΏΠΎΡ€Ρ‚ΠΎΠ², Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов ΠΈ памяти, ΠΏΡ€ΠΈ этом каТдая опСрация ΠΎΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ соСдинСния обрабатываСтся ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

3. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ / ΠšΠ°ΡΡ‚ΠΎΠΌΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

ΠžΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС выступаСт Go, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ свободСн ΠΎΡ‚ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ запросов β€” ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎ-максимуму ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ доступныС рСсурсы CPU ΠΈ памяти. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ входящий запрос обрабатываСтся Π½ΠΎΠ²ΠΎΠΉ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ΠΎΠΉ (goroutine) β€” лСгковСсной ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ конструкциСй. ИсполняСмая срСда Go управляСт Π΅ΠΉ, ΠΏΡ€ΠΈ этом ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°Π΅Ρ‚ ΠΏΠΎ эффСктивности Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΠ»ΠΈ процСссов. Go автоматичСски «раскидываСт» Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΏΠΎ всСм доступным ядрам CPU, хотя Π΅Π³ΠΎ Π°ΠΏΠΏΠ΅Ρ‚ΠΈΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ нСсколько ΠΎΠ±ΡƒΠ·Π΄Π°Ρ‚ΡŒ, Π·Π°Π΄Π°Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ runtime.GOMAXPROCS. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС происходит Π² Ρ€Π°ΠΌΠΊΠ°Ρ… исполняСмой срСды, ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ копируСтся. Go Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° всСх ядрах CPU ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ запуска ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ прилоТСния Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ядрС.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Go ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с дСсятками тысяч ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… запросов Π΄Π°ΠΆΠ΅ Π½Π° совсСм ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… сСрвСрах, Π΅Π³ΠΎ сопряТСниС с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° основС процСссов, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ PosgreSQL, ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΎΠΉ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π³ΠΎΠ½ΠΎΡ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ Π½Π° ΠΏΠΎΠ»Π½ΠΎΠΉ скорости врСзаСтся Π² ΠΊΠΈΡ€ΠΏΠΈΡ‡Π½ΡƒΡŽ стСну. Если каТдая Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ SQL-ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π±ΡƒΠ΄Π΅Ρ‚ создано ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ соСдинСний, сколько насчитываСтся Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ β€” вСдь ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡƒΠ»Π° Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° Go, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌ с SQL-Π±Π°Π·ΠΎΠΉ, β€” Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π΅Π» соСдинСний с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SetMaxOpenConns ΠΈ связанных ΠΎΠΏΡ†ΠΈΠΉ. Go ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΏΡƒΠ» с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ sql, поэтому ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ запрос Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ соСдинСниС ΠΈΠ· ΠΏΡƒΠ»Π°, ΠΈ сразу послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ запроса ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π² ΠΏΡƒΠ». Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ρ‡Ρ‚ΠΎΠ±Ρ‹ провСсти Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, придСтся Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Β«ΠΎΠ±Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π΅Ρ‚Β» ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅ соСдинСниС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ транзакция Π±Ρ‹Π»Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° β€” это СдинствСнный способ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π² дальнСйшСм Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ. Π­Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ большоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΈ использовании Π΄Ρ€ΡƒΠ³ΠΈΡ… завязанных Π½Π° соСдинСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ выраТСния ΠΈΠ»ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ (advisory locks).

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ автоматичСский ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΄Π°Ρ‘Ρ‚ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ прСимущСство: ΠΎΠ½ устраняСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² pooling-прокси, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ соСдинСниями ΡƒΠΆΠ΅ осущСствляСтся ΠΊΡ€Π°ΠΉΠ½Π΅ агрСссивно. Π’ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π‘Π” ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ встроСно эффСктивноС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ соСдинСниями, ΠΈ соСдинСниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊ ΠΆΠ΅ эффСктивно, ΠΊΠ°ΠΊ ΠΈ Π² pooling-прокси. БистСмы, устроСнныС ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ эффСктивно, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ приходится Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹ΠΌΠΈ случаями, ΠΊΠΎΠ³Π΄Π° Ρ€ΡƒΡ‡Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

Помимо ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Ρ… нюансов, связанных с ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ выраТСниями ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ (advisory locks), ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Ρ€ΡƒΡ‡Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ соСдинСниями Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ, связанным со Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ. Если Π·Π°Π΄Π°Π½ΠΎ максимальноС число соСдинСний, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ запросам для Ρ€Π°Π±ΠΎΡ‚Ρ‹ трСбуСтся Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ соСдинСния, сущСствуСт Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ попадания Π² ΠΏΠΎΡ€ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΡ€ΡƒΠ³, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ запросы бСсконСчно Π΄ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ΡΡ, ΠΏΠΎΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ запросы освободят соСдинСния. Π’ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ°Ρ… ΠΎΠ± ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΡƒΠ»Π° для HikariCP приводятся Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ справится с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Π²Ρ€ΠΎΠ΄Π΅ этой.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ языки Π½Π° основС VM, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Java, Scala/Akka, Clojure, Kotlin (всС Π½Π° JVM) ΠΈ Elixir/Erlang (Π½Π° BEAM VM) Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: задСйствованиС всСх доступных ядСр CPU Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· запуска ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ прилоТСния для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ядра. РСализация ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ систСмы ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΊ Π‘Π” ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ свои тонкости, ΠΎΠ΄Π½Π°ΠΊΠΎ с Π½ΠΈΠΌΠΈ Π»Π΅Π³ΠΊΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅.

Π‘Π²ΡΠΆΠΈΡ‚Π΅ΡΡŒ со ΠΌΠ½ΠΎΠΉ Π² Twitter, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΡ… систСм, Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ вопросы/замСчания/поТСлания, ΠΈΠ»ΠΈ Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

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

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *