Faʻateleina fesoʻotaʻiga PHP mo Tarantool faʻaaoga Async, Swoole ma Parallel

Faʻateleina fesoʻotaʻiga PHP mo Tarantool faʻaaoga Async, Swoole ma Parallel

I totonu o le PHP ecosystem o loʻo i ai nei fesoʻotaʻiga e lua mo le galulue faʻatasi ma le server Tarantool - o le faʻaopoopoga aloaia a le PECL. tarantool/tarantool-php, tusia i le C, ma tarantool-php/client, tusia i le PHP. O a'u o le tusitala o le tusi mulimuli.

I lenei tusiga, ou te manaʻo e faʻasoa iʻuga o faʻataʻitaʻiga faʻataʻitaʻiga o faletusi uma e lua ma faʻaalia pe faʻapefea, faʻatasi ai ma suiga laiti i le code, e mafai ona e ausia se faʻaopoopoga o le 3-5 (i su'ega fa'akomepiuta!).

O le a le mea o le a tatou tofotofoina?

O le a matou suʻeina mea na taʻua i luga fa'atasi feso'ota'iga o lo'o fa'agasolo fa'atasi, fa'atasi, ma asynchronously-parallel. 🙂 Matou te le manaʻo foi e paʻi i le numera o fesoʻotaʻiga latou lava. O loʻo i ai nei le tele o faʻaopoopoga avanoa e ausia ai mea e te manaʻo ai:

  • Swoole ―se auivi asynchronous maualuga fa'atinoga mo PHP. Faʻaaogaina e ia tagata tetele Initaneti e pei o Alibaba ma Baidu. Talu mai le version 4.1.0 ua aliali mai ai se faiga fa'ataulāitu SwooleRuntime::enableCoroutine(), lea e mafai ai e oe ona "faaliliuina faletusi fesoʻotaʻiga PHP synchronous i faletusi faʻatasi ma le laina tasi o code."
  • Async na oʻo mai talu ai nei o se faʻaopoopoga faʻalauiloa mo galuega le faʻaogaina i le PHP. Aisea e oo mai ai talu ai nei? Ae paga lea, mo se mafuaʻaga e le o iloa e aʻu, na tapeina e le tusitala le fale teu oloa ma e le o manino le lumanaʻi o le poloketi. E tatau ona ou faaaogaina tasi mai tui. E pei o Swoole, o lenei fa'aopoopoga e mafai ai e oe ona faigofie ona fa'aulu lou ofuvae i le fa'aulu o le tapulima ina ia mafai ai le asynchrony e ala i le suia o le fa'atinoga masani o TCP ma TLS vaitafe ma a latou fa'aliliuga asynchronous. E faia lenei mea e ala i le filifiliga "async.tcp = 1".
  • E tutusa - o se fa'aopoopoga fou mai le ta'uta'ua Joe Watkins, tusitala o ia faletusi e pei o le phpdbg, apcu, pthreads, pcov, uopz. O le faʻaopoopoga e maua ai se API mo le tele o filo i le PHP ma o loʻo faʻatulagaina e fai ma sui mo pthreads. Ole tapula'a taua ole faletusi e na'o le ZTS (Zend Thread Safe) version ole PHP.

E faapefea ona tatou tofotofoina?

Sei o tatou faʻalauiloa se faʻataʻitaʻiga Tarantool ma le tusitusi-i luma logging le atoatoa (wal_mode = leai) ma le fa'ateleina o feso'ota'iga pa'u (faitau i luma = 1 * 1024 * 1024). O le filifiliga muamua o le a faʻaumatia ai le galuega ma le disk, o le lona lua o le a mafai ai ona faitau atili talosaga mai le faʻaogaina o le polokalama faʻapipiʻi ma faʻaitiitia ai le numera o telefoni feaveaʻi.

Mo faʻailoga e galulue faʻatasi ma faʻamaumauga (faʻapipiʻi, tapeina, faitau, ma isi), aʻo leʻi amataina le faʻailoga, o le a (toe) faia se avanoa memtx, lea e faia ai le faʻamaufaʻailoga autu e se generator o faʻatonuga tau aofaʻi. (faasologa).
O le avanoa DDL e pei o lenei:

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}})

Afai e manaʻomia, aʻo leʻi faia le faʻailoga, e faʻatumu le avanoa i le 10,000 tuples o le fomu.

{id, "tuplе_<id>"}

Tuples e maua i le fa'aaogaina o se tau fa'ailoga fa'afuase'i.

O le faʻailoga lava ia o se talosaga e tasi i le 'auʻaunaga, lea e faʻatinoina 10,000 taimi (revolutions), lea, i le isi itu, o loʻo faʻatinoina i le faʻasologa. O fa'asologa e toe fai se'ia o'o i taimi uma fa'aletonu i le va o le 5 fa'asologa o lo'o i totonu o se mea sese e talia e 3%*. A maeʻa lenei mea, o le averesi o le iʻuga e ave. O lo'o i ai se taofi e 1 lona lua i le va o fa'asologa e taofia ai le fa'agasolo mai le fa'amalo. E le atoatoa le fa'aputu lapisi a Lua a'o le'i faia ta'itasi ma fa'amalosi e amata pe a mae'a. Ole fa'agasologa o le PHP e fa'alauiloa na'o fa'aopoopoga e mana'omia mo le fa'ailoga, fa'atasi ai ma le fa'apolopolo o galuega fa'atino ma fa'aletonu le tagata e aoina lapisi.

* Ole numera o suiga, faʻasologa ma mea sese e mafai ona suia i tulaga faʻailoga.

Si'osi'omaga su'ega

O faʻaiʻuga na lomia i lalo na faia i luga o le MacBookPro (2015), faʻaogaina faiga - Fedora 30 (kernel version 5.3.8-200.fc30.x86_64). Tarantool na faʻalauiloaina i le docker ma le parakalafa "--network host".

Ituaiga afifi:

Tarantool: 2.3.0-115-g5ba5ed37e
Docker: 19.03.3, fausia le a872fc2f86
PHP: 7.3.11 (cli) (fausia: Oke 22 2019 08:11:04)
tarantool/tagata fa'atau: 0.6.0
rybakit/msgpack: 0.6.1
ext-tarantool: 0.3.2 (+ patch mo 7.3)*
ext-msgpack: 2.0.3
ext-async: 0.3.0-8c1da46
ext-swooole: 4.4.12
fa'atasi-tutusa: 1.1.3

* Ae paga lea, o le fesoʻotaʻiga aloaʻia e le galue i le PHP version> 7.2. Ina ia tuufaatasia ma taʻavale le faʻaopoopoga ile PHP 7.3, e tatau ona ou faʻaaogaina patch.

Iʻuga

Faiga fa'atasi

O le Tarantool protocol e faʻaaogaina se faʻatulagaga binary MessagePack e fa'asalalau fe'au. I le feso'ota'iga PECL, o lo'o natia le fa'asologa i le loloto o le faletusi ma a'afia ai le fa'asologa o le fa'asologa mai le codeland user. e foliga mai e le mafai. O se fesoʻotaʻiga PHP mama, i se isi itu, e maua ai le tomai e faʻavasegaina le faʻasologa o le faʻasologa e ala i le faʻalauteleina o le encoder masani poʻo le faʻaaogaina o lau lava faʻatinoga. E lua encoders o loʻo avanoa mai le pusa, tasi e faʻavae i luga msgpack/msgpack-php (fa'aopoopoga MessagePack PECL), o lo'o i luga le isi rybakit/msgpack (i le PHP mama).

Aʻo leʻi faʻatusatusaina fesoʻotaʻiga, matou te fuaina le faʻatinoga o MessagePack encoders mo le PHP fesoʻotaʻiga ma i isi suʻega o le a matou faʻaogaina le mea e faʻaalia ai le taunuuga sili:

Faʻateleina fesoʻotaʻiga PHP mo Tarantool faʻaaoga Async, Swoole ma Parallel
E ui lava o le PHP version (Pure) e maualalo ifo i le PECL faʻalauteleina i le saoasaoa, i galuega moni ou te fautuaina pea le faʻaaogaina. rybakit/msgpack, aua i le faʻalauteleina o le MessagePack faʻapitoa o le faʻatulagaina o faʻamatalaga e naʻo se vaega e faʻatinoina (mo se faʻataʻitaʻiga, e leai se lagolago mo ituaiga faʻamaumauga masani, a aunoa ma lea o le a le mafai ona e faʻaogaina le Decimal - o se faʻamatalaga fou o faʻamatalaga na faʻalauiloaina i Tarantool 2.3) ma e iai se numera o isi faʻafitauli (e aofia ai fa'afitauli fetaui ma le PHP 7.4). Ia, i se tulaga lautele, o le poloketi e foliga mai ua tuulafoaia.

O lea la, seʻi o tatou fuaina le faʻatinoga o fesoʻotaʻiga i le synchronous mode:

Faʻateleina fesoʻotaʻiga PHP mo Tarantool faʻaaoga Async, Swoole ma Parallel
E pei ona mafai ona vaʻaia mai le kalafi, o le fesoʻotaʻiga PECL (Tarantool) o loʻo faʻaalia le sili atu le faʻatinoga pe a faʻatusatusa i le PHP fesoʻotaʻiga (Client). Ae e le o se mea e ofo ai, talu ai o le mea mulimuli, e faaopoopo atu i le faʻatinoina i se gagana faʻagesegese, e moni lava e sili atu galuega: o se mea fou e faia i valaau taʻitasi. talosaga и tali (i le tulaga o Filifili - foi Taiala, ma i le tulaga o le Update/Upsert ― faagaoioiga), vaega eseese Sooga, Afifiina и Handler latou fa'aopoopo fo'i i luga. E manino lava, o le fetuutuunai e sau i se tau. Ae ui i lea, i se tulaga lautele, o le PHP faʻaliliuga e faʻaalia lelei le faʻatinoga, e ui lava o loʻo i ai se eseesega, e le taua ma, masalo, o le a faʻaitiitia pe a faʻaaogaina le utaina i le PHP 7.4, ae le o le taʻua o le JIT ile PHP 8.

Tatou agai i luma. Tarantool 2.0 faaopoopo lagolago mo SQL. Sei o tatou taumafai e fai le Filifili, Faʻaofi, Faʻafou ma Aveese gaioiga e faʻaaoga ai le SQL protocol ma faʻatusatusa iʻuga ma le noSQL (binary) tutusa:

Faʻateleina fesoʻotaʻiga PHP mo Tarantool faʻaaoga Async, Swoole ma Parallel
O taunuʻuga a le SQL e le manaia tele (seʻi ou faamanatu atu ia te oe o loʻo matou faʻataʻitaʻiina le faiga faʻatasi). Ae ui i lea, o le a ou le ita e uiga i lenei mea i luma atu o le taimi; lagolago SQL o loʻo faʻaauau pea ona atinaʻe (e leʻi leva talu ai nei, mo se faʻataʻitaʻiga, na faʻaopoopoina le lagolago fa'amatalaga saunia) ma, fa'amasino i le lisi mataupu, o le SQL engine o le a feagai ma le tele o faʻataʻitaʻiga i le lumanaʻi.

async

Ia, se'i o tatou va'ai pe fa'afefea ona fesoasoani le fa'aopoopoga Async ia i tatou e fa'aleleia atili fa'ai'uga o lo'o i luga. Ina ia tusia polokalame asynchronous, o le faʻaopoopoga e maua ai se API faʻavae i luga o coroutines, lea o le a matou faʻaogaina. Matou te iloa faʻamaonia o le numera sili ona lelei o coroutines mo lo tatou siosiomaga e 25:

Faʻateleina fesoʻotaʻiga PHP mo Tarantool faʻaaoga Async, Swoole ma Parallel
“Faasalalau” le 10,000 gaioiga i le 25 coroutine ma vaai po o le a le mea e tupu:

Faʻateleina fesoʻotaʻiga PHP mo Tarantool faʻaaoga Async, Swoole ma Parallel
Ole numera o gaioiga ile sekone na faʻaopoopoina ile sili atu ile 3 taimi mo tarantool-php/client!

O le mea e faanoanoa ai, e leʻi amataina le fesoʻotaʻiga PECL i le ext-async.

Ae faapefea SQL?

Faʻateleina fesoʻotaʻiga PHP mo Tarantool faʻaaoga Async, Swoole ma Parallel
E pei ona mafai ona e vaʻai, i le asynchronous mode le eseesega i le va o le binary protocol ma le SQL na i totonu o le pito o mea sese.

Swoole

Matou te toe maua le numera sili ona lelei o coroutines, o le taimi lenei mo Swoole:
Faʻateleina fesoʻotaʻiga PHP mo Tarantool faʻaaoga Async, Swoole ma Parallel
Se'i o tatou tu ile 25. Se'i o tatou toe fai le togafiti lava lea e tasi e pei o le fa'aopoopoga Async - tufatufa 10,000 gaioiga i le va o 25 coroutines. E le gata i lea, o le a matou faʻaopoopoina se isi suʻega lea o le a matou vaevaeina ai galuega uma i le 2 faiga e lua (o lona uiga, o faʻagasologa taʻitasi o le a faia 5,000 gaioiga i 25 coroutines). Fa'agasologa o le a faia fa'aaoga SwooleProcess.

Iʻuga:

Faʻateleina fesoʻotaʻiga PHP mo Tarantool faʻaaoga Async, Swoole ma Parallel
Swole o loʻo faʻaalia se iʻuga laʻititi laʻititi pe a faʻatusatusa i le Async pe a taʻavale i le tasi gaioiga, ae faʻatasi ai ma le 2 faʻagasologa o le ata e suia tele (o le numera 2 e leʻi filifilia i se avanoa; i luga o laʻu masini, e 2 faiga na faʻaalia ai le taunuuga sili).

I le auala, o le faʻaopoopoga Async o loʻo i ai foi se API mo le galue i faiga, ae o iina ou te leʻi matauina se eseesega mai le faʻaogaina o faʻailoga i se tasi pe sili atu faiga (atonu na ou faʻafefe i se mea).

SQL vs binary protocol:

Faʻateleina fesoʻotaʻiga PHP mo Tarantool faʻaaoga Async, Swoole ma Parallel
E pei o Async, o le eseesega i le va o le binary ma le SQL gaioiga e faʻaumatia i le asynchronous mode.

E tutusa

Talu ai o le Fa'aopoopoga Fa'atasi e le'o fa'atatau i coroutine, ae e uiga i filo, se'i o tatou fuaina le numera sili ona lelei o filo tutusa:

Faʻateleina fesoʻotaʻiga PHP mo Tarantool faʻaaoga Async, Swoole ma Parallel
E 16 i la'u masini. Se'i o tatou fa'ata'ita'iina fa'ailoga feso'ota'i i luga o filo fa'atusa e 16:

Faʻateleina fesoʻotaʻiga PHP mo Tarantool faʻaaoga Async, Swoole ma Parallel
E pei ona mafai ona e vaʻai, o le taunuuga e sili atu nai lo faʻaopoopoga asynchronous (e le o faitauina le Swoole o loʻo tamoe i luga ole 2 faiga). Manatua mo le fesoʻotaʻiga PECL, o faʻagaioiga Faʻafouina ma Upsert e gaogao. E mafua ona o le mea moni o nei gaioiga na le manuia i se mea sese - Ou te le iloa pe o le sese o le ext-parallel, ext-tarantool, poʻo mea uma e lua.

Sei o tatou faʻatusatusa le faʻatinoga SQL:

Faʻateleina fesoʻotaʻiga PHP mo Tarantool faʻaaoga Async, Swoole ma Parallel
Matauina le tutusa ma le kalafi mo feso'ota'iga o lo'o alu fa'atasi?

Fa'atasi

Ma le mea mulimuli, seʻi o tatou aotele uma iʻuga i le kalafi e tasi e vaʻai ai i le ata atoa mo faʻaopoopoga faʻataʻitaʻiga. Se'i fa'aopoopo na'o le tasi le su'ega fou i le siata, lea e le'i faia lava - o le a fa'agasolo fa'atasi Async coroutines e fa'aaoga ai le Parallel*. O le manatu o le tuʻufaʻatasia o faʻaopoopoga o loʻo i luga ua uma sa talanoaina tusitala, ae leai se maliega na maua, e tatau ona e faia e oe lava ia.

* E le'i mafai ona fa'alauiloa Swoole coroutines ma Parallel e foliga mai o nei fa'aopoopoga e le fetaui.

O lea, o taunuuga mulimuli:

Faʻateleina fesoʻotaʻiga PHP mo Tarantool faʻaaoga Async, Swoole ma Parallel

Nai lo o se faaiuga

I loʻu manatu, o taunuuga na foliga mai e matua aoga lava, ma mo nisi mafuaaga ou te mautinoa e le o le tapulaa lea! Pe e te manaʻomia le filifilia o lenei mea i se galuega moni naʻo oe lava, o le a ou fai atu mo aʻu o se faʻataʻitaʻiga manaia lea e mafai ai e oe ona iloilo le tele e mafai ona e "oomi" mai se fesoʻotaʻiga TCP faʻatasi ma se taumafaiga itiiti. Afai ei ai ni ou manatu mo le faʻaleleia o faʻailoga, ou te fiafia e mafaufau i lau talosaga toso. O tulafono uma o lo'o iai fa'atonuga fa'alauiloa ma fa'ai'uga o lo'o fa'asalalauina ile ese'ese faleteuoloa.

puna: www.habr.com

Faaopoopo i ai se faamatalaga