Nascóirí PHP do Tarantool a luathú ag baint úsáide as Async, Swoole agus Parallel

Nascóirí PHP do Tarantool a luathú ag baint úsáide as Async, Swoole agus Parallel

In éiceachóras PHP tá dhá chónaisc faoi láthair le haghaidh oibriú leis an bhfreastalaí Tarantool - is é seo an síneadh oifigiúil PECL tarantool/tarantool-php, scríofa i C, agus tarantool-php/client, scríofa i PHP. Is mise údar an dara ceann.

San Airteagal seo, ba mhaith liom torthaí tástála feidhmíochta an dá leabharlann a roinnt agus a thaispeáint conas, le hathruithe íosta ar an gcód, is féidir leat méadú feidhmíochta 3-5 a bhaint amach (ar thástálacha sintéiseacha!).

Cad a dhéanfaimid tástáil?

Déanfaimid tástáil ar na cinn atá luaite thuas sioncronach chónaisc ag rith asynchronously, go comhthreomhar, agus asynchronously-comhthreomhar. 🙂 Nílimid ag iarraidh dul i dteagmháil le cód na gcónascairí féin ach oiread. Tá roinnt breiseán ar fáil faoi láthair chun an méid atá uait a bhaint amach:

  • Sluagh - creat asincrónach ardfheidhmíochta do PHP. Úsáidte ag fathaigh Idirlín ar nós Alibaba agus Baidu. Ón leagan 4.1.0 tá modh draíochta le feiceáil SwooleRuntime::enableCoroutine(), a ligeann duit "leabharlanna líonra PHP sioncrónacha a thiontú go cinn asincrónacha le líne amháin de chód."
  • Bhí Async go dtí le déanaí ina shíneadh an-gheallta ar obair asincrónach i PHP. Cén fáth go dtí le déanaí? Ar an drochuair, ar chúis nach eol dom, scrios an t-údar an stór agus níl cinniúint an tionscadail amach anseo soiléir. Beidh orm é a úsáid a ó forcanna. Cosúil le Swoole, ceadaíonn an síneadh seo duit do pants a chasadh ar siúl go héasca le flick an chaol na láimhe chun asincrónach a chumasú trí na leaganacha asincrónacha a chur in ionad chur i bhfeidhm caighdeánach sruthanna TCP agus TLS. Déantar é seo tríd an rogha “async.tcp = 1".
  • Comhuaineach ― síneadh measartha nua ón Joe Watkins a bhfuil clú air, údar leabharlanna mar phpdbg, apcu, pthreads, pcov, uopz. Soláthraíonn an síneadh API le haghaidh ilshnáithe i PHP agus tá sé suite in ionad snáitheanna pt. Teorainn shuntasach ar an leabharlann ná nach n-oibríonn sé ach leis an leagan ZTS (Zend Thread Safe) de PHP.

Conas a dhéanfaimid tástáil?

Seolfaimid sampla Tarantool agus díchumasaíodh logáil ar aghaidh (wal_mode = aon cheann) agus maolán líonra méadaithe (inléite = 1 * 1024 * 1024). Cuirfidh an chéad rogha deireadh le hobair leis an diosca, beidh an dara rogha in ann níos mó iarratais a léamh ó mhaolán an chórais oibriúcháin agus ar an gcaoi sin íoslaghdófar líon na nglaonna córais.

Maidir le tagarmharcanna a oibríonn le sonraí (cuir isteach, scriosadh, léamh, etc.), sula dtosaíonn tú ar an tagarmharc, cruthófar (ath)spás memtx, ina gcruthaítear na bunluachanna innéacs ag gineadóir de luachanna slánuimhir ordaithe . (seicheamh).
Breathnaíonn an spás DDL mar seo:

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

Más gá, roimh an tagarmharc a rith, líontar an spás le 10,000 tuples den fhoirm

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

Faightear rochtain ar thuples le luach eochrach randamach.

Is iarratas amháin chuig an bhfreastalaí an tagarmharc féin, a dhéantar 10,000 uair (réabhlóidí), a dhéantar, ar a seal, in atriallta. Déantar na hathtriallta go dtí go mbíonn gach diallas ama idir 5 atriall laistigh d’earráid inghlactha 3%*. Tar éis seo, tógtar an toradh meánach. Tá sos 1 soicind idir atriallta chun cosc ​​a chur ar an bpróiseálaí scata. Díchumasaítear bailitheoir truflais Lua roimh gach atriall agus cuirtear iallach air tosú nuair a bhíonn sé críochnaithe. Ní sheoltar an próiseas PHP ach leis na síntí atá riachtanach don tagarmharc, le maolánú aschuir cumasaithe agus an bailitheoir truflais díchumasaithe.

* Is féidir líon na réabhlóidí, atriallta agus tairseach earráide a athrú sna socruithe tagarmhairc.

Timpeallacht tástála

Rinneadh na torthaí a foilsíodh thíos ar chóras oibriúcháin MacBookPro (2015), - Fedora 30 (leagan eithne 5.3.8-200.fc30.x86_64). Seoladh Tarantool sa docker leis an bparaiméadar "--network host".

Leaganacha pacáiste:

Tarantool: 2.3.0-115-g5ba5ed37e
Docker: 19.03.3, tóg a872fc2f86
PHP: 7.3.11 (cli) (tógtha: Oct 22 2019 08:11:04)
tarantool / cliant: 0.6.0
rybakit/msgpack: 0.6.1
ext-tarantool: 0.3.2 (+ paiste do 7.3)*
ext-msgpack: 2.0.3
iar-shioncronú: 0.3.0-8c1da46
iar-swoole: 4.4.12
iar-chomhthreomhar: 1.1.3

* Ar an drochuair, ní oibríonn an cónascaire oifigiúil le leagan PHP> 7.2. Chun an síneadh a thiomsú agus a rith ar PHP 7.3, bhí orm a úsáid paiste.

Torthaí

Modh sioncronach

Úsáideann an prótacal Tarantool formáid dhénártha MessagePack chun teachtaireachtaí a shraithiú. Sa chónascaire PECL, tá sraithiú i bhfolach go domhain i doimhneacht na leabharlainne agus bíonn tionchar aige ar an bpróiseas ionchódaithe ó chód úsáideora is cosúil nach féidir. Soláthraíonn cónascaire PHP íon, ar a mhalairt, an cumas an próiseas ionchódaithe a shaincheapadh tríd an ionchódóir caighdeánach a leathnú nó trí do chur chun feidhme féin a úsáid. Tá dhá ionchódóir ar fáil as an mbosca, tá ceann amháin bunaithe orthu msgpack/msgpack-php (síneadh oifigiúil MessagePack PECL), tá an ceann eile ar siúl rybakit/msgpack (i PHP íon).

Sula ndéanfar comparáid idir chónaisc, déanfaimid feidhmíocht ionchódóirí MessagePack don chónascaire PHP a thomhas agus i dtástálacha breise úsáidfimid an ceann a thaispeánann an toradh is fearr:

Nascóirí PHP do Tarantool a luathú ag baint úsáide as Async, Swoole agus Parallel
Cé go bhfuil an leagan PHP (Pure) níos lú ná an síneadh PECL i luas, i dtionscadail fíor ba mhaith liom fós a mholadh é a úsáid rybakit/msgpack, mar gheall ar an síneadh oifigiúil MessagePack níl an tsonraíocht fhormáid curtha i bhfeidhm ach go páirteach (mar shampla, níl aon tacaíocht ann do chineálacha sonraí saincheaptha, gan é sin ní bheidh tú in ann Deachúil a úsáid - cineál sonraí nua a tugadh isteach i Tarantool 2.3) agus tá a líon daoine eile fadhbanna (lena n-áirítear saincheisteanna comhoiriúnachta le PHP 7.4). Bhuel, go ginearálta, breathnaíonn an tionscadal tréigthe.

Mar sin, déanaimis feidhmíocht chónaisc a thomhas i mód sioncrónach:

Nascóirí PHP do Tarantool a luathú ag baint úsáide as Async, Swoole agus Parallel
Mar is léir ón ngraf, taispeánann an cónascaire PECL (Tarantool) feidhmíocht níos fearr i gcomparáid leis an gcónascaire PHP (Cliant). Ach ní haon ionadh é seo, ós rud é go ndéanann an dara ceann, chomh maith le bheith curtha i bhfeidhm i dteanga níos moille, níos mó oibre i ndáiríre: cruthaítear réad nua le gach glao Iarratas и Fhreagairt (i gcás Roghnaigh - freisin Critéir, agus i gcás Nuashonrú/Tuairiscí ― Oibríochtaí), aonáin ar leith Ceangal, Pacálaí и láimhseálaí cuireann siad forchostais freisin. Ar ndóigh, tagann solúbthacht ar phraghas. Mar sin féin, go ginearálta, léiríonn an t-ateangaire PHP feidhmíocht mhaith, cé go bhfuil difríocht ann, tá sé neamhshuntasach agus, b'fhéidir, beidh sé níos lú fós nuair a bhíonn réamhlódáil á úsáid i PHP 7.4, gan trácht ar JIT i PHP 8.

Bogaimis ar aghaidh. Chuir Tarantool 2.0 tacaíocht leis do SQL. Déanaimis iarracht oibríochtaí Roghnaigh, Ionsáigh, Nuashonraigh agus Scrios a dhéanamh ag baint úsáide as prótacal SQL agus cuir na torthaí i gcomparáid leis na coibhéisí noSQL (dénártha):

Nascóirí PHP do Tarantool a luathú ag baint úsáide as Async, Swoole agus Parallel
Níl na torthaí SQL an-suntasach (lig dom i gcuimhne duit go bhfuil muid fós ag tástáil mód sioncronach). Mar sin féin, ní thiocfadh liom a bheith trína chéile faoi seo roimh an am; tá tacaíocht SQL fós á forbairt go gníomhach (le déanaí, mar shampla, cuireadh tacaíocht leis ráitis ullmhaithe) agus, ag breith ar an liosta saincheisteanna, beidh an t-inneall SQL dul faoi roinnt optimizations sa todhchaí.

Asincréite

Bhuel, féach anois conas is féidir leis an síneadh Async cabhrú linn na torthaí thuas a fheabhsú. Chun cláir asincrónacha a scríobh, soláthraíonn an síneadh API bunaithe ar coroutines, a úsáidfimid. Faighimid amach go heimpíreach gurb é an líon coroutines is fearr dár dtimpeallacht ná 25:

Nascóirí PHP do Tarantool a luathú ag baint úsáide as Async, Swoole agus Parallel
“Caith” 10,000 oibríocht thar 25 coroutines agus féach cad a tharlaíonn:

Nascóirí PHP do Tarantool a luathú ag baint úsáide as Async, Swoole agus Parallel
Tháinig méadú níos mó ná 3 huaire ar líon na n-oibríochtaí in aghaidh an tsoicind le haghaidh tarantool-php/client!

Faraor, níor thosaigh an cónascaire PECL le ext-async.

Cad faoi SQL?

Nascóirí PHP do Tarantool a luathú ag baint úsáide as Async, Swoole agus Parallel
Mar a fheiceann tú, i mód asincrónach tháinig an difríocht idir an prótacal dénártha agus SQL laistigh den lamháil earráide.

Sluagh

Faighimid amach arís an líon coroutines is fearr, an uair seo do Swoole:
Nascóirí PHP do Tarantool a luathú ag baint úsáide as Async, Swoole agus Parallel
Stopfaimid ag 25. Déanaimis an cleas céanna agus a dhéantar leis an síneadh Async arís - dáileadh 10,000 oibríocht idir 25 coroutines. Ina theannta sin, cuirfimid tástáil eile leis ina roinnfimid an obair ar fad i 2 dhá phróiseas (is é sin, déanfaidh gach próiseas 5,000 oibríocht i 25 coroutines). Cruthófar próisis ag baint úsáide as SwooleProcess.

Torthaí:

Nascóirí PHP do Tarantool a luathú ag baint úsáide as Async, Swoole agus Parallel
Léiríonn Swole toradh beagán níos ísle i gcomparáid le Async nuair a reáchtáiltear é i bpróiseas amháin, ach le 2 phróiseas athraíonn an pictiúr go mór (níor roghnaíodh an uimhir 2 de sheans; ar mo mheaisín, ba é 2 phróiseas a léirigh an toradh is fearr).

Dála an scéil, tá API ag an síneadh Async freisin chun oibriú le próisis, ach níor thug mé faoi deara aon difríocht ó thagarmharcanna a rith i bpróiseas amháin nó níos mó (is féidir go ndearna mé praiseach áit éigin).

SQL vs prótacal dénártha:

Nascóirí PHP do Tarantool a luathú ag baint úsáide as Async, Swoole agus Parallel
Mar is amhlaidh le Async, cuirtear deireadh leis an difríocht idir oibríochtaí dénártha agus SQL i mód asincrónach.

Comhuaineach

Ós rud é nach mbaineann an síneadh Comhuaineach le coroutines, ach le snáitheanna, déanaimis an líon is fearr snáitheanna comhthreomhara a thomhas:

Nascóirí PHP do Tarantool a luathú ag baint úsáide as Async, Swoole agus Parallel
Tá sé 16 ar mo mheaisín. Déanaimis tagarmharcanna cónascaire a reáchtáil ar 16 snáithe comhthreomhara:

Nascóirí PHP do Tarantool a luathú ag baint úsáide as Async, Swoole agus Parallel
Mar a fheiceann tú, tá an toradh níos fearr fós ná le síntí asincrónacha (gan Swoole ag rith ar 2 phróiseas a chomhaireamh). Tabhair faoi deara go bhfuil na hoibríochtaí Nuashonraithe agus Upsert folamh don nascóir PECL. Tá sé seo mar gheall ar an bhfíric gur theip ar na hoibríochtaí seo le hearráid - níl a fhios agam an raibh an locht ar ext-comhthreomhar, ext-tarantool, nó an dá rud.

Anois déanaimis feidhmíocht SQL a chur i gcomparáid:

Nascóirí PHP do Tarantool a luathú ag baint úsáide as Async, Swoole agus Parallel
An dtugann tú faoi deara an chosúlacht atá leis an ngraf do chónaisc a ritheann go sioncronach?

Le chéile

Agus ar deireadh, déanaimis achoimre ar na torthaí go léir in aon ghraf amháin chun an pictiúr iomlán do na síntí tástálaithe a fheiceáil. Cuirimis tástáil nua amháin leis an gcairt, rud nach bhfuil déanta againn fós - reáchtálfaimid coroutines Async ag an am céanna ag baint úsáide as Parallel*. Tá an smaoineamh ar na síntí thuas a chomhtháthú cheana féin pléadh údair, ach níor thángthas ar chomhaontú, beidh ort é a dhéanamh leat féin.

* Níorbh fhéidir coroutines Swoole a sheoladh le Parallel; is cosúil go bhfuil na síntí seo neamh-chomhoiriúnach.

Mar sin, na torthaí deiridh:

Nascóirí PHP do Tarantool a luathú ag baint úsáide as Async, Swoole agus Parallel

In ionad a thabhairt i gcrích

Is é mo thuairim go raibh na torthaí fiúntach go leor, agus ar chúis éigin táim cinnte nach é seo an teorainn! Cibé an gá duit é seo a chinneadh i bhfíorthionscadal duit féin amháin, ní déarfaidh mé ach gur turgnamh suimiúil a bhí ann domsa a ligeann duit a mheas cé mhéad is féidir leat a “bhrú” as cónascaire TCP sioncrónach gan mórán iarrachta. Má tá smaointe agat chun tagarmharcanna a fheabhsú, beidh mé sásta d’iarratas ar tharraingt a mheas. Foilsítear gach cód ina bhfuil treoracha seolta agus torthaí i gceann ar leith stórtha.

Foinse: will.com

Add a comment