RoadRunner: Kaore te PHP i hangaia kia mate, ko Golang ranei hei whakaora

RoadRunner: Kaore te PHP i hangaia kia mate, ko Golang ranei hei whakaora

Hei Habr! Kei te kaha matou ki Badoo mahi i runga i te mahi PHP, i te mea he tino nui to tatou punaha i roto i tenei reo me te take mahi he take penapena moni. Neke atu i te tekau tau ki muri, i hangaia e matou te PHP-FPM mo tenei, i te tuatahi ko te huinga o nga papanga mo PHP, a muri iho ka uru ki te tohatoha mana.

I nga tau tata nei, he nui te ahunga whakamua a PHP: kua pai ake te kaikohi paru, kua piki te taumata o te pumau - i tenei ra ka taea e koe te tuhi i nga daemons me nga tuhinga roa i roto i te PHP kaore he raru. Na tenei i taea e Spiral Scout te haere ake: Ko RoadRunner, kaore i rite ki te PHP-FPM, kaore e horoi i te mahara i waenga i nga tono, ka nui ake te mahi (ahakoa he uaua tenei huarahi ki te whakawhanaketanga). I tenei wa kei te whakamatautau matou i tenei taputapu, engari kaore ano he hua hei tiri. Kia pai ake te tatari mo ratou, ka whakaputahia e matou te whakamaoritanga o te panui RoadRunner mai i Spiral Scout.

Ko te huarahi mai i te tuhinga e tata ana ki a matou: i te wa e whakatau ana i o maatau raru, he maha tonu taatau whakamahi i te roopu PHP me te Haere, ka whiwhi i nga painga o nga reo e rua me te kore e whakarere i tetahi ki tetahi.

Kia pai!

I roto i nga tau tekau kua pahure ake nei, kua hangaia e matou he tono mo nga kamupene mai i te rarangi ingoa Fortune 500, mo nga pakihi kaore e neke ake i te 500 nga kaiwhakamahi. I enei wa katoa, kei te whakawhanake a maatau miihini i te tuara i te PHP. Engari i nga tau e rua ki muri, he mea nui te pa ki te mahi o a maatau hua, engari ki runga ano hoki i te tauineine - i whakaurua e matou a Golang (Haere) ki roto i ta matou puranga hangarau.

Tata tonu, ka kitea e matou i whakaae a Go ki te hanga tono nui ake me te 40x nga whakapainga mahi. Na tenei, i taea e matou te whakawhānui ake i a matou hua PHP o naianei, me te whakapai ake ma te whakakotahi i nga painga o nga reo e rua.

Ka korerotia e matou ki a koe me pehea te whakakotahitanga o Go me te PHP e awhina ana ki te whakaoti rapanga whanaketanga tuuturu me te pehea i huri ai hei taputapu mo tatou ka taea te whakakore i etahi o nga raru e pa ana ki tauira mate PHP.

To taiao whanaketanga PHP ia ra

I mua i to korero me pehea e taea ai e koe te whakamahi Haere ki te whakaora i te tauira mate PHP, me titiro ki to taiao whanaketanga PHP taunoa.

I te nuinga o nga wa, ka whakahaerehia e koe to tono ma te whakamahi i te huinga o te tūmau tukutuku nginx me te tūmau PHP-FPM. Ko te mea o mua e mahi ana i nga konae pateko me te tuku ano i nga tono motuhake ki te PHP-FPM, ko te PHP-FPM tonu e mahi ana i te waehere PHP. Kei te whakamahi pea koe i te huinga rongonui o Apache me mod_php. Engari ahakoa he ahua rereke te mahi, he rite tonu nga kaupapa.

Kia titiro tatou ki te mahi a PHP-FPM i te waehere tono. Ina tae mai he tono, ka arawhiti te PHP-FPM i te tukanga tamaiti PHP ka tukuna nga taipitopito o te tono hei waahanga o tona ahua (_GET, _POST, _SERVER, etc.).

Kaore e taea e te kawanatanga te huri i te wa e mahia ana he tuhinga PHP, no reira ko te huarahi ki te tiki i tetahi huinga raraunga whakauru hou ko te whakakore i te mahara tukanga me te arawhiti ano.

He maha nga painga o tenei tauira mahi. Kare koe e tino maaharahara mo te kai mahara, kua wehea katoa nga mahi, a ki te "mate" tetahi o ratou, ka waihangahia ano, kaore e pa ki te toenga o nga mahi. Engari ko tenei huarahi he ngoikoretanga ka puta i te wa e ngana ana ki te whakarahi i te tono.

Nga ngoikoretanga me nga koretake o te Taiao PHP

Mena he kaiwhakawhanake PHP ngaio koe, katahi koe ka mohio ki hea ka tiimata i tetahi kaupapa hou - me te kowhiringa o te angamahi. Kei roto ko nga whare pukapuka werohanga whakawhirinaki, ORM, whakamaori me nga tauira. A, ko te tikanga, ka taea te whakauru i nga whakaurunga kaiwhakamahi katoa ki te mea kotahi (Symfony/HttpFoundation or PSR-7). He rawe nga anga!

Engari he utu nga mea katoa. I roto i tetahi anga taumata hinonga, ki te tukatuka i te tono a te kaiwhakamahi ngawari, ki te uru atu ranei ki tetahi papaunga raraunga, me utaina e koe te maha o nga konae, te hanga i nga karaehe maha me te tarai i etahi whirihoranga. Engari ko te mea kino rawa atu i muri i te whakaotinga o ia mahi, ka hiahia koe ki te tautuhi i nga mea katoa ka timata ano: ko nga waehere katoa i timatahia e koe ka kore e whai hua, me tana awhina kaore koe e whakahaere i tetahi atu tono. Korerotia tenei ki tetahi kaitoha e tuhi ana i etahi atu reo, ka kite koe i te pohehe i runga i tona kanohi.

He maha nga tau e rapu ana nga miihini PHP mo nga huarahi ki te whakaoti i tenei raru, ma te whakamahi i nga tikanga uta mangere, microframeworks, whare pukapuka papai, keteroki, me era atu. (Tuhipoka a te kaiwhakamaori: ka whakatauhia tenei raruraru i te taenga mai o kōpaki i roto i te PHP 7.4)

Ka taea e PHP me Go te ora neke atu i te kotahi tono?

Ka taea te tuhi i nga tuhinga PHP ka roa ake i nga meneti torutoru (tae atu ki nga haora, nga ra ranei): hei tauira, nga mahi cron, nga parser CSV, nga kai wawahi rarangi. He rite tonu te mahi a ratou katoa: ka tikina he mahi, ka mahia, ka tatari mo te mahi e whai ake nei. Ka noho te waehere ki te mahara i nga wa katoa, ka penapena i nga manomano utu nui na te mea he maha nga waahanga taapiri e hiahiatia ana hei uta i te anga me te tono.

Engari ehara i te mea ngawari te hanga tuhinga roa. Ko nga hapa katoa ka mate katoa te mahi, ka whakapataritari te tirotiro i nga turuturu mahara, kua kore e taea te patuiro F5.

Kua pai ake te ahuatanga na te tukunga o te PHP 7: kua puta mai he kaikohi paru pono, kua ngawari ake te whakahaere i nga hapa, a kua kore e pakaru nga toronga o te kernel. He pono, me tupato tonu nga miihini ki te mahara me te mohio ki nga take a te kawanatanga i roto i te waehere (he reo ka taea te wareware i enei mea?). Heoi ano, he iti ake nga mea ohorere a PHP 7 mo tatou.

Ka taea te tango i te tauira o te mahi me nga tuhinga PHP kua roa te noho, te urutau ki nga mahi iti penei i te tukatuka i nga tono HTTP, na reira ka whakakorehia te hiahia ki te uta i nga mea katoa mai i te wahanga me ia tono?

Hei whakaoti i tenei raruraru, me whakauru tuatahi matou i tetahi tono tūmau ka taea te whakaae ki nga tono HTTP me te tuku takitahi ki te kaimahi PHP me te kore e patu i nga wa katoa.

I mohio matou ka taea e matou te tuhi i tetahi tūmau tukutuku ki te PHP parakore (PHP-PM) ma te whakamahi ranei i te toronga C (Swoole). A ahakoa he pai nga tikanga o ia tikanga, kaore nga whiringa e rua i pai ki a maatau - he mea ke atu taatau. He nui noa atu ta matou hiahia i te tūmau tukutuku - i tumanako matou ki te tiki i tetahi otinga hei whakaora i a matou i nga raru e pa ana ki te "timatatanga pakeke" i roto i te PHP, i te wa ano ka ngawari te whakarereke me te whakaroa mo nga tono motuhake. Arā, i hiahiatia he tūmau tono.

Ka taea e Haere te awhina i tenei? I mohio matou ka taea tenei na te mea ka whakahiatohia e te reo nga tono ki roto i nga takirua kotahi; he papa-whakawhiti; ka whakamahi i tana ake, tino huatau, tauira tukatuka whakarara (concurrency) me te whare pukapuka mo te mahi me te HTTP; ka mutu, ka watea mai ki a matou nga mano tini whare pukapuka puna tuwhera me nga whakaurunga.

Nga uaua o te whakakotahi i nga reo e rua

Tuatahi, he mea tika ki te whakatau me pehea e rua, neke atu ranei nga tono e korero ai tetahi ki tetahi.

Hei tauira, te whakamahi whare pukapuka pai Alex Palaestras, i taea te tiri mahara i waenga i nga tukanga PHP me te Haere (he rite ki te mod_php i Apache). Engari kei tenei whare pukapuka nga ahuatanga e whakawhāiti ana i tana whakamahinga mo te whakaoti rapanga.

I whakatau matou ki te whakamahi i tetahi huarahi rereke, tino noa: ki te hanga taunekeneke i waenga i nga mahi ma nga turanga / paipa. Kua kitea te pono o tenei huarahi i roto i nga tau tekau kua hipa, kua pai te arotau ki te taumata o te punaha whakahaere.

Hei timata, i hangaia e matou he kawa rua ngawari mo te whakawhiti raraunga i waenga i nga tukanga me te whakahaere i nga hapa tuku. I tona ahua ngawari, he rite tenei momo kawa ki kupenga с pane pākete rahi pūmau (i roto i to maatau 17 paita), kei roto nga korero mo te momo kete, tona rahi me te kopare takirua hei tirotiro i te pono o nga raraunga.

I te taha PHP i whakamahia e matou mahi mōkihi, a ki te taha Haere, ko te whare pukapuka whakawaehere/rua.

Ko te ahua ki a matou kaore i ranea tetahi kawa - a kua taapirihia e matou te kaha ki te waea net/rpc haere nga ratonga mai i te PHP. I muri mai, he nui te awhina i a maatau ki te whakawhanaketanga, na te mea ka ngawari te whakauru i nga whare pukapuka a Go ki nga tono PHP. Ko te hua o tenei mahi ka kitea, hei tauira, i roto i ta maatau hua tuwhera-puna Goridge.

Te tohatoha mahi puta noa i nga kaimahi PHP maha

I muri i te whakatinanatanga o te tikanga taunekeneke, i timata matou ki te whakaaro mo te huarahi tino pai ki te whakawhiti i nga mahi ki nga tukanga PHP. Ina tae mai he mahi, me whiriwhiri e te tūmau tono he kaimahi kore utu hei mahi. Mena ka puta he kaimahi/tukatuka he hapa, he "mate ranei", ka whakakorea e matou, ka hangaia he mea hou hei whakakapi. A, ki te oti pai te mahi/tukatuka, ka whakahokia e matou ki te puna o nga kaimahi e waatea ana ki te mahi i nga mahi.

RoadRunner: Kaore te PHP i hangaia kia mate, ko Golang ranei hei whakaora

Hei rokiroki i te puna o nga kaimahi kaha, i whakamahia e matou hongere parepare, ki te tango ohorere i nga kaimahi "mate" mai i te puna, i taapirihia e matou he tikanga mo te whai i nga hapa me nga ahuatanga o nga kaimahi.

Ko te mutunga mai, ka whiwhi matou i tetahi tūmau PHP mahi e kaha ana ki te tukatuka i nga tono ka tukuna ki te ahua rua.

Kia timata ta matou tono ki te mahi hei tūmau tukutuku, me whiriwhiri he paerewa PHP pono hei tohu mo nga tono HTTP e tau mai ana. I roto i to maatau, ko taatau noa huri net/http tono mai i Haere ki te whakatakotoranga PSR-7kia hototahi ki te nuinga o nga anga PHP e waatea ana i tenei ra.

Na te mea ko te PSR-7 e kiia ana e kore e taea te whakarereke (ka kii etahi kaore he mahi), me tuhi nga kaiwhakawhanake i nga tono karekau e aro ki te tono hei hinonga o te ao. He pai tenei ki te kaupapa o nga tukanga PHP roa. Ko ta matou whakatinanatanga whakamutunga, kaore ano kia whakaingoatia, he penei te ahua:

RoadRunner: Kaore te PHP i hangaia kia mate, ko Golang ranei hei whakaora

Te Whakataki RoadRunner - tūmau tono PHP mahi teitei

Ko ta maatau mahi whakamatautau tuatahi he tuara API, ka pakaru i ia wa i nga tono ohorere (he maha ake i nga waa o mua). Ahakoa i ranea te nginx i roto i te nuinga o nga keehi, he 502 nga hapa ka pa ki a matou na te mea kaore e taea e matou te whakarite tere i te punaha mo te pikinga o te kawenga.

Hei whakakapi i tenei otinga, i tukuna e matou ta matou tūmau tono PHP/Go tuatahi i te timatanga o te tau 2018. Na ka puta he painga whakamiharo! Ehara i te mea i tino whakakorehia e matou te hapa 502, engari i taea e matou te whakaiti i te maha o nga kaitoro ma te rua hautoru, ka penapena moni nui me nga pire mahunga mo nga miihini me nga kaiwhakahaere hua.

I te waenganui o te tau, kua pai ake ta maatau otinga, i whakaputaina ki runga GitHub i raro i te raihana MIT ka whakaingoatia. Hori Tiriti, na reira e whakanui ana i tona tere whakamiharo me te kaha.

Me pehea e taea ai e RoadRunner te whakapai ake i to puranga whanaketanga

Whakamahinga Hori Tiriti tukua matou ki te whakamahi Middleware net/http i runga i te taha Haere ki te mahi JWT manatoko i mua i te tono tae PHP, me te hapai i WebSockets me te whenua whakahiato puta noa i Prometheus.

He mihi ki te RPC i hangaia, ka taea e koe te whakatuwhera i te API o nga whare pukapuka Go mo PHP me te kore e tuhi i nga takai toronga. Ko te mea nui ake, me te RoadRunner ka taea e koe te tuku i nga tūmau hou-kore HTTP. Ko nga tauira ko nga kaikawe whakahaere i te PHP Tuhinga o mua, te hanga i nga whati tutira pono, me te taapiri gRPC ki a maatau tono.

Ma te awhina o nga hapori PHP me Go, i pai ake te pumau o te otinga, te whakanui ake i nga mahi tono ki te 40 nga wa i etahi whakamatautau, te whakapai ake i nga taputapu patuiro, te whakauru whakauru ki te anga Symfony, me te taapiri i te tautoko mo te HTTPS, HTTP/2, monomai, me te PSR-17.

mutunga

Kei te mau tonu etahi o nga tangata ki te whakaaro tawhito o PHP he reo puhoi, he reo kore e pai mo te tuhi mono mo WordPress. Ka kii pea enei tangata he herenga te PHP: ka nui haere te tono, me whiriwhiri koe i te reo "pakeke" ake ka tuhi ano i te turanga waehere kua kohia i roto i nga tau maha.

Ki enei mea katoa e hiahia ana ahau ki te whakautu: whakaaro ano. E whakapono ana matou ko koe anake te whakarite here mo PHP. Ka taea e koe te whakapau i to oranga katoa ki te whakawhiti mai i tetahi reo ki tetahi atu, e ngana ana ki te rapu i te tino pai mo o hiahia, ka tiimata ranei koe ki te whakaaro ki nga reo hei taputapu. Ko nga hapa o te reo penei i te PHP te take i angitu ai. A, ki te whakakotahi koe ki tetahi atu reo penei i te Haere, katahi ka hangaia e koe nga hua tino kaha ake i te mea ka iti koe ki te whakamahi i tetahi reo.

I te mahi tahi me te roopu o Go me te PHP, ka taea e matou te kii e aroha ana matou ki a raatau. Kaore matou e whakaaro ki te patu i tetahi mo tetahi - engari, ka rapua e matou etahi huarahi kia nui ake te uara mai i tenei puranga takirua.

UPD: ka mihi matou ki te kaihanga o RoadRunner me te kaituhi-kaituhi o te tuhinga taketake - Lachesis

Source: will.com

Tāpiri i te kōrero