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".

Putanga mokete:

Tarantool: 2.3.0-115-g5ba5ed37e
Docker: 19.03.3, hanga a872fc2f86
PHP: 7.3.11 (cli) (hanga: Oketopa 22 2019 08:11:04)
tarantool/kiritaki: 0.6.0
ribakit/msgpack: 0.6.1
ext-tarantool: 0.3.2 (+ papaki mo 7.3)*
ext-msgpack: 2.0.3
ext-async: 0.3.0-8c1da46
ext-swoole: 4.4.12
whakarara o waho: 1.1.3

* 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:

Te whakatere i nga hononga PHP mo Tarantool ma te whakamahi i te Async, Swoole me te Parallel
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:

Te whakatere i nga hononga PHP mo Tarantool ma te whakamahi i te Async, Swoole me te Parallel
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:

Te whakatere i nga hononga PHP mo Tarantool ma te whakamahi i te Async, Swoole me te Parallel
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:

Te whakatere i nga hononga PHP mo Tarantool ma te whakamahi i te Async, Swoole me te Parallel
"Horapa" 10,000 mahi puta noa i te 25 coroutine ka kite ka ahatia:

Te whakatere i nga hononga PHP mo Tarantool ma te whakamahi i te Async, Swoole me te Parallel
Ko te maha o nga mahi mo ia hekona neke atu i te 3 nga wa mo tarantool-php/kiritaki!

Ko te mea pouri, kaore te hononga PECL i tiimata me te ext-async.

He aha mo SQL?

Te whakatere i nga hononga PHP mo Tarantool ma te whakamahi i te Async, Swoole me te Parallel
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:
Te whakatere i nga hononga PHP mo Tarantool ma te whakamahi i te Async, Swoole me te Parallel
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:

Te whakatere i nga hononga PHP mo Tarantool ma te whakamahi i te Async, Swoole me te Parallel
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:

Te whakatere i nga hononga PHP mo Tarantool ma te whakamahi i te Async, Swoole me te Parallel
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:

Te whakatere i nga hononga PHP mo Tarantool ma te whakamahi i te Async, Swoole me te Parallel
He rite ki te 16 i runga i taku miihini. Me whakahaere tohu tohu hono ki runga i nga miro whakarara 16:

Te whakatere i nga hononga PHP mo Tarantool ma te whakamahi i te Async, Swoole me te Parallel
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:

Te whakatere i nga hononga PHP mo Tarantool ma te whakamahi i te Async, Swoole me te Parallel
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:

Te whakatere i nga hononga PHP mo Tarantool ma te whakamahi i te Async, Swoole me te Parallel

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.

Source: will.com

Tāpiri i te kōrero