Dardar gelinta isku xirayaasha PHP ee Tarantool iyadoo la adeegsanayo Async, Swoole iyo Parallel

Dardar gelinta isku xirayaasha PHP ee Tarantool iyadoo la adeegsanayo Async, Swoole iyo Parallel

Nidaamka deegaanka ee PHP wuxuu hadda leeyahay laba xiriiriye si uu ula shaqeeyo serverka Tarantool: kordhinta rasmiga ah ee PECL tarantool/tarantool-php, ku qoran C, iyo tarantool-php/macmiil, oo ku qoran PHP. Waxaan ahay qoraaga kan dambe.

Maqaalkan waxaan jeclaan lahaa inaan wadaago natiijooyinka imtixaanka waxqabadka ee labada maktabadood oo aan tusiyo sida isbeddelada ugu yar ee koodhka aad ku gaari karto 3-5 jeer faa'iidada waxqabadka (imtixaannada synthetic!).

Maxaan tijaabin doonnaa?

Waxaan tijaabin doonaa kuwa kor ku xusan isku mid ah Xidhiidhiyayaasha u socda si isle'eg, isbar-bar socda, iyo isbarbar-dhig. 🙂 Sidoo kale ma rabno inaan taabano koodhka isku xirka laftiisa. Dhawr kordhin ayaa hadda diyaar ah oo tan lagu gaari karo:

  • Swoole waa qaab-dhismeedka PHP asynchronous-waxqabad sare leh. Waxaa isticmaala shirkadaha waaweyn ee internetka sida Alibaba iyo Baidu. Nooca 4.1.0 wuxuu soo bandhigay habka sixirka. SwooleRuntime :: awoodCoroutine(), kaas oo kuu ogolaanaya inaad " u beddesho maktabadaha isku-xidhka isku-xidhka ah ee PHP una beddelo kuwa asynchronous ah oo leh hal xariiq oo kood ah."
  • Ilaa dhowaan, Async wuxuu ahaa kordhin rajo leh oo loogu talagalay shaqada asynchronous ee PHP. Waa maxay sababta ilaa dhawaan? Nasiib darro, sababo aan la garanayn awgeed, qoraagu wuu tirtiray kaydkii, mustaqbalka mashruucana ma cadda. waa inaan isticmaalo hal laga bilaabo fargeeto. Sida Swoole oo kale, kordhintan ayaa kuu ogolaanaysa inaad si fudud awood ugu yeelatid async adiga oo ku bedelaya heerka caadiga ah ee TCP iyo TLS hirgalinta noocyadooda asynchronous. Tan waxaa lagu sameeyaa iyada oo loo marayo "async.tcp = 1«.
  • Is barbardhig waa kordhin cusub oo ka timid Joe Watkins oo caan ah, qoraa maktabadaha sida phpdbg, apcu, pthreads, pcov, iyo uopz. Kordhinta ayaa siisa API-ga loogu talagalay isku-dhufashada PHP waxaana loo dhigayaa beddelka pthreads. Xaddidaadda weyn ee maktabadda ayaa ah inay la shaqeyso oo keliya ZTS (Zend Thread Safe) nooca PHP.

Sideen u tijaabin doonaa?

Aan bilowno tusaale Tarantool oo leh qoraal-qoraal hore oo naafo ah (wal_mode = midnaiyo kororka shabakadaha kaydiya (akhrinta = 1 * 1024 * 1024). Xulashada koowaad waxay meesha ka saari doontaa gelitaanka diskka, halka kan labaadna uu u oggolaan doono codsiyo badan in laga akhriyo kaydiyaha nidaamka hawlgalka, taas oo yaraynaysa tirada wicitaannada nidaamka.

Tilmaamaha ku shaqeeya xogta (geli, tirtir, akhri, iwm.), ka hor inta aan la bilaabin bar-tilmaameedka, meel bannaan oo memtx ah ayaa la abuuri doonaa (dib u) kaas oo qiyamka index aasaasiga ah uu abuuray koronto-dhaliye ah qiimaha isugeynta la dalbaday (isku xigxiga).
DDL boosku wuxuu u eg yahay sidan:

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

Haddii loo baahdo, ka hor inta aanad bilaabin bartilmaameedka, booska waxaa ka buuxsamay 10,000 tuples oo foomka ah.

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

Helitaanka tuples waxaa bixiya qiimo aan toos ahayn.

Halbeegga laftiisu wuxuu ka kooban yahay hal codsi oo server ah oo la fuliyay 10,000 jeer (kacaanno), ka dibna la soo celceliyay. Ku celcelintu waa lagu soo noqnoqdaa ilaa dhammaan ka weecashooyinka u dhexeeya shanta celcelintu ay ku jiraan dulqaad 3%* ah. Natiijada celceliska ayaa markaa la xisaabiyaa. Hakin 1-ilbiriqsi ah ayaa lagu daray inta u dhaxaysa ku celcelinta si looga hortago ceejinta CPU. Qashin ururiyaha Lua waa naafo ka hor rayn-rayn kasta waxaana lagu qasbay inuu ordo ka dib marka la dhammeeyo. Habka PHP waxaa lagu socodsiiyaa kaliya kordhinta looga baahan yahay bartilmaameedka, iyada oo wax soo saarka la kartiyeeyay iyo qashin ururiyaha naafo.

* Tirada kacaanka, soo noqnoqoshada iyo marinka khaladka waxa lagu bedeli karaa goobaha bartilmaameedka.

Deegaanka tijaabi

Natiijooyinka hoos lagu daabacay waxaa laga helay MacBookPro (2015), nidaamka hawlgalka - Fedora 30 (nooca kernel 5.3.8-200.fc30.x86_64). Tarantool waxa lagu maamulay Docker oo leh cabbirka"--network host".

Noocyada xirmada:

Tarantool: 2.3.0-115-g5ba5ed37e
Docker: 19.03.3, dhis a872fc2f86
PHP: 7.3.11 (cli) (lagu dhisay: Oktoobar 22 2019 08:11:04)
tarantool/macmiil: 0.6.0
rybakit/msgpack: 0.6.1
ext-tarantool: 0.3.2 (+ balastar loogu talagalay 7.3)*
ext-msgpack: 2.0.3
ext-async: 0.3.0-8c1da46
ext-swoole: 4.4.12
is barbar dhig: 1.1.3

* Nasiib darro, xiriiriyaha rasmiga ah kuma shaqeeyo noocyada PHP> 7.2. Si aan u ururiyo oo aan u socodsiiyo kordhinta PHP 7.3, waa inaan isticmaalo balastar.

Результаты

Qaab isku xidhan

Hab-maamuuska Tarantool wuxuu adeegsadaa qaab laba-geesood ah Xidhmada fariinta si taxane ah fariinta. Xidhiidhiyaha PECL, taxanayntu waxay ku qarsoon tahay maktabadda dhexdeeda mana saameyn karto habka codaynta ee koodka dhulka isticmaalaha. macquul maahaXidhiidhiyaha saafiga ah ee PHP, dhanka kale, wuxuu bixiyaa awooda lagu habayn karo habka codaynta iyadoo la kordhinayo codeeyaha caadiga ah ama adeegsiga dhaqan gelinta gaarka ah. Laba cod-bixiyeyaal ayaa laga heli karaa gudaha sanduuqa, mid ku salaysan msgpack/msgpack-php (kordhinta Rasmiga ah ee MessagePack PECL), kan kalena waa daaran yahay rybakit/msgpack (ee PHP saafi ah).

Kahor intaanan isbarbardhigin iskuxirayaasha, aan cabirno waxqabadka MessagePack encoders ee xiriiriyaha PHP oo aan isticmaalno mid muujinaya natiijooyinka ugu fiican ee imtixaanada dheeriga ah:

Dardar gelinta isku xirayaasha PHP ee Tarantool iyadoo la adeegsanayo Async, Swoole iyo Parallel
Inkasta oo nooca PHP (Pure) uu ka hooseeyo fidinta PECL ee xawaaraha, mashaariicda dhabta ah waxaan wali ku talin lahaa isticmaalka. rybakit/msgpack, sababtoo ah kordhinta MessagePack-ka rasmiga ah qaabka qeexitaanka ayaa qayb ahaan la fuliyay (tusaale ahaan, ma jirto wax taageero ah noocyada xogta gaarka ah, taas oo la'aanteed aanad isticmaali karin Decimal - nooc cusub oo xog ah oo lagu soo bandhigay Tarantool 2.3) oo leh tiro kale oo badan. dhibaatooyinka (oo ay ku jiraan arrimaha ku habboon ee PHP 7.4). Guud ahaan, mashruucu wuxuu u muuqdaa mid laga tagay.

Marka, aan ku cabbirno waxqabadka xirayaasha qaab isku mid ah:

Dardar gelinta isku xirayaasha PHP ee Tarantool iyadoo la adeegsanayo Async, Swoole iyo Parallel
Sida garaafku muujinayo, xiriiriyaha PECL (Tarantool) wuxuu muujinayaa waxqabad ka wanaagsan kan isku xiraha PHP (macmiilka). Tani maaha wax la yaab leh, iyada oo la tixgelinayo in kan dambe, marka lagu daro in lagu hirgeliyo luqad gaabis ah, asal ahaan wuxuu qabtaa shaqo badan: shay cusub ayaa la abuuray wicitaan kasta. Codsiga и Waxqabadka (marka laga hadlayo Select, sidoo kale Shuruudaha, iyo xaaladda Cusbooneysii/Cusbooneysii - Hawlgallada), hay'ado kala duwan Connection, Xirmada и Qalabka Waxay sidoo kale ku daraan dusha sare. Sida cad, dabacsanaantu waxay ku timaadaa qiimo. Si kastaba ha ahaatee, guud ahaan, turjubaanka PHP wuxuu muujinayaa waxqabad wanaagsan. In kasta oo uu jiro farqi, waa wax aan micno lahayn oo waxay u badan tahay inay xitaa ka sii yaraan doonto marka hore lagu soo dejiyo PHP 7.4, oo aan lagu xusin JIT gudaha PHP 8.

Sii socoshada. Tarantool 2.0 waxay ku daraysaa taageerada SQL. Aynu isku dayno samaynta Xulashada, Gelida, Cusboonaysiinta, iyo Tirtir hawlaha anagoo adeegsanayna borotokoolka SQL oo barbar dhig natiijooyinka noSQL (binary) u dhigma:

Dardar gelinta isku xirayaasha PHP ee Tarantool iyadoo la adeegsanayo Async, Swoole iyo Parallel
Natiijooyinka SQL maaha kuwo aad u cajaa'ib leh (xusuusnow, waxaan wali tijaabineynaa qaabka isku midka ah). Si kastaba ha ahaatee, aad ugama xanaaqi doono arrintan, maadaama taageerada SQL ay weli ku jirto horumar firfircoon (tusaale, taageerada ayaa lagu daray dhawaan). hadallo diyaarsan) iyo, marka lagu qiimeeyo liiska arrimaha, Matoorka SQL wuxuu mari doonaa dhowr hagaajin mustaqbalka.

async

Hadda, aan aragno sida kordhinta Async ay naga caawin karto hagaajinta natiijooyinka kore. Kordhinta ayaa bixisa API-ku-salaysan qorista barnaamijyada asynchronous, markaa aynu isticmaalno. Tijaabadu waxay muujisay in tirada ugu wanaagsan ee coroutines ee deegaankeenu ay tahay 25:

Dardar gelinta isku xirayaasha PHP ee Tarantool iyadoo la adeegsanayo Async, Swoole iyo Parallel
Waxaan ku faafinay 10,000 hawlgal oo dhan 25 coroutines oo arag waxa dhaca:

Dardar gelinta isku xirayaasha PHP ee Tarantool iyadoo la adeegsanayo Async, Swoole iyo Parallel
Tirada hawlgallada ilbiriqsikiiba way korodhay in ka badan 3 jeer tarantool-php/macmiil!

Nasiib darro, xiriiriyaha PECL kuma bilaaban ext-async.

Ka warran SQL?

Dardar gelinta isku xirayaasha PHP ee Tarantool iyadoo la adeegsanayo Async, Swoole iyo Parallel
Sida aad arki karto, qaabka asynchronous farqiga u dhexeeya borotokoolka binary iyo SQL wuxuu noqday dhexda qaladka.

Swoole

Aynu dib u qiyaasno tirada ugu wanaagsan ee coroutines, markan Swoole:
Dardar gelinta isku xirayaasha PHP ee Tarantool iyadoo la adeegsanayo Async, Swoole iyo Parallel
Aan ku joojino 25. Waxaan ku celin doonaa isla khiyaanadii sida kordhinta Async-anaga oo u qaybinayna 10,000 hawlgal 25 coroutines. Intaa waxaa dheer, waxaan ku dari doonaa imtixaan kale kaas oo aan u kala qaybin doono dhammaan shaqada laba hab (macnaheedu waa nidaam kastaa wuxuu fulin doonaa 5,000 hawlgal oo dhan 25 corutines). Nidaamyada waxaa la abuuri doonaa iyadoo la isticmaalayo Geedi socodka Swoole.

Natiijooyinka:

Dardar gelinta isku xirayaasha PHP ee Tarantool iyadoo la adeegsanayo Async, Swoole iyo Parallel
Swole waxay muujinaysaa natiijooyin wax yar ka hooseeya marka loo eego Async marka ay ku socoto hal nidaam, laakiin hababka 2 sawirku si aad ah ayuu isu beddelayaa (lambarka 2 lama dooran si kadis ah, mashiinkayga, hababka 2 ayaa muujiyay natiijooyinka ugu fiican).

Jid ahaan, kordhinta Async waxay sidoo kale leedahay API si ay ula shaqeyso hababka, laakiin ma aanan dareemin wax farqi ah oo u dhexeeya jaangooyooyinka hal ama dhowr habab (waxaa suurtagal ah in aan meel ku dhuftay).

SQL vs. Nidaamka Binary:

Dardar gelinta isku xirayaasha PHP ee Tarantool iyadoo la adeegsanayo Async, Swoole iyo Parallel
Si la mid ah Async, farqiga u dhexeeya hawlgallada binary iyo SQL ayaa lagu baabi'iyaa habka asynchronous.

Is barbardhig

Mar haddii kordhinta isbarbar-dhigga aysan ku saabsanayn coroutines, laakiin ku saabsan dunta, aan cabbirno tirada ugu habboon ee dunta isbarbar-dhigga ah:

Dardar gelinta isku xirayaasha PHP ee Tarantool iyadoo la adeegsanayo Async, Swoole iyo Parallel
Waa 16 mashiinkayga. Aan ku socodsiino bartilmaameedyada xiriiriyaha 16 dun oo isbarbar socda:

Dardar gelinta isku xirayaasha PHP ee Tarantool iyadoo la adeegsanayo Async, Swoole iyo Parallel
Sida aad arki karto, natiijadu xitaa way ka fiican tahay kordhinta asynchronous (lama xisaabin Swoole oo ku socda laba hab). Ogsoonow in xiriiriyaha PECL, Cusbooneysiinta iyo Kordhinta hawlgallada ay madhan yihiin. Tani waa sababta oo ah hawlgalladani waa ay fashilmeen-ma hubo in ay ahaayeen kuwo isbarbar socda, ext-tarantool, ama labadaba.

Hadda aan is barbar dhigno waxqabadka SQL:

Dardar gelinta isku xirayaasha PHP ee Tarantool iyadoo la adeegsanayo Async, Swoole iyo Parallel
Fiiro u yeelo isku ekaanshaha garaafka ee xiriiriyeyaasha si isku mid ah loo bilaabay?

Dhammaantood

Ugu dambeyntii, aan ku soo koobno ​​dhammaan natiijooyinka hal garaaf si aan u aragno sawirka guud ee ballaarinta la tijaabiyay. Waxaan ku dari doonaa kaliya hal tijaabo oo cusub garaafyada oo aynaan weli samayn: socodsiinta Async coroutines si barbar socda iyadoo la isticmaalayo Parallel*. Fikradda isku-darka kordhinta aan soo sheegnay waa horeba ayaa laga hadlay Qorayaasha, laakiin wax heshiis ah lama gaarin, waa inaan sameynaa nafteena.

* Waxa aan ku ordi kari waayay Swoole coroutines oo barbar socda; waxay u egtahay in kordhintan aan isqaban karin.

Haddaba, natiijada kama dambaysta ah:

Dardar gelinta isku xirayaasha PHP ee Tarantool iyadoo la adeegsanayo Async, Swoole iyo Parallel

Halkii gabagabo

Fikradayda, natiijadu waxay ahaayeen kuwo cajiib ah, si kastaba ha ahaatee waxaan hubaa inay jiraan wax badan oo soo socda! Haddii aad u baahan tahay inaad tan ku hirgeliso mashruuc dhab ah adiga ayay kugu xiran tahay, laakiin waxaan kaliya ku dhihi doonaa aniga, waxay ahayd tijaabo xiiso leh oo ii ogolaatay inaan qiimeeyo inta laga saari karo isku-xiraha TCP-ga isku-dhafka ah ee dadaalka ugu yar. Haddii aad hayso wax fikrado ah oo lagu hagaajinayo bartilmaameedyada, waxaan ku farxi lahaa inaan tixgeliyo codsigaaga jiidista. Koodhka buuxa, oo ay la socdaan tilmaamaha socodsiinta iyo natiijooyinka, ayaa lagu daabacay qayb gaar ah. kayd.

Source: www.habr.com

Add a comment