Muiyo PHP ecosystem pane parizvino maviri anobatanidza ekushanda neTarantool server - iyi ndiyo yepamutemo PECL yekuwedzera.
Muchikamu chino, ndinoda kugovera mhedzisiro yekuyedzwa kwekuita kwemaraibhurari ese uye kuratidza kuti, nekuchinja kushoma kune kodhi, unogona kuwana 3-5 performance kuwedzera (pamiyedzo yekugadzira!).
Tichaedzei?
Tichaedza idzo dzataurwa pamusoro apa synchronous ma-connectors anomhanya asynchronously, akafanana, uye asynchronously-parallel. π Isu hatidiwo kubata kodhi yezvibatanidza ivo pachavo. Ikozvino kune akati wandei ekuwedzera anowanikwa kuti uwane zvaunoda:
Swoole - yakakwira-inoshanda asynchronous chimiro chePHP. Inoshandiswa nemahofori eInternet akadai saAlibaba neBaidu. Kubva shanduro 4.1.0 nzira yemashiripiti yakaonekwa SwooleRuntime ::gonesaCoroutine(), iyo inokutendera iwe "kushandura synchronous PHP network maraibhurari kune asynchronous ane mutsara wekodhi."- Async yaive kusvika nguva pfupi yadarika kuwedzera kwakavimbisa kweasynchronous basa muPHP. Sei kusvika munguva pfupi yapfuura? Nehurombo, nechikonzero chandisingazive, munyori akadzima repository uye ramangwana repurojekiti harina kujeka. Ndichafanira kuishandisa
one kubva kumaforogo. Kufanana neSwoole, iyi yekuwedzera inobvumidza iwe kuti utendeuke bhurugwa rako zviri nyore nekufinyamisa kweruoko kuti ugone kugonesa asynchrony nekutsiva iyo yakajairwa kuita kweTCP neTLS hova neshanduro dzadzo dzeasynchronous. Izvi zvinoitwa kuburikidza nesarudzo "async.tcp = 1". Parallel β yekuwedzera nyowani kubva kune anozivikanwa Joe Watkins, munyori wemaraibhurari akadai phpdbg, apcu, pthreads, pcov, uopz. Iyo yekuwedzera inopa API yekuverengera akawanda muPHP uye inomisikidzwa sechinotsiva pthreads. Chinhu chakakosha chinodzikamisa raibhurari ndechekuti inongoshanda neZTS (Zend Thread Safe) vhezheni yePHP.
Tichaedza sei?
Ngatitangei chiitiko cheTarantool nekunyora-mberi kutema matanda kwakaremara (wal_mode = hapana) uye yakawedzera network buffer (kuverenga = 1 * 1024 * 1024) Sarudzo yekutanga ichabvisa basa ne diski, yechipiri ichaita kuti zvikwanise kuverenga zvimwe zvikumbiro kubva kune inoshanda sisitimu buffer uye nekudaro kuderedza nhamba yekufona system.
Kune mabhenji anoshanda nedata (kupinza, kudzima, kuverenga, nezvimwewo), usati watanga bhenji, memtx nzvimbo ichave (patsva) yakagadzirwa, umo iyo yekutanga index kukosha inogadzirwa nejenareta yeakarongedzerwa manhamba. (kutevedzana).
Nzvimbo DDL inoita seizvi:
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}})
Kana zvichidikanwa, usati wamhanyisa bhenji, nzvimbo yacho inozadzwa negumi remazana matuples efomu.
{id, "tuplΠ΅_<id>"}
Matuples anowanikwa uchishandisa zvisina kujairika kiyi kukosha.
Iyo benchmark pachayo chikumbiro chimwe chete kune sevha, iyo inoitwa 10,000 nguva (marevolutions), ayo, zvakare, anoitwa mukudzokororwa. Iko kudzokororwa kunodzokororwa kusvika nguva yese kutsauka pakati pe5 iterations iri mukati mekukanganisa kunogamuchirwa kwe3%*. Mushure meizvi, mugumisiro wepakati unotorwa. Pane 1 sekondi kumbomira pakati iterations kudzivirira processor kubva throttling. Muunganidzi wemarara weLua akaremara kusati kwaitwa imwe neimwe uye anomanikidzwa kutanga kana apedza. Iyo PHP maitiro anotangwa chete neakawedzerwa anodiwa kune iyo bhenji, ine inobuda buffering inogoneswa uye muunganidzi wemarara akaremara.
* Huwandu hwekuchinja, kudzokororwa uye kukanganisa kwechikumbaridzo kunogona kuchinjwa mumabhenji magadzirirwo.
Test environment
Migumisiro yakabudiswa pazasi yakaitwa paMacBookPro (2015), operating system - Fedora 30 (kernel version 5.3.8-200.fc30.x86_64). Tarantool yakatangwa mudocker ine parameter "--network host"
.
Package versions:
Tarantool: 2.3.0-115-g5ba5ed37e
Docker: 19.03.3, kuvaka a872fc2f86
PHP: 7.3.11 (cli) (yakavakwa: Gumiguru 22 2019 08:11:04)
tarantool/mutengi: 0.6.0
rybakit/msgpack: 0.6.1
ext-tarantool: 0.3.2 (+ chigamba che7.3)*
ext-msgpack: 2.0.3
ext-async: 0.3.0-8c1da46
ext-swoole: 4.4.12
ext-parallel: 1.1.3
* Nehurombo, iyo yepamutemo yekubatanidza haishande neiyo PHP vhezheni> 7.2. Kuunganidza uye kumhanyisa kuwedzera paPHP 7.3, ndaifanira kushandisa
Mhinduro
Synchronous mode
Iyo Tarantool protocol inoshandisa iyo binary fomati
Tisati tafananidza majoini, isu tichayera mashandiro eMessagePack encoder yeiyo PHP yekubatanidza uye mune imwe bvunzo tichashandisa iyo inoratidza yakanakisa mhedzisiro:
Kunyangwe iyo PHP vhezheni (Yakachena) yakaderera kune yePECL yekuwedzera mukumhanya, mumapurojekiti chaiwo ndingadai ndichiri kukurudzira kuishandisa.
Saka, ngatiyere mashandiro ezvibatanidza mune synchronous mode:
Sezvinoonekwa kubva pagirafu, iyo PECL yekubatanidza (Tarantool) inoratidza kuita kuri nani kana ichienzaniswa neiyo PHP yekubatanidza (Client). Asi izvi hazvishamise, zvichipihwa kuti iyo yekupedzisira, kunze kwekushandiswa mumutauro unononoka, inoita basa rakawanda: chinhu chitsva chinogadzirwa nekufona kwega kwega. chikumbiro ΠΈ Response (munyaya yeSarudzo - zvakare Zvikonzero, uye munyaya ye Update/Upsert β Operations), masangano akasiyana Connection, packers ΠΈ Handler vanowedzerawo pamusoro. Zviripachena, kuchinjika kunouya pamutengo. Nekudaro, kazhinji, muturikiri wePHP anoratidza kuita kwakanaka, kunyangwe paine musiyano, hauna kukosha uye, pamwe, uchave wakaderera kana uchishandisa preloading muPHP 7.4, tisingatauri JIT muPHP 8.
Ngatienderere mberi. Tarantool 2.0 yakawedzera rutsigiro rweSQL. Ngatiedzei kuita Sarudza, Isa, Gadziridza uye Delete mashandiro uchishandisa SQL protocol uye enzanisa zvawanikwa ne noSQL (binary) yakaenzana:
Mhedzisiro yeSQL hainakidze (rega ndikuyeuchidze kuti tichiri kuyedza synchronous mode). Nekudaro, ini handingatsamwire pamusoro peizvi nguva isati yasvika; Tsigiro yeSQL ichiri pasi pekusimudzira (nguva pfupi yapfuura, semuenzaniso, rutsigiro rwakawedzerwa.
async
Zvakanaka, ikozvino ngationei kuti kuwedzera kweAsync kunogona kutibatsira sei kuvandudza zvabuda pamusoro. Kunyora zvirongwa zveasynchronous, kuwedzera kunopa API yakavakirwa pamakoroni, yatichashandisa. Isu tinoona empirically kuti iyo yakakwana nhamba ye coroutines yezvakatipoteredza ndeye 25:
"Paridza" 10,000 mashandiro mumakumi maviri neshanu coroutines uye ona zvinoitika:
Nhamba yekushanda pasekondi yakawedzera nekanopfuura ka3 kune
Zvinosuruvarisa, iyo PECL yekubatanidza haina kutanga ne ext-async.
Zvakadini neSQL?
Sezvauri kuona, mune asynchronous modhi mutsauko pakati peiyo binary protocol uye SQL wakava mukati memucheto wekukanganisa.
Swoole
Zvekare tinowana huwandu hwakakwana hwema coroutines, panguva ino yeSwoole:
Ngatimirei pamakumi maviri neshanu. Ngatidzokorore hunyengeri hwakafanana nekuwedzera kweAsync - govera 25 mashandiro pakati pemakumi maviri neshanu coroutines. Uye zvakare, isu tichawedzera imwe bvunzo umo isu tichagovanisa basa rese kuita maviri maitiro maviri (kureva kuti, yega yega ichaita 10,000 mashandiro mu25 coroutines). Maitiro achagadzirwa uchishandisa SwooleProcess.
Mhinduro:
Swole inoratidza mhedzisiro yakaderera zvishoma kana ichienzaniswa neAsync kana ichiitwa mune imwechete maitiro, asi ne2 maitiro mufananidzo unochinja zvakanyanya (nhamba 2 haina kusarudzwa nemukana; pamushini wangu, yaive 2 maitiro airatidza mhedzisiro yakanaka).
Nenzira, iyo Async yekuwedzera ine zvakare API yekushanda nematanho, asi ipapo ini handina kuona chero mutsauko kubva pakumhanyisa mabhenji mune imwe kana akawanda maitiro (zvinogoneka kuti ndakakanganisa kumwe kunhu).
SQL vs binary protocol:
Sezvakaita Async, mutsauko uripo pakati pebhinari uye SQL mashandiro anobviswa mune asynchronous mode.
Parallel
Sezvo iyo Parallel yekuwedzera isiri ye coroutines, asi nezve shinda, ngatiyera iyo yakakwana nhamba yetambo dzakafanana:
Yakaenzana ne16 pamushini wangu. Ngatimhanyei mabhenji mabhenji pane gumi nematanhatu tambo dzakafanana:
Sezvauri kuona, mhedzisiro yacho yakatonaka kupfuura neasynchronous extensions (kwete kuverenga Swoole inomhanya pane maviri maitiro). Ziva kuti yePECL yekubatanidza, iyo Yekuvandudza uye Upsert mashandiro haana chinhu. Izvi zvinokonzerwa nekuti mabasa aya akatadza nekukanganisa - handizive kana yaive mhosva ye ext-parallel, ext-tarantool, kana zvese.
Zvino ngatienzanise SQL performance:
Waona kufanana negirafu yezvibatanidza zvinomhanya zvakangofanana?
Pamwe chete
Uye pakupedzisira, ngatipfupikisai mibairo yese mune imwe girafu kuti tione iyo yakazara mufananidzo weiyo yakaedzwa yekuwedzera. Ngatiwedzerei muyedzo mutsva muchati, izvo zvatisati taita - ngatimhanyei Async coroutines nenzira yakafanana tichishandisa Parallel*. Pfungwa yekubatanidza iyo iri pamusoro ekuwedzera yatove
* Izvo zvaisaita kuvhura Swoole coroutines neParallel; zvinoita sekunge aya ekuwedzera haaenderane.
Saka, mhedzisiro yekupedzisira:
Pane mhedziso
Mukuona kwangu, mhedzisiro yakave yakanyatsokodzera, uye nekuda kwechimwe chikonzero ndine chokwadi chekuti uyu hausi iwo muganho! Kunyangwe iwe uchifanira kusarudza izvi muprojekiti chaiyo iwe pachako, ini ndinongotaura kuti kwandiri chaive chiyedzo chinonakidza chinokutendera kuti uongorore kuti yakawanda sei yaunogona "kusvina" kunze kweiyo synchronous TCP yekubatanidza nekuita kushoma. Kana iwe uine mazano ekuvandudza mabhenji, ini ndichafara kufunga nezvechikumbiro chako chekudhonza. Yese kodhi ine yekutanga mirairo uye mhedzisiro inoburitswa mune yakaparadzana
Source: www.habr.com