ProHoster > Блог > Whakahaerenga > Te whakatere i nga hononga PHP mo Tarantool ma te whakamahi i te Async, Swoole me te Parallel
Te whakatere i nga hononga PHP mo Tarantool ma te whakamahi i te Async, Swoole me te Parallel
I roto i te rauwiringa kaiao PHP e rua nga hononga mo te mahi me te tūmau Tarantool - koinei te toronga PECL mana tarantool/tarantool-php, tuhia ki te C, me tarantool-php/kiritaki, tuhia ki te PHP. Ko ahau te kaituhi o muri.
I roto i tenei tuhinga, ka hiahia ahau ki te whakapuaki i nga hua o te whakamatautau mahi o nga whare pukapuka e rua me te whakaatu me pehea, me te iti o nga huringa ki te waehere, ka taea e koe te whakatutuki i te pikinga mahi 3-5 (i runga i nga whakamatautau waihanga!).
He aha ta tatou e whakamatautau?
Ka whakamatauhia e matou nga mea kua whakahuahia i runga ake nei tukutahi Ko nga hononga hono e rere ana, he whakarara, he whakarara-a-a-whakarara. 🙂 Kaore hoki matou e pai ki te pa atu ki te waehere o nga hononga hono. I tenei wa he maha nga taapiri e waatea ana hei whakatutuki i taau e hiahia ana:
Swole ― he anga tukutahi mahi teitei mo PHP. I whakamahia e nga tangata nunui o te Ipurangi penei i a Alibaba me Baidu. Mai i te putanga 4.1.0 kua puta he tikanga makutu SwooleRuntime::whakahoheaCoroutine(), ka taea e koe te "whakahuri i nga whare pukapuka whatunga PHP tukutahi ki nga mea tukutahi me te rarangi waehere kotahi."
Ko Async i mua tata nei he toronga tino pai mo te mahi tukutahi i roto i te PHP. He aha i mua tata nei? Ko te mea pouri, na te mea kaore au i mohio, i whakakorehia e te kaituhi te putunga putunga, a, kaore i te maarama te mutunga o te kaupapa. Me whakamahi e au kotahi mai marau. Pērā i a Swoole, ma tenei toronga ka taea e koe te huri ngawari i to tarau ma te piu o te ringaringa kia taea ai te tukutahi ma te whakakapi i te whakatinanatanga paerewa o nga awa TCP me TLS me o raatau putanga tukutahi. Ka mahia tenei ma te whiringa "async.tcp = 1".
Pararairara ― he toronga hou mai i a Joe Watkins rongonui, kaituhi o nga whare pukapuka penei i te phpdbg, apcu, pthreads, pcov, uopz. Ko te toronga e whakarato ana i te API mo te miro maha i roto i te PHP me te tuunga hei whakakapi mo nga pthreads. Ko te herenga nui o te whare pukapuka ko te mahi anake me te putanga ZTS (Zend Thread Safe) o PHP.
Me pehea tatou e whakamatautau ai?
Ka whakarewahia he tauira Tarantool kua monokia te tuhi-a mua (wal_mode = kahore) me te whakanui ake i te parapara whatunga (panui mua = 1 * 1024 * 1024). Ko te waahanga tuatahi ka whakakore i te mahi me te kōpae, ko te tuarua ka taea te panui atu i nga tono mai i te punaha whakahaere, na reira ka whakaitihia te maha o nga waea waea.
Mo nga tohu tohu e mahi ana me nga raraunga (whakauru, mukua, panui, me etahi atu), i mua i te tiimata i te tohu tohu, ka hangaia he mokowā memtx, ka hangaia nga uara taurangi tuatahi e te kaihanga o nga uara integer kua whakaritea (raupapa).
He penei te ahua o te mokowā DDL:
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}})
Mena e tika ana, i mua i te whakahaere i te tohu tohu, ka whakakiia te waahi ki te 10,000 tuple o te puka.
{id, "tuplе_<id>"}
Ka uru atu ki nga Tuple ma te whakamahi i te uara matua tupurangi.
Ko te tohu tohu he tono kotahi ki te tūmau, ka mahia 10,000 nga wa (huringa), ka mahia i roto i nga huringa. Ka tukuruatia nga whitiwhitinga tae noa ki nga wa katoa he rereke i waenga i nga whitiwhitinga e 5 kei roto i te hapa 3%*. I muri i tenei, ka tangohia te hua toharite. He 1 tuarua te okioki i waenga i nga whitiwhitinga kia kore ai te kaitahuri e tarai. Kua monoa te kaikohi paru a Lua i mua i ia whitiwhitinga, ka akiakihia kia timata i muri i te otinga. Ka whakarewahia te tukanga PHP me nga toronga e tika ana mo te tohu tohu, me te whakahoe i te aukati whakaputa me te kaikohi paru kua monoa.
* Ka taea te huri te maha o nga hurihanga, nga taapiri me te paepae hapa i roto i nga tautuhinga tohu tohu.
Te taiao whakamatautau
Ko nga hua i whakaputaina i raro nei i mahia i runga i te MacBookPro (2015), te punaha whakahaere - Fedora 30 (putanga kernel 5.3.8-200.fc30.x86_64). I whakarewahia a Tarantool i roto i te docker me te tawhā "--network host".
* Kia aroha mai, karekau te hononga hono e mahi me te putanga PHP > 7.2. Hei whakahiato me te whakahaere i te toronga ki te PHP 7.3, me whakamahi e au papaki.
Результаты
Aratau tukutahi
Ka whakamahia e te kawa Tarantool he whakatakotoranga rua Pouaka Karere ki te whakaraupapa i nga karere. I roto i te hononga PECL, ka hunahia te raupapatanga ki te hohonutanga o te whare pukapuka ka pa ki te mahi whakawaehere mai i te waehere whenua kaiwhakamahi. e kore e taea. Ko te hononga PHP parakore, engari, ka whakarato i te kaha ki te whakarite i te tukanga whakawaehere ma te whakawhānui i te encoder paerewa, ma te whakamahi ranei i taau ake whakatinanatanga. E rua nga encoder e waatea ana mai i te pouaka, kei runga tetahi msgpack/msgpack-php (toronga MessagePack PECL whaimana), kei runga tera ribakit/msgpack (i roto i te PHP parakore).
I mua i te whakatairite i nga hononga, ka inehia e matou te mahi o nga kaiwhakawaehere MessagePack mo te hononga PHP me etahi atu whakamatautau ka whakamahia e matou te mea e whakaatu ana i te hua pai:
Ahakoa he iti ake te putanga PHP (Pure) ki te toronga PECL i roto i te tere, i roto i nga kaupapa tuuturu ka tūtohu tonu ahau ki te whakamahi. ribakit/msgpack, no te mea i roto i te toronga MessagePack whaimana he waahanga noa te whakatakotoranga whakatakotoranga (hei tauira, kaore he tautoko mo nga momo raraunga ritenga, me te kore e taea e koe te whakamahi i te Ira - he momo raraunga hou i whakauruhia ki Tarantool 2.3) me te whai te maha o etahi atu Tuhinga o mua (tae atu ki nga take hototahi ki te PHP 7.4). Ana, i te nuinga o te waa, he ahua whakarerea te kaupapa.
Na, me ine te mahi o nga hononga ki te aratau tukutahi:
Ka kitea mai i te kauwhata, ko te hononga PECL (Tarantool) e whakaatu ana i nga mahi pai ake i whakaritea ki te hononga PHP (Kaihoko). Engari ehara tenei i te mea miharo, i te mea ko te mea whakamutunga, i tua atu i te whakatinanatanga i roto i te reo puhoi, ka nui ake nga mahi: ka hangaia he ahanoa hou me ia waea. tono и urupare (i roto i te take o Tīpakohia - hoki paearu, me te take o Whakahou/Whakahou ― Operations), nga hinonga motuhake hononga, Pūpūraka и Kairaweke ka taapiri atu ano ki runga. Maamaa, ka tae mai te ngawari ki te utu. Heoi, i te nuinga o te waa, he pai te mahi a te kaiwhakamaori PHP, ahakoa he rereke, he iti noa iho, a, ka iti ake pea ka whakamahi i te uta i mua i te PHP 7.4, kaua e whakahua i te JIT i te PHP 8.
Kia haere tonu tatou. I whakauruhia e Tarantool 2.0 te tautoko SQL. Me ngana ki te mahi i nga mahi Whiriwhiri, Whakauru, Whakahou me te Mukua ma te whakamahi i te kawa SQL me te whakataurite i nga hua ki te noSQL (rua) rite:
Ko nga hua SQL kaore i te tino miharo (me whakamahara ahau kei te whakamatautau tonu matou i te aratau tukutahi). Heoi, e kore ahau e pouri mo tenei i mua i te wa; Kei te kaha tonu te whakawhanaketanga o te tautoko SQL (no tata nei, hei tauira, kua taapirihia te tautoko. nga korero kua whakaritea) me te whakatau i te rarangi take, ka tukuna e te miihini SQL te maha o nga arotautanga a muri ake nei.
tukutahi
Inaianei kia kite tatou me pehea e taea ai e te toronga Async te whakapai ake i nga hua o runga. Hei tuhi i nga kaupapa tukutahi, ka tukuna e te toronga he API i runga i nga coroutines, ka whakamahia e matou. Ka kitea e matou ko te maha tino pai o nga coroutine mo to taiao ko te 25:
"Horapa" 10,000 mahi puta noa i te 25 coroutine ka kite ka ahatia:
Ko te mea pouri, kaore te hononga PECL i tiimata me te ext-async.
He aha mo SQL?
Ka taea e koe te kite, i roto i te aratau tukutahinga ko te rereketanga i waenga i te kawa rua me te SQL i roto i te taha o te hapa.
Swole
Ka kitea ano e matou te maha tino pai o nga coroutine, i tenei wa mo Swoole:
Kati tatou i te 25. Me whakahoki ano i te mahi pera me te toronga Async - tohatoha 10,000 nga mahi i waenga i nga coroutine 25. I tua atu, ka taapirihia e matou tetahi atu whakamatautau ka wehewehea e matou nga mahi katoa kia 2 nga tukanga e rua (ara, ka mahia e ia mahinga nga mahi 5,000 i roto i te 25 coroutines). Ka hangaia nga tukanga ma te whakamahi TukatukaSwoole.
Hua:
He iti ake te hua ka whakaatuhia e Swole ki te Async i te wa e whakahaerehia ana i roto i te tukanga kotahi, engari me nga tukanga e 2 ka tino rereke te pikitia (kaore i kowhiria te nama 2 i tupono noa; i runga i taku miihini, e 2 nga tukanga i whakaatu te hua pai).
Ma te ara, he API ano te toronga Async mo te mahi me nga mahi, engari i reira kaore au i kite i tetahi rereketanga mai i te whakahaere i nga tohu tohu i roto i te kotahi, neke atu ranei nga tukanga (kei te raru ahau i tetahi waahi).
SQL me te kawa rua:
Ka rite ki a Async, ka whakakorehia te rereketanga i waenga i nga mahi rua me te SQL i roto i te aratau tukutahi.
Pararairara
I te mea ko te toronga Whakarara ehara mo nga coroutine, engari mo nga miro, me ine i te tau tino pai o nga miro whakarara:
He rite ki te 16 i runga i taku miihini. Me whakahaere tohu tohu hono ki runga i nga miro whakarara 16:
Ka taea e koe te kite, he pai ake te hua mai i nga toronga tukutahi (kaore i te tatau Swoole e rere ana i runga i nga tikanga e 2). Kia mahara mo te hononga PECL, he putua nga mahi Whakahou me te Upsert. Na te mea i rahua enei mahi me te hapa - kaore au i te mohio na te ext-parallel, ext-tarantool, e rua ranei.
Inaianei ka whakatauritea te mahinga SQL:
Tirohia te rite ki te kauwhata mo nga hononga e rere ana i te wa kotahi?
Tahi
Ka mutu, me whakarāpopotohia nga hua katoa ki te kauwhata kotahi kia kite i te pikitia whanui mo nga toronga kua whakamatauria. Me taapiri tetahi whakamatautau hou ki te tūtohi, kaore ano kia mahia - me whakahaere whakarara nga coroutine Async ma te whakamahi i te Parallel*. Ko te whakaaro ki te whakauru i nga taapiri o runga ake nei kua oti i korerohia nga kaituhi, engari karekau he whakaaro i tutuki, ma koe ano e mahi.
* Kaore i taea te whakarewa i nga coroutine Swoole me te Parallel; te ahua nei he hotokore enei toronga.
Na, ko nga hua whakamutunga:
Engari o te mutunga
Ki taku whakaaro, ko nga hua i puta he tino tika, a mo etahi take ka tino mohio ahau ehara tenei i te rohe! Ahakoa e hiahia ana koe ki te whakatau i tenei kaupapa mo koe anake, ka kii noa ahau he whakamatautau pai tenei e taea ai e koe te arotake i te nui o te "kopeke" mai i te hononga TCP tukutahi me te iti o te kaha. Mena kei a koe nga whakaaro mo te whakapai ake i nga tohu tohu, ka koa ahau ki te whakaaro ki to tono toia. Ko nga waehere katoa me nga tohutohu whakarewatanga me nga hua ka whakaputaina i roto i te waahanga motuhake whare putunga.