ProHoster > ΠΠ»ΠΎΠ³ > Maamulka > 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 waxaa hadda jira laba xiriiriye oo la shaqeeya serverka Tarantool - kani waa 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, isbeddellada ugu yar ee koodhka, waxaad ku gaari kartaa 3-5 kor u kaca waxqabadka (imtixaannada synthetic!).
Maxaan tijaabin doonaa?
Waxaan tijaabin doonaa kuwa kor ku xusan isku mid ah Xidhiidhiyayaasha u socda is-barbar yaac, is barbar socda, iyo isbarbar-dhig. π Sidoo kale ma rabno inaan taabano koodhka isku xirka laftooda. Hadda waxaa jira dhowr kordhin oo la heli karo si loo gaaro waxaad rabto:
Swoole - qaab-dhismeedka asynchronous ee waxqabadka sare leh ee PHP. Waxaa isticmaala shirkadaha waaweyn ee internetka sida Alibaba iyo Baidu. Laga soo bilaabo nooca 4.1.0 waxaa soo muuqday hab sixir SwooleRuntime :: awoodCoroutine(), kaas oo kuu ogolaanaya inaad u beddesho maktabadaha isku-xidhka PHP ee isku midka ah una beddelo kuwa aan la mid ahayn oo leh hal xariiq oo kood ah.
Async wuxuu ahaa ilaa dhowaan kordhin rajo leh oo loogu talagalay shaqada asynchronous ee PHP. Waa maxay sababta ilaa dhawaan? Nasiib darro, sabab aan la garaneyn awgeed, qoraagu wuxuu tirtiray kaydkii, ma cadda mustaqbalka mashruuca. Waa inaan isticmaalo hal laga bilaabo fargeeto. Sida Swoole oo kale, kordhintan ayaa kuu ogolaanaysa inaad si fudud surwaalkaaga ugu shido gacanta gacan-ku-jiidka si aad awood ugu siiso asynchrony adigoo ku beddelaya hirgelinta caadiga ah ee TCP iyo durdurrada TLS noocyadooda asynchronous. Tan waxaa lagu sameeyaa ikhtiyaarka "async.tcp = 1Β«.
Is barbardhig - kordhin cusub oo cadaalad ah oo ka timid Joe Watkins oo caan ah, qoraa maktabadaha sida phpdbg, apcu, pthreads, pcov, 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 tusaalaha Tarantool oo leh qori-hor-u-qoris oo naafo ah (wal_mode = midnaiyo kororka shabakada wax kaydisa (akhrinta = 1 * 1024 * 1024). Doorashada ugu horeysa waxay baabi'in doontaa shaqada diskka, tan labaad waxay suurtogal ka dhigi doontaa in la akhriyo codsiyo badan oo ka yimaada nidaamka qalliinka oo hoos u dhigaya tirada wicitaanada nidaamka.
Astaamaha ku shaqeeya xogta (gelinta, tirtirka, akhrinta, iwm.), ka hor inta aan la bilaabin bartilmaameedka, meel bannaan oo memtx ah ayaa (dib loo abuuri doonaa), kaas oo qiyamka index-ka aasaasiga ah uu abuuray koronto-dhaliye ah qiimaha isugeynta la dalbaday (isku xigxiga).
Meesha DDL waxay u egtahay 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>"}
Tuples waxaa lagu galaa iyadoo la isticmaalayo qiime aan toos ahayn.
Halbeegga laftiisu waa hal codsi oo server-ka ah, kaas oo la fuliyo 10,000 jeer (kacaanno), kuwaas oo, markeeda, la fuliyo si isdaba joog ah. Ku celcelinta waa lagu soo noqnoqdaa ilaa inta u dhaxaysa 5 ku celcelinta ay ku jiraan khalad la aqbali karo oo ah 3%*. Taas ka dib, celceliska natiijada ayaa la qaadaa. Waxaa jira 1 ilbiriqsi oo hakad ah inta u dhaxaysa ku celcelinta si looga ilaaliyo processor-ku inuu xoqo. Qashin ururiyaha Lua waa naafo ka hor inta aan la soo celin waxaana lagu qasbay inuu bilaabo marka uu dhammeeyo. Habka PHP waxaa lagu bilaabay kaliya kordhinta lagama maarmaanka u ah bartilmaameedka, iyada oo wax soo saarka la kartiyeeyay iyo qashinka aruuriyaha naafo.
* Tirada kacaanka, soo noqnoqoshada iyo marinka khaladka waxa lagu bedeli karaa goobaha bartilmaameedka.
Deegaanka tijaabi
Natiijooyinka hoos lagu daabacay waxaa lagu sameeyay MacBookPro (2015), nidaamka hawlgalka - Fedora 30 (nooca kernel 5.3.8-200.fc30.x86_64). Tarantool waxaa lagu soo bandhigay goob-xirfadeedka "--network host".
Inkasta oo nooca PHP (Pure) uu ka hooseeyo xawaaraha PECL, mashaariicda dhabta ah waxaan weli ku talin lahaa isticmaalka rybakit/msgpack, sababtoo ah kordhinta MessagePack-ka rasmiga ah qaabka qeexitaanka qayb ahaan ayaa lafuliyaa (tusaale ahaan, ma jirto wax taageero ah noocyada xogta gaarka ah, taas oo la'aanteed ma awoodid inaad isticmaasho Decimal - nooc cusub oo xog ah oo lagu soo bandhigay Tarantool 2.3) oo leh a tirada kale dhibaatooyinka (oo ay ku jiraan arrimaha ku habboon ee PHP 7.4). Waa hagaag, guud ahaan, mashruucu wuxuu u muuqdaa mid laga tagay.
Marka, aan ku cabbirno waxqabadka xirayaasha qaab isku mid ah:
Sida ka muuqata garaafka, isku xirka PECL (Tarantool) wuxuu muujinayaa waxqabad wanaagsan marka la barbar dhigo xiriiriyaha PHP (Client). Laakiin tani maaha wax la yaab leh, marka la eego in kan dambe, marka lagu daro in lagu hirgeliyo luqad gaabis ah, dhab ahaantii wuxuu qabtaa shaqo badan: shay cusub ayaa la abuuray wicitaan kasta. Codsiga ΠΈ Waxqabadka (haddii ay dhacdo Xulo - sidoo kale Shuruudaha, iyo xaaladda Cusbooneysii/Cusbooneysii - Hawlgallada), hay'ado kala duwan Connection, Xirmada ΠΈ Qalabka waxay sidoo kale ku daraan korka. Sida cad, dabacsanaantu waxay ku timaadaa qiimo. Si kastaba ha noqotee, guud ahaan, turjubaanka PHP wuxuu muujinayaa waxqabad wanaagsan, inkastoo uu jiro farqi, waa wax aan micno lahayn, laga yaabee, xitaa way yaraan doontaa marka la isticmaalayo horudhaca PHP 7.4, ma aha in lagu xuso JIT gudaha PHP 8.
Aan hore u socono. Tarantool 2.0 waxay ku dartay taageerada SQL. Aynu isku dayno inaan samayno Xulo, Geli, Cusbooneysiin iyo Tirtir hawlgallada annagoo adeegsanayna borotokoolka SQL oo barbar dhig natiijooyinka noSQL (binary) u dhigma:
Natiijooyinka SQL maaha kuwo aad u cajiib ah (aan ku xasuusiyo inaan wali tijaabineyno qaabka isku midka ah). Si kastaba ha ahaatee, anigu kama xanaaqi doono arrintan wakhti ka hor; Taageerada SQL waxay weli ku jirtaa horumar firfircoon (dhawaan dhow, tusaale ahaan, taageerada ayaa lagu daray hadallo diyaarsan) iyo, marka lagu qiimeeyo liiska arrimaha, Matoorka SQL wuxuu mari doonaa dhowr hagaajin mustaqbalka.
async
Hagaag, hadda aan aragno sida kordhinta Async ay naga caawin karto hagaajinta natiijooyinka kore. Si loo qoro barnaamijyada asynchronous, kordhintu waxay bixisaa API ku salaysan coroutines, kaas oo aan isticmaali doono. Waxaan ogaanay si macquul ah in tirada ugu fiican ee coroutines ee deegaankeena ay tahay 25:
Mar labaad waxaan ogaanay tirada ugu wanaagsan ee coroutines, markan Swoole:
Aan ku joojino 25. Aynu ku celino isla khiyaanada sida kordhinta Async - u qaybi 10,000 hawlgal inta u dhaxaysa 25 coroutines. Intaa waxaa dheer, waxaan ku dari doonaa imtixaan kale kaas oo aan u qaybin doono dhammaan shaqada 2 laba hab (taas oo ah, habka kasta wuxuu fulin doonaa 5,000 hawlgal 25 coroutines). Nidaamyada waxaa la abuuri doonaa iyadoo la isticmaalayo Geedi socodka Swoole.
Natiijooyinka:
Swole waxay muujinaysaa natiijo wax yar ka hooseeya marka la barbar dhigo Async marka la wado hal geeddi-socod, laakiin hababka 2 sawirku si aad ah ayuu u bedelayaa (lambarka 2 lama dooran si kadis ah, mashiinkayga, waxay ahayd 2 hababka oo muujiyay natiijada ugu fiican).
Jid ahaan, kordhinta Async waxay sidoo kale leedahay API si ay ula shaqeyso hababka, laakiin halkaas ma aanan dareemin wax farqi ah oo ka yimid jaangooyooyinka hal ama in ka badan (waxaa suurtagal ah in aan meel ku khalkhaliyay).
SQL vs binary borotokool:
Sida 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:
Waxay la mid tahay 16 mashiinkayga. Aan ku socodsiino bartilmaameedyada xiriiriyaha 16 dun oo isbarbar socda:
Sida aad arki karto, natiijadu xitaa way ka fiican tahay kordhinta asynchronous (lama xisaabin Swoole ku shaqeeya 2 hannaan). Ogsoonow in xiriiriyaha PECL, Cusbooneysiinta iyo Kordhinta hawlgallada ay madhan yihiin. Tani waxay sabab u tahay xaqiiqda ah in hawlgalladani ay ku fashilmeen khalad - ma garanayo inay khaladka lahayd ext-parallel, ext-tarantool, ama labadaba.
Hadda aan is barbar dhigno waxqabadka SQL:
Fiiro u yeelo isku ekaanshaha garaafka ee xiriiriyeyaasha si isku mid ah u shaqeynaya?
Wadajir
Ugu dambeyntiina, aan ku soo koobno ββdhammaan natiijooyinka hal garaaf si aan u aragno sawirka guud ee ballaarinta la tijaabiyay. Aan ku darno hal tijaabo oo cusub jaantuska, kaas oo aynaan wali samayn - aynu si barbar socda u wadno Async coroutines anagoo adeegsanayna Parallel*. Fikradda isku-darka kordhinta kor ku xusan waa horeba ayaa laga hadlay Qorayaasha, laakiin wax heshiis ah lama gaarin, waa inaad adigu sameysaa.
* Suurtogal ma ahayn in la bilaabo Swoole coroutines oo leh Parallel; waxay u muuqataa in kordhintan aan la socon karin.
Haddaba, natiijada kama dambaysta ah:
Halkii gabagabo
Fikradayda, natiijadu waxay u soo baxday inay noqoto mid u qalantaa, iyo sabab qaar ka mid ah waxaan hubaa in tani aysan ahayn xadka! Haddii aad u baahan tahay inaad tan ku go'aansato mashruuc dhab ah oo keliya naftaada, waxaan kaliya dhihi doonaa aniga waxay ii ahayd tijaabo xiiso leh oo kuu oggolaaneysa inaad qiimeyso inta aad ka "dhuujin karto" isku-xiraha TCP-ga isku-dhafka ah ee dadaalka ugu yar. Haddii aad hayso fikrado lagu hagaajinayo bartilmaameedyada, waan ku farxi doonaa inaan tixgeliyo codsigaaga jiidista. Dhammaan koodka leh tilmaamaha bilaabista iyo natiijooyinka waxaa lagu daabacay si gaar ah kayd.