УскорявамС PHP-ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° Tarantool с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Async, Swoole ΠΈ Parallel

УскорявамС PHP-ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° Tarantool с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Async, Swoole ΠΈ Parallel

Π’ СкосистСмата PHP Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ Π΄Π²Π° ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€Π° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° със ΡΡŠΡ€Π²ΡŠΡ€Π° Tarantool ― ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎΡ‚ΠΎ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ PECL tarantool/tarantool-php, написано Π½Π° C, ΠΈ tarantool-php/client, написано Π½Π° PHP. Аз съм Π°Π²Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π° послСдното.

Π’ Ρ‚Π°Π·ΠΈ статия Π±ΠΈΡ… искал Π΄Π° сподСля Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ тСстовСтС Π·Π° производитСлност Π½Π° Π΄Π²Π΅Ρ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ, с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ измСнСния Π² ΠΊΠΎΠ΄Π°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° постигнСм 3-5% ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° производитСлността (Π½Π° синтСтични тСстовС!)).

Какво Ρ‰Π΅ тСствамС?

Π©Π΅ тСствамС спомСнатитС ΠΏΠΎ-Π³ΠΎΡ€Π΅ синхронни ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈ, стартирани асинхронно, ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ ΠΈ асинхронно-ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ. πŸ™‚ Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π½Π΅ искамС Π΄Π° ΠΏΠΈΠΏΠ°ΠΌΠ΅ самия ΠΊΠΎΠ΄ Π½Π° ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΈΠΌΠ° Π½Π°Π»ΠΈΡ‡Π½ΠΈ няколко Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ позволяват постиганСто Π½Π° ΠΆΠ΅Π»Π°Π½ΠΎΡ‚ΠΎ:

  • Swoole ― високопроизводитСлСн асинхронСн Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π·Π° PHP. Използва сС ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ Π³ΠΈΠ³Π°Π½Ρ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ Alibaba ΠΈ Baidu. Π‘ вСрсия 4.1.0 сС появи магичСският ΠΌΠ΅Ρ‚ΠΎΠ΄ SwooleRuntime::enableCoroutine(), ΠΊΠΎΠΉΡ‚ΠΎ позволява с Β«Π΅Π΄Π½Π° линия ΠΊΠΎΠ΄ Π΄Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° синхронни ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° PHP Π² асинхронни».
  • Async ― Π΄ΠΎ Π½Π΅ΠΎΡ‚Π΄Π°Π²Π½Π° доста пСрспСктивно Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π·Π° асинхронна Ρ€Π°Π±ΠΎΡ‚Π° Π² PHP. Π—Π°Ρ‰ΠΎ Π΄ΠΎ Π½Π΅ΠΎΡ‚Π΄Π°Π²Π½Π°? Π—Π° съТалСниС, ΠΏΠΎ нСизвСстна ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, Π°Π²Ρ‚ΠΎΡ€ΡŠΡ‚ ΠΈΠ·Ρ‚Ρ€ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡ‚ΠΎ ΠΈ Π±ΡŠΠ΄Π΅Ρ‰Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΅ нСясно. Π©Π΅ сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΅Π΄Π½ΠΎ ΠΎΡ‚ Ρ„ΠΎΡ€ΠΊΠΎΠ²Π΅Ρ‚Π΅. ΠšΠ°ΠΊΡ‚ΠΎ ΠΈ Swoole, Ρ‚ΠΎΠ²Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ позволява с лСсно Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ асинхронност, замСняйки стандартната рСализация Π½Π° TCP ΠΈ TLS ΠΏΠΎΡ‚ΠΎΡ†ΠΈ с Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ асинхронни вСрсии. Π’ΠΎΠ²Π° става Ρ‡Ρ€Π΅Π· опцията Β«async.tcp = 1Β«.
  • Parallel ― доста Π½ΠΎΠ²ΠΎ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΎΡ‚ извСстния Joe Watkins, Π°Π²Ρ‚ΠΎΡ€ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠ°Ρ‚ΠΎ phpdbg, apcu, pthreads, pcov, uopz. Π Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ прСдоставя API Π·Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° Π² PHP ΠΈ сС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€Π° ΠΊΠ°Ρ‚ΠΎ замСститСл Π½Π° pthreads. Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎΡ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π΅, Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ само с ZTS (Zend Thread Safe) вСрсия Π½Π° PHP.

Как Ρ‰Π΅ тСствамС?

Π©Π΅ стартирамС инстанция Π½Π° Tarantool с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΆΡƒΡ€Π½Π°Π» Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ записванС (wal_mode = none) ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ ΠΌΡ€Π΅ΠΆΠΎΠ² Π±ΡƒΡ„Π΅Ρ€ (readahead = 1 * 1024 * 1024). ΠŸΡŠΡ€Π²Π°Ρ‚Π° опция Ρ‰Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с диска, Π° Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° Ρ‰Π΅ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° Ρ‡Π΅Ρ‚Π΅ΠΌ ΠΏΠΎΠ²Π΅Ρ‡Π΅ заявки ΠΎΡ‚ Π±ΡƒΡ„Π΅Ρ€Π° Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма ΠΈ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ броя Π½Π° систСмнитС повиквания.

Π—Π° Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ работят с Π΄Π°Π½Π½ΠΈ (вмъкванС, ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅, Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΈ Ρ‚.Π½.), ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° стартиратС Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°, Ρ‰Π΅ сС (ΠΏΡ€Π΅)създадС memtx пространство, Π² ΠΊΠΎΠ΅Ρ‚ΠΎ стойноститС Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ‡Π½ΠΈΡ индСкс сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ ΠΎΡ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π½Π° послСдоватСлни стойности ΠΎΡ‚ Ρ†Π΅Π»ΠΈ числа (послСдоватСлност).
DDL пространството ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

space = box.schema.space.create(config.space_name, {id = config.space_id, temporary = true})
space:create_index('primary', {type = 'tree', parts = {1, 'unsigned'}, sequence = true})
space:format({{name = 'id', type = 'unsigned'}, {name = 'name', type = 'string', is_nullable = false}})

ΠŸΡ€ΠΈ нСобходимост, ΠΏΡ€Π΅Π΄ΠΈ стартиранС Π½Π° Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°, пространството сС попълва с 10 000 ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΎΡ‚ Π²ΠΈΠ΄Π°

{id, "tuplΠ΅_<id>"}

Π”ΠΎΡΡ‚ΡŠΠΏΡŠΡ‚ Π΄ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈΡ‚Π΅ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΏΠΎ случайна стойност Π½Π° ΠΊΠ»ΡŽΡ‡Π°.

Бамият Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ прСдставлява Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ към ΡΡŠΡ€Π²ΡŠΡ€Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ сС изпълнява 10 000 ΠΏΡŠΡ‚ΠΈ (Ρ€Π΅volucii), ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΡ‚ своя страна сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π² ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ сС повтарят, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ всички отклонСния във Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ 5 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ останат Π² допустимата Π³Ρ€Π°Π½ΠΈΡ†Π° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ° ΠΎΡ‚ 3 %*. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° сС Π²Π·ΠΈΠΌΠ° срСдният Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚. ΠœΠ΅ΠΆΠ΄Ρƒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ ΠΈΠΌΠ° ΠΏΠ°ΡƒΠ·Π° ΠΎΡ‚ 1 сСкунда, Π·Π° Π΄Π° Π½Π΅ сС ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° процСсора Π΄Π° Π²Π»Π΅Π·Π΅ Π² throttling. Garbage collector Π½Π° Lua сС Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° ΠΏΡ€Π΅Π΄ΠΈ всяка итСрация ΠΈ сС стартира ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎ слСд Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅. PHP ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ сС стартира само с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ Π·Π° Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°, с Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΎ Π±ΡƒΡ„Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° ΠΈ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ garbage collector.

* Броят Π½Π° Ρ€Π΅volucii, ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€Π°Π³ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² настройкитС Π½Π° Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°.

ВСстова срСда

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΈΡ‚Π΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ бяха ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ Π½Π° MacBookPro (2015), ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π° систСма β€” Fedora 30 (вСрсия Π½Π° ядрото 5.3.8-200.fc30.x86_64). Tarantool Ρ€Π°Π±ΠΎΡ‚Π΅ΡˆΠ΅ Π² Docker с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ "--network host".

ВСрсии Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅:

Tarantool: 2.3.0-115-g5ba5ed37e
Docker: 19.03.3, build a872fc2f86
PHP: 7.3.11 (cli) (ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½: 22 ΠΎΠΊΡ‚ 2019 08:11:04)
tarantool/client: 0.6.0
rybakit/msgpack: 0.6.1
ext-tarantool: 0.3.2 (+ ΠΏΠ°Ρ‚Ρ‡ Π·Π° 7.3)*
ext-msgpack: 2.0.3
ext-async: 0.3.0-8c1da46
ext-swoole: 4.4.12
ext-parallel: 1.1.3

* Π—Π° съТалСниС, официалният ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ с вСрсия Π½Π° PHP > 7.2. Π—Π° Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°ΠΌ ΠΈ стартирам Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° PHP 7.3, Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΠΏΠ°Ρ‚Ρ‡.

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ

Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΡŠΡ‚ Π½Π° Tarantool ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π±ΠΈΠ½Π°Ρ€Π΅Π½ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ MessagePack Π·Π° сСриализация Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ. Π’ ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€Π° PECL сСриализацията Π΅ дълбоко скрита Π² Π½Π΅Π΄Ρ€Π°Ρ‚Π° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ΠΈ Π½Π΅ Π΅ възмоТно Π΄Π° сС повлияС Π½Π° процСса Π½Π° ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ ΠΎΡ‚ userland-ΠΊΠΎΠ΄ Π½Π΅ Π΅ възмоТно. ΠšΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ Π½Π° чист чист PHP ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° пСрсонализиранС Π½Π° процСса Π½Π° ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ Ρ‡Ρ€Π΅Π· Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π°Π½Π΅ Π½Π° стандартния ΠΊΠΎΠ΄Π΅ΠΊ ΠΈΠ»ΠΈ Ρ‡Ρ€Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° собствСна рСализация. Π’ наличност са Π΄Π²Π° ΠΊΠΎΠ΄Π΅ΠΊΠ°, Сдиният Π΅ Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° msgpack/msgpack-php (ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ MessagePack PECL), Π° другият β€” Π½Π° rybakit/msgpack (Π½Π° чист PHP).

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° сравним ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅, Π½Π΅ΠΊΠ° ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ производитСлността Π½Π° MessagePack ΠΊΠΎΠ΄Π΅Ρ†ΠΈΡ‚Π΅ Π·Π° PHP ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈ Π² послСдващитС тСстовС Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ‚ΠΎΠ·ΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠΊΠ°ΠΆΠ΅ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡŠΡ€ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚:

УскорявамС PHP-ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° Tarantool с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Async, Swoole ΠΈ Parallel
Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ PHP вСрсията (Pure) изостава ΠΎΡ‚ PECL Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎ скорост, Π² Ρ€Π΅Π°Π»Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ всС ΠΏΠ°ΠΊ Π±ΠΈΡ… ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π°Π» Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠΌΠ΅Π½Π½ΠΎ rybakit/msgpack, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎΡ‚ΠΎ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ MessagePack спСцификацията Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° само частично (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, липсва ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° потрСбитСлски Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ, Π±Π΅Π· която Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Decimal β€” новия Ρ‚ΠΈΠΏ Π΄Π°Π½Π½ΠΈ, прСдставСн Π² Tarantool 2.3) ΠΈ ΠΈΠΌΠ° Ρ€Π΅Π΄ΠΈΡ†Π° Π΄Ρ€ΡƒΠ³ΠΈ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚Ρ‚Π° с PHP 7.4). А ΠΈ ΠΊΠ°Ρ‚ΠΎ цяло, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π·Π°Π½Π΅ΠΌΠ°Ρ€Π΅Π½.

И Ρ‚Π°ΠΊΠ°, Π΄Π° ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ производитСлността Π½Π° ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π² синхронСн Ρ€Π΅ΠΆΠΈΠΌ:

УскорявамС PHP-ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° Tarantool с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Async, Swoole ΠΈ Parallel
ΠšΠ°ΠΊΡ‚ΠΎ сС Π²ΠΈΠΆΠ΄Π° ΠΎΡ‚ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°, ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΡŠΡ‚ PECL (Tarantool) ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π° производитСлност Π² сравнСниС с ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€Π° Π½Π° PHP (Client). Но Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ ΠΈΠ·Π½Π΅Π½Π°Π΄Π°, ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ послСдният, освСн Ρ‡Π΅ Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ Π½Π° ΠΏΠΎ-Π±Π°Π²Π΅Π½ Π΅Π·ΠΈΠΊ, Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚Π°: ΠΏΡ€ΠΈ всяко ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ сС създава Π½ΠΎΠ² ΠΎΠ±Π΅ΠΊΡ‚ Request ΠΈ ΠžΡ‚Π³ΠΎΠ²ΠΎΡ€ (Π² случай Π½Π° Select β€” ΠΎΡ‰Π΅ ΠΈ Criteria, Π° Π² случай Π½Π° Update/Upsert β€” Operations), ΠΎΡ‚Π΄Π΅Π»Π½ΠΈΡ‚Π΅ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Connection, Packer ΠΈ Handler ΡΡŠΡ‰ΠΎ добавят ΠΎΡƒΠ²ΡŠΡ€Ρ…Π΅Π΄. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Π΅, Ρ‡Π΅ Π·Π° Π³ΡŠΠ²ΠΊΠ°Π²ΠΎΡΡ‚Ρ‚Π° сС ΠΏΠ»Π°Ρ‰Π°. ВсС ΠΏΠ°ΠΊ, PHP ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΡŠΡ‚ ΠΏΠΎΠΊΠ°Π·Π²Π° Π΄ΠΎΠ±Ρ€Π° производитСлност, ΠΌΠ°ΠΊΠ°Ρ€ Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° Π΄Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°, тя Π½Π΅ Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½Π° ΠΈ Π΅Π²Π΅Π½Ρ‚ΡƒΠ°Π»Π½ΠΎ Ρ‰Π΅ бъдС ΠΎΡ‰Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠ° ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° preloading Π² PHP 7.4, Π΄Π° Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° JIT Π² PHP 8.

ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π°ΠΌΠ΅ Π½Π°ΠΏΡ€Π΅Π΄. Π’ Tarantool 2.0 сС появи ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° SQL. НСка Π΄Π° ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Select, Insert, Update ΠΈ Delete, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ SQL ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΈ Π΄Π° сравним Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ с noSQL (Π±ΠΈΠ½Π°Ρ€Π½ΠΈΡ‚Π΅) Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚ΠΈ:

УскорявамС PHP-ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° Tarantool с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Async, Swoole ΠΈ Parallel
Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ SQL Π½Π΅ са особСно впСчатляващи (напомням, Ρ‡Π΅ всС ΠΎΡ‰Π΅ тСствамС синхронния Ρ€Π΅ΠΆΠΈΠΌ). Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π½Π΅ Π±ΠΈΡ… сС Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Π» ΠΏΡ€Π΅ΠΊΠ°Π»Π΅Π½ΠΎ Ρ€Π°Π½ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° SQL всС ΠΎΡ‰Π΅ Π΅ Π² Π°ΠΊΡ‚ΠΈΠ²Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (относитСлно скоро, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, бСшС Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° prepared statements) ΠΈ, съдСйки ΠΏΠΎ списъка issues, SQL двигатСлят Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅ Ρ‡Π°ΠΊΠ° Ρ€Π΅Π΄ΠΈΡ†Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.

Асинхронно

И Ρ‚Π°ΠΊΠ°, Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Async ΠΌΠΎΠΆΠ΅ Π΄Π° Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΏΠΎ-Π³ΠΎΡ€Π΅. Π—Π° писанС Π½Π° асинхронни ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° API, Π±Π°Π·ΠΈΡ€Π°Π½ΠΎ Π½Π° ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅. ΠžΠΏΠΈΡ‚Π½ΠΎ установявамС, Ρ‡Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½ΠΎΡ‚ΠΎ количСство ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½ΠΈ Π·Π° Π½Π°ΡˆΠ°Ρ‚Π° срСда Π΅ 25:

УскорявамС PHP-ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° Tarantool с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Async, Swoole ΠΈ Parallel
β€žΠ Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»ΡΠΌΠ΅β€œ 10,000 ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ 25 ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½ΠΈ ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ сС ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°:

УскорявамС PHP-ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° Tarantool с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Async, Swoole ΠΈ Parallel
Броят ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² сСкунда нарасна ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 3 ΠΏΡŠΡ‚ΠΈ Π·Π° tarantool-php/client!

Π–Π°Π»ΠΊΠΎ, Π½ΠΎ ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΡŠΡ‚ PECL Π½Π΅ стартира с ext-async.

А ΠΊΠ°ΠΊΠ²ΠΎ Ρ‰Π΅ ΠΊΠ°ΠΆΠ΅ΠΌ Π·Π° SQL?

УскорявамС PHP-ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° Tarantool с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Async, Swoole ΠΈ Parallel
ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅, Π² асинхронСн Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ бинарния ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΈ SQL стана Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½Π°.

Swoole

ΠžΡ‚Π½ΠΎΠ²ΠΎ установявамС ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½ΠΎΡ‚ΠΎ количСство ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½ΠΈ, Ρ‚ΠΎΠ·ΠΈ ΠΏΡŠΡ‚ Π·Π° Swoole:
УскорявамС PHP-ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° Tarantool с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Async, Swoole ΠΈ Parallel
Π©Π΅ сС спрСм Π½Π° 25. Π©Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ ΡΡŠΡ‰ΠΈΡ Ρ‚Ρ€ΠΈΠΊ, ΠΊΠ°ΠΊΡ‚ΠΎ с Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Async - Ρ‰Π΅ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ 10,000 ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ 25 ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½ΠΈ. ОсвСн Ρ‚ΠΎΠ²Π°, Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈ тСст, Π² ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ цялата Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° 2 процСса (тоСст всСки процСс Ρ‰Π΅ изпълнява 5,000 ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² 25 ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½ΠΈ). ΠŸΡ€ΠΎΡ†Π΅ΡΠΈΡ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ създадСни с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° SwooleProcess.

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ:

УскорявамС PHP-ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° Tarantool с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Async, Swoole ΠΈ Parallel
Swoole ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-нисък Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π² сравнСниС с Async ΠΏΡ€ΠΈ стартиранС Π² Π΅Π΄ΠΈΠ½ процСс, Π½ΠΎ с 2 процСса ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°Ρ‚Π° сС промСня ΠΊΠΎΡ€Π΅Π½Π½ΠΎ (числото 2 Π½Π΅ Π΅ ΠΈΠ·Π±Ρ€Π°Π½ΠΎ случайно, Π½Π° моята машина ΠΈΠΌΠ΅Π½Π½ΠΎ 2 процСса ΠΏΠΎΠΊΠ°Π·Π°Ρ…Π° Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ).

ΠœΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, Π² Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Async ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ° API Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с процСси, ΠΎΠ±Π°Ρ‡Π΅ Ρ‚Π°ΠΌ Π½Π΅ забСлязах Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΏΡ€ΠΈ стартиранСто Π½Π° Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΎΠ²Π΅ Π² Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ няколко процСса (Π½Π΅ Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‡Π΅ съм ΡΠ³Ρ€Π΅ΡˆΠΈΠ» Π½Π΅Ρ‰ΠΎ).

SQL срСщу Π±ΠΈΠ½Π°Ρ€Π΅Π½ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»:

УскорявамС PHP-ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° Tarantool с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Async, Swoole ΠΈ Parallel
ΠšΠ°ΠΊΡ‚ΠΎ ΠΈ с Async, Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π±ΠΈΠ½Π°Ρ€Π½ΠΈ ΠΈ SQL ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сС Π½Π΅ΡƒΡ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π° Π² асинхронСн Ρ€Π΅ΠΆΠΈΠΌ.

Parallel

Въй ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Parallel Π½Π΅ става Π²ΡŠΠΏΡ€ΠΎΡ Π·Π° ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½ΠΈ, Π° Π·Π° ΠΏΠΎΡ‚ΠΎΡ†ΠΈ, Ρ‰Π΅ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½ΠΎΡ‚ΠΎ количСство ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΈ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ:

УскорявамС PHP-ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° Tarantool с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Async, Swoole ΠΈ Parallel
Π’ΠΎ Π΅ Ρ€Π°Π²Π½ΠΎ Π½Π° 16 Π½Π° моята машина. НСка стартирамС Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΎΠ²Π΅Ρ‚Π΅ Π½Π° ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° 16 ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°:

УскорявамС PHP-ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° Tarantool с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Async, Swoole ΠΈ Parallel
ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅, Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ Π΅ Π΄ΠΎΡ€ΠΈ ΠΏΠΎ-Π΄ΠΎΠ±ΡŠΡ€ Π² сравнСниС с асинхроннитС Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ (Π±Π΅Π· Π΄Π° Π±Ρ€ΠΎΠΈΠΌ Swoole, стартирано Π½Π° 2 процСса). ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ Π·Π° ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€Π° PECL Π½Π° мСстата Π½Π° Update ΠΈ Upsert ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π΅ пусто. Π‘Π²ΡŠΡ€Π·Π°Π½ΠΎ Π΅ с Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Ρ‚Π΅Π·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π°Π²ΡŠΡ€ΡˆΠΈΡ…Π° с Π³Ρ€Π΅ΡˆΠΊΠ° - Π½Π΅ Π·Π½Π°ΠΌ ΠΏΠΎ Π²ΠΈΠ½Π° Π½Π° ext-parallel, ext-tarantool ΠΈΠ»ΠΈ ΠΈ Π΄Π²Π΅Ρ‚Π΅.

Π‘Π΅Π³Π° Ρ‰Π΅ сравним производитСлността Π½Π° SQL:

УскорявамС PHP-ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° Tarantool с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Async, Swoole ΠΈ Parallel
ЗабСлязватС Π»ΠΈ сходство с Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅, стартирани синхронно?

Всичко Ρ‚ΠΎΠ²Π°

И Π½Π° Ρ„ΠΈΠ½Π°Π», собСрСм всС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² ΠΎΠ΄ΠΈΠ½ Π³Ρ€Π°Ρ„ΠΈΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ для тСстируСмых Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ. Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊ лишь ΠΎΠ΄ΠΈΠ½ Π½ΠΎΠ²Ρ‹ΠΉ тСст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π΅Ρ‰Π΅ Π½Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΈ ― запустим ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Async ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Parallel*. ИдСя ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Ρ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ ΡƒΠΆΠ΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»Π°ΡΡŒ Π°Π²Ρ‚ΠΎΡ€Π°ΠΌΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ консСнсус Ρ‚Π°ΠΊ ΠΈ Π½Π΅ Π±Ρ‹Π» достигнут, придСтся Π΄Π΅Π»Π°Ρ‚ΡŒ это самим.

* Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Swoole с Parallel Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, ΠΏΠΎΡ…ΠΎΠΆΠ΅ эти Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ нСсовмСстимы.

Π˜Ρ‚Π°ΠΊ, Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹:

УскорявамС PHP-ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° Tarantool с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Async, Swoole ΠΈ Parallel

ВмСсто Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

На ΠΌΠΎΠΉ взгляд, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выглядят вСсьма достойно, ΠΈ я ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ это Π΅Ρ‰Π΅ Π½Π΅ ΠΏΡ€Π΅Π΄Π΅Π»! НуТно Π»ΠΈ это Π²Π°ΠΌ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π°ΠΌ самим, скаТу лишь, Ρ‡Ρ‚ΠΎ для мСня это Π±Ρ‹Π» интСрСсный экспСримСнт, Π΄Π°ΡŽΡ‰ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ, сколько ΠΌΠΎΠΆΠ½ΠΎ Β«Π²Ρ‹ΠΆΠ°Ρ‚ΡŒΒ» ΠΈΠ· синхронного TCP-ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΎΡ€Π° с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ усилиями. Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΈΠ΄Π΅ΠΈ ΠΏΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΎΠ² ― я с Ρ€Π°Π΄ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΡŽ ваш ΠΏΡƒΠ» рСквСст. Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ с инструкциями ΠΏΠΎ запуску ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster