RoadRunner: PHP e le o fausia e oti, poʻo Golang e laveai

RoadRunner: PHP e le o fausia e oti, poʻo Golang e laveai

Talofa, Habr! Matou te toaaga i Badoo galue ile fa'atinoga PHP, talu ai o loʻo i ai se matou faiga tele i lenei gagana ma o le mataupu o le faʻatinoga o se mataupu o le faʻasaoina o tupe. E sili atu ma le sefulu tausaga talu ai, na matou fatuina ai le PHP-FPM mo lenei mea, lea i le taimi muamua o se seti o patches mo PHP, ma mulimuli ane avea ma vaega o le tufatufaina aloaia.

I tausaga talu ai nei, ua faʻateleina le alualu i luma o le PHP: ua faʻaleleia le faʻaputu lapisi, ua faʻateleina le maualuga o le mautu - i aso nei e mafai ona e tusia ni daemons ma tusitusiga umi i le PHP e aunoa ma se faʻafitauli. O lenei mea na faʻatagaina ai le Spiral Scout e alu atili: RoadRunner, e le pei o PHP-FPM, e le faʻamamāina le manatua i le va o talosaga, lea e maua ai faʻamanuiaga faʻaopoopo faʻatinoga (e ui o lenei auala e faʻalavelaveina ai le atinaʻe). O lo'o matou fa'ata'ita'i i lenei mea faigaluega, ae leai ni a matou fa'ai'uga e fa'asoa. Ina ia faʻafiafia atili le faʻatali mo i latou, O loʻo matou lolomiina se faʻaliliuga o le RoadRunner faʻasalalauga mai le Spiral Scout.

O le auala mai le tusiga e latalata ia i matou: pe a foia o matou faafitauli, matou te masani foi ona faʻaaogaina se tuʻufaʻatasiga o le PHP ma le Go, maua le aoga o gagana uma e lua ma aua le tuʻuina atu le tasi e fiafia i le isi.

Fiafia!

I le sefulu tausaga talu ai, ua matou fatuina talosaga mo kamupani mai le lisi Fortune 500, ma mo pisinisi e le sili atu i le 500 tagata fa'aoga. I le taimi atoa nei, o matou inisinia na atiina ae le pito i tua i le PHP. Ae i le lua tausaga talu ai, o se mea na faia se aafiaga tele e le gata i le faatinoga oa tatou oloa, ae faapea foi i luga o latou scalability - na matou faʻafeiloaʻi Golang (Go) i la matou faʻaputuga tekonolosi.

Toeitiiti lava o le taimi lava lena, na matou iloa ai o Go na faʻatagaina i matou e fausia ni tusi tetele e oʻo atu i le 40x vave faʻatinoga. Faatasi ai ma lea mea, na mafai ai ona matou faʻalauteleina oloa o loʻo iai ua tusia i le PHP, faʻaleleia atili e ala i le tuʻufaʻatasia o tulaga lelei o gagana e lua.

Matou te taʻu atu ia te oe pe faʻafefea ona fesoasoani le tuʻufaʻatasiga o Go ma PHP e foia faʻafitauli moni o atinaʻe ma pe faʻafefea ona avea ma meafaigaluega mo i matou e mafai ona faʻaumatia nisi o faʻafitauli e fesoʻotaʻi ma PHP mate fa'ata'ita'iga.

Lau Siosiomaga Atina'e PHP Aso Ta'itasi

Ae tatou te le'i talanoa pe fa'afefea ona e fa'aogaina le Alu e toe fa'aola le fa'ata'ita'iga mate a PHP, se'i o tatou va'ai i lau si'osi'omaga fa'atupuina PHP masani.

I le tele o tulaga, e te faʻaogaina le talosaga e faʻaaoga ai se tuʻufaʻatasiga o le nginx web server ma le PHP-FPM server. O le mea muamua e tu'uina atu faila fa'amau ma toe fa'asa'o talosaga fa'apitoa ile PHP-FPM, ma PHP-FPM lava ia na te fa'atinoina le code PHP. Masalo o loʻo e faʻaaogaina se tuʻufaʻatasiga le lauiloa mai Apache ma mod_php. Ae e ui ina fai si ese teisi, ae e tutusa lava mataupu faavae.

Se'i o tatou va'ai pe fa'apefea ona fa'atino e PHP-FPM le fa'ailoga tusi talosaga. A oʻo mai se talosaga, PHP-FPM amata le tamaititi PHP faagasologa ma pasia faʻamatalaga talosaga o se vaega o lona setete (_GET, _POST, _SERVER, ma isi).

E le mafai ona suia le setete i le taimi o le faʻatinoina o le PHP script, o lea e naʻo le tasi le auala e maua ai se seti fou o faʻamatalaga faʻapipiʻi: e ala i le faʻamamaina o le manatua o le faagasologa ma toe faʻafouina.

O lenei faʻataʻitaʻiga faʻataʻitaʻiga e tele mea lelei. E te le tau popole tele e uiga i le taumafaina manatua, o faiga uma e matua vavae ese, ma afai e mate se tasi, o le a otometi lava ona toe fatuina e aunoa ma le aafia ai o isi vaega. Ae o lenei faiga e iai foʻi faʻaletonu e aliali mai pe a taumafai e faʻalautele le talosaga.

Le lelei ma le le atoatoa o se siosiomaga PHP masani

Afai o loʻo e auai i le atinaʻeina faʻapolofesa ile PHP, ona e iloa lea o le mea e amata ai se galuega fou - e ala i le filifilia o se faʻavae. E aofia ai faletusi mo tui fa'alagolago, ORM, fa'aliliuga ma fa'ata'ita'iga. Ma o le mea moni, o mea uma e faʻaoga e mafai ona tuʻuina i totonu o se mea e tasi (Symfony / HttpFoundation poʻo PSR-7). E manaia fa'ava'a!

Ae o mea uma e iai lona tau. I soʻo se atinaʻe-tulaga faʻavae, e faʻagasolo ai se talosaga faigofie a le tagata faʻaoga poʻo le faʻaogaina o se faʻamaumauga, e tatau ona e utaina a itiiti ifo ma le tele o faila, fatuina le tele o vasega ma faʻavasega le tele o faʻasalalauga. Ae o le mea sili ona leaga o le maeʻa lea o galuega taʻitasi e te manaʻomia e toe setiina mea uma ma toe amata: o tulafono uma na e amataina e le aoga, faatasi ai ma lana fesoasoani e te le toe faia se isi talosaga. Ta'u atu lenei mea i so'o se tagata fai polokalame e tusitusi i se isi lava gagana, ma o le a e va'ai atu i ona foliga le fememea'i.

PHP inisinia ua faʻaaluina le tele o tausaga e suʻe ai auala e foia ai lenei faʻafitauli, e faʻaaoga ai metotia faʻaogaina paie, microframeworks, faletusi optimized, caches, ma isi. Ae i le faaiuga, e tatau lava ona e toe setiina le talosaga atoa ma toe amata, toe fai. (Faamatalaga a le Faaliliu: o lenei faafitauli o le a foia se vaega i le oo mai o muai faʻatulagaina ile PHP 7.4)

E mafai e PHP ma Go ona ola i le sili atu ma le tasi le talosaga?

E mafai ona tusia fa'amaumauga PHP e umi atu nai lo nai minute (e o'o i itula po'o aso): mo se fa'ata'ita'iga, cron tasks, CSV parsers, queue busters. Latou te galulue uma e tusa ai ma le tulaga e tasi: latou te toe maua se galuega, faʻatino, ma faʻatali mo le isi. O le code e nofo i le manatua, faʻasaoina milliseconds taua e pei o le tele o laasaga faaopoopo e manaʻomia e utaina ai le faʻavae ma le faʻaoga.

Ae o le atinaʻeina o tusitusiga umi e le faigofie. So'o se mea sese e fa'aumatia atoa ai le fa'agasologa, o le su'esu'eina o le galo e te fa'avalevalea, ma e le toe mafai ona e fa'aogaina le F5 debugging.

Ua faʻaleleia le tulaga i le faʻasaʻoina o le PHP 7: ua faʻaalia se faʻaputu lapisi faʻalagolago, ua sili atu ona faigofie le taulimaina o mea sese, ma ua puipuia nei faʻaopoopoga o fatu mai le gaʻo. E moni, e manaʻomia pea e inisinia ona faʻaeteete i le manatuaina ma nofouta i mataupu a le setete i totonu o le code (pe i ai se gagana e le tatau ai ona tatou popole i nei mea?). Ae ui i lea, i le PHP 7, e itiiti ni mea e ofo ai o loʻo faʻatali mai ia i tatou.

E mafai ona ave le faʻataʻitaʻiga o le galue ma faʻamaumauga PHP umi, faʻafetaui i galuega e sili atu le taua e pei o le faʻaogaina o talosaga HTTP, ma faʻaumatia ai le manaʻoga e utaina mea uma mai le sasa mo talosaga taʻitasi?

Ina ia foia lenei faafitauli, matou te manaʻomia muamua le faʻatinoina o se talosaga a le server e mafai ona talia talosaga HTTP ma tuʻuina atu i latou taʻitasi i le tagata faigaluega PHP e aunoa ma le fasiotia i taimi uma.

Na matou iloa e mafai ona matou tusia se upega tafaʻilagi i le PHP mama (PHP-PM) poʻo le faʻaogaina o le C extension (Swoole). Ma e ui lava o metotia taʻitasi e iai ona lava aoga, o filifiliga uma e lua e le fetaui ma i matou - matou te manaʻo i se mea e sili atu. Matou te manaʻomia mea e sili atu nai lo na o se 'upega tafaʻilagi - matou te faʻamoemoe e maua se fofo e mafai ona laveaʻiina i matou mai faʻafitauli e fesoʻotaʻi ma le "amataga faigata" i le PHP, lea i le taimi lava e tasi e mafai ona faigofie ona fetuunai ma faʻalauteleina mo faʻamatalaga patino. O lona uiga, matou te manaʻomia se 'auʻaunaga talosaga.

E mafai e Go se fesoasoani i lenei mea? Na matou iloa e mafai ona o le gagana e tu'ufa'atasia tusi talosaga i totonu o binaries tasi; o lo'o fa'alavalava; fa'aogaina lana lava, fa'alelei, fa'ata'ita'iga fa'ata'ita'iga (concurrency) ma le faletusi mo le galulue fa'atasi ma HTTP; ma mulimuli ane, o le a avanoa mo i tatou le faitau afe o faletusi ma tuʻufaʻatasiga tatala.

Faigata o le tu'ufa'atasia o gagana fa'apolokalame se lua

O le laasaga muamua o le fuafuaina lea pe fa'afefea ona feso'ota'i se lua pe sili atu fo'i talosaga le tasi i le isi.

Mo se faʻataʻitaʻiga, faʻaaogaina faletusi matagofie Alex Palaestras e mafai ona faʻatinoina le faʻasoaina o mafaufauga i le va o le PHP ma le Go (e tutusa ma mod_php i Apache). Ae o lenei faletusi o loʻo i ai vaega e faʻatapulaʻaina lona faʻaogaina mo le foia o tatou faʻafitauli.

Na matou filifili e faʻaoga se isi, sili atu ona masani, auala: e fausia ai fegalegaleaiga i le va o faiga e ala i sockets / pipelines. O lenei faiga ua faʻamaonia lona faʻamaoni i le tele o tausaga ua tuanaʻi ma ua faʻalelei lelei i le tulaga faʻaogaina o le polokalama.

I le amataga, na matou fatuina se faiga faʻavae faigofie mo le fesuiaiga o faʻamatalaga i le va o gaioiga ma le taulimaina o mea sese. I lona foliga faigofie, o lenei ituaiga o protocol e tutusa ma manoa upega с lapo'a fa'amau fa'aulu (i la matou tulaga 17 bytes), o loʻo i ai faʻamatalaga e uiga i le ituaiga o afifi, lona tele ma se masini binary e siaki ai le faʻamaoni o faʻamaumauga.

I le itu PHP na matou faʻaaogaina galuega fa'apipi'i, ma i le itu Go - o se faletusi fa'ailoga/binary.

Na foliga mai ia i matou e le lava le tasi tulafono - o lea na matou faʻaopoopoina ai le mafai ona valaʻau Alu sa'o auaunaga net/rpc mai PHP. O lenei mea mulimuli ane na fesoasoani tele ia i matou i le atinaʻe, aua e faigofie ona matou tuʻufaʻatasia faletusi Go i PHP talosaga. O le taunuuga o lenei galuega e mafai ona vaʻaia, mo se faʻataʻitaʻiga, i totonu o le matou isi oloa tatala-source Goridge.

Fa'asoa galuega i le tele o tagata faigaluega PHP

Ina ua maeʻa le faʻatinoina o le faʻaogaina o fesoʻotaʻiga, na amata ona matou mafaufau pe faʻafefea ona sili atu ona lelei le tuʻuina atu o galuega i faiga PHP. A oʻo mai se galuega, e tatau i le 'auʻaunaga talosaga ona filifili se tagata faigaluega saoloto e faʻamaeʻa. Afai e faʻamutaina se tagata faigaluega / faʻagasologa i se mea sese pe "oti," matou te faʻaumatia ma faia se mea fou e sui ai. Ma afai ua maeʻa manuia le tagata faigaluega / faʻagasologa, matou te toe faʻafoʻi atu i le vaitaele o tagata faigaluega avanoa e faʻatino galuega.

RoadRunner: PHP e le o fausia e oti, poʻo Golang e laveai

Ina ia teuina se vaitaele o tagata galulue malosi na matou faʻaaogaina ala fa'afefe, ina ia aveese faʻafuaseʻi "oti" tagata faigaluega mai le vaitaele, matou te faʻaopoopoina se masini mo le siakiina o mea sese ma setete o tagata faigaluega.

O le i'uga, na matou mauaina se server PHP galue e mafai ona fa'agaoioia so'o se talosaga e tu'uina atu i le faiga fa'alua.

Ina ia mafai ona faʻaogaina le matou talosaga e avea o se upega tafaʻilagi, e tatau ona matou filifilia se tulaga faʻalagolago PHP e fai ma sui o soʻo se talosaga HTTP ulufale mai. I lo tatou tulaga tatou na o liua net/http talosaga mai Alu i le faatulagaga PSR-7ina ia fetaui ma le tele o faʻatulagaga PHP o loʻo maua i aso nei.

Talu ai ona o le PSR-7 e manatu e le mafai ona suia (o nisi e fai mai faʻapitoa e leai), e tatau i tagata atiaʻe ona tusi tusi talosaga e le faʻatatauina le talosaga o se faʻalapotopotoga faʻavaomalo. E fetaui lelei lea ma le manatu o faiga PHP umi. O la matou faʻatinoga mulimuli, lea e leʻi taʻua, e pei o lenei:

RoadRunner: PHP e le o fausia e oti, poʻo Golang e laveai

Fa'ailoa RoadRunner - maualuga-faatinoga PHP talosaga server

O la matou suʻega muamua o le API backend, lea e masani ona oʻo i le faʻalavelave faʻafuaseʻi o talosaga (sili atu tele nai lo le masani). E ui lava o le nginx na lava i le tele o tulaga, matou te masani ona feagai ma 502 mea sese ona e le mafai ona matou faapaleni vave le faiga mo le faʻatupulaia o le uta.

Ina ia sui lenei fofo, na matou faʻaogaina le matou PHP / Go application server i le amataga o le 2018. Ma o le taimi lava lena na matou maua ai se aafiaga ofoofogia! E le gata na matou faʻaumatia atoa le 502 sese, ae na mafai foi ona matou faʻaitiitia le numera o sapalai i le lua vaetolu, faʻasaoina le tele o tupe ma ulu ulu mo inisinia ma pule o oloa.

E oʻo atu i le ogatotonu o le tausaga, ua maeʻa le matou fofo, lomia i luga ole GitHub i lalo ole laisene MIT, ma taʻua. Auala, ma fa'amamafaina ai lona saoasaoa tele ma le lelei.

Fa'afefea ona Fa'aleleia e RoadRunner lau Atina'e Fa'aputu

Talosaga Auala faʻatagaina matou e faʻaoga Middleware net / http i luga o le Go itu e faʻamaonia ai le JWT aʻo leʻi oʻo i le PHP le talosaga, faʻapea foʻi ma le taulimaina o WebSockets ma le faʻapotopotoga o le lalolagi atoa i Prometheus.

Faʻafetai i le RPC fausia, e mafai ona e tatalaina le API o soʻo se faletusi Go mo PHP e aunoa ma le tusiaina o afifi faʻaopoopoga. Ae sili atu le taua, RoadRunner e mafai ona faʻaogaina e faʻapipiʻi ai ni sapalai fou e le o ni HTTP. O faʻataʻitaʻiga e aofia ai le faʻalauiloaina o tagata faʻatautaia ile PHP AWS Lambda, faia fa'alagolago i laina fa'atosina ma fa'aopoopo gRPC i a matou talosaga.

Faatasi ai ma le fesoasoani a le PHP ma le Go community, ua matou faʻalauteleina le mautu o le fofo, faʻateleina le faʻatinoga o talosaga e oʻo atu i le 40 taimi i nisi o suʻega, faʻaleleia meafaigaluega faʻapipiʻi, faʻatinoina le tuʻufaʻatasia ma le Symfony framework, ma faʻaopoopo le lagolago mo HTTPS, HTTP / 2, plugini, ma PSR-17.

iʻuga

O nisi tagata o loʻo maua pea i le vaʻaiga tuai o le PHP o se gagana faʻagesegese, faʻalavelave naʻo le lelei mo le tusiaina o WordPress plugins. Atonu e fai mai nei tagata o le PHP e iai se tapulaʻa: pe a lava le tele o le talosaga, e tatau ona e filifilia se gagana sili atu "matua" ma toe tusi le faʻavae code lea na faʻaputuina i le tele o tausaga.

I nei mea uma ou te fia tali atu: toe mafaufau. Matou te talitonu e na'o oe e mafai ona setiina so'o se tapula'a mo PHP. E mafai ona e faʻaalu lou olaga atoa e osooso mai le tasi gagana i le isi, taumafai e suʻe le fetaui lelei mo ou manaʻoga, pe amata ona e mafaufau i gagana o ni meafaigaluega. O fa'aletonu o lo'o va'aia o se gagana e pei o le PHP atonu o le mafua'aga tonu lea o lona manuia. Ma afai e te tu'ufa'atasia ma se isi gagana e pei o le Go, e mafai ona e faia ni oloa e sili atu le mamana nai lo le fa'atapula'aina i le na'o le tasi le gagana.

O le galulue faatasi ma le Go ma le PHP, e mafai ona matou fai atu matou te alolofa ia i latou. Matou te le o fuafua e ositaulaga le tasi mo le isi, ae ia vaʻavaʻai mo ni auala e maua atili ai le tau mai lenei faʻaputu lua.

UPD: Matou te faʻafeiloaia le na faia le RoadRunner ma le tusitala o le uluaʻi tusiga - Lachesis

puna: www.habr.com

Faaopoopo i ai se faamatalaga