RoadRunner: PHP haina kuvakwa kuti ife, kana Golang kununura

RoadRunner: PHP haina kuvakwa kuti ife, kana Golang kununura

Mhoro, Habr! Tiri kushanda paBadoo kushanda pane PHP kuita, sezvo tine hurongwa hwakakura mumutauro uyu uye nyaya yekushanda inyaya yekuchengetedza mari. Anopfuura makore gumi apfuura, takagadzira PHP-FPM yeizvi, iyo pakutanga yaive seti yezvigamba zvePHP, uye gare gare yakava chikamu chekugovera zviri pamutemo.

Mumakore achangopfuura, PHP yakafambira mberi zvikuru: muunganidzi wemarara akavandudza, chiyero chekugadzikana chakawedzera - nhasi unogona kunyora madhimoni uye zvinyorwa zvenguva refu muPHP pasina matambudziko. Izvi zvakabvumira Spiral Scout kuti ienderere mberi: RoadRunner, kusiyana nePHP-FPM, haichenese ndangariro pakati pezvikumbiro, izvo zvinopa mamwe mabhenefiti ekuita (kunyangwe nzira iyi inokanganisa maitiro ebudiriro). Parizvino tiri kuedza kushandisa chishandiso ichi, asi hatisati tave nemhinduro dzekugovera. Kuti zviwedzere kunakidza kuvamirira, Tiri kuburitsa shanduro yeRoadRunner chiziviso kubva kuSpiral Scout.

Maitiro anobva kuchinyorwa ari padyo nesu: pakugadzirisa matambudziko edu, isu zvakare tinowanzo shandisa musanganiswa wePP uye Go, tichiwana mabhenefiti emitauro miviri uye kusakanda mapfumo pasi mumwe uchifarira mumwe.

Nakidzwa!

Kwemakore gumi apfuura, takagadzira zvikumbiro zvemakambani kubva pane rondedzero Fortune 500, uye kumabhizinesi ane vateereri vasingapfuure mazana mashanu vashandisi. Nguva yese iyi, mainjiniya edu akagadzira backend kunyanya muPHP. Asi makore maviri apfuura, chimwe chinhu chakaita kukanganisa kukuru kwete chete pakuita kwezvigadzirwa zvedu, asiwo pakukura kwavo - takaunza Golang (Enda) kune yedu tekinoroji stack.

Nenguva isipi, takaona kuti Go yakatibvumira kuvaka maapplication akakura anosvika makumi mana ekukurumidza kuita. Nayo, takakwanisa kuwedzera zvigadzirwa zvakanyorwa muPHP, tichizvivandudza nekubatanidza zvakanakira mitauro miviri.

Isu tichakuudza kuti musanganiswa weGo uye PHP unobatsira sei kugadzirisa matambudziko chaiwo ebudiriro uye kuti yachinja sei kuita chishandiso kwatiri chinogona kubvisa mamwe matambudziko ane chekuita ne PHP kufa modhi.

Yako Yemazuva ese PHP Yekuvandudza Nzvimbo

Tisati tataura nezve mashandisiro aungaite Enda kumutsidzira PHP iri kufa modhi, ngatitarisei yako yakajairwa PHP budiriro nharaunda.

Kazhinji, iwe unomhanyisa chishandiso uchishandisa musanganiswa wenginx web server uye PHP-FPM server. Yekutanga inoshandisa static mafaera uye inodzosera zvakanangana zvikumbiro kuPP-FPM, uye PHP-FPM pachayo inoita PHP kodhi. Pamwe uri kushandisa isinganyanyozivikanwa musanganiswa kubva kuApache uye mod_php. Asi kunyange zvazvo inoshanda zvishoma zvakasiyana, nheyo dzakafanana.

Ngatitarisei kuti PHP-FPM inoita sei kodhi yekushandisa. Kana chikumbiro chasvika, PHP-FPM inotangisa chirongwa chemwana PHP uye inopa ruzivo rwekukumbira sechikamu chenyika yayo (_GET, _POST, _SERVER, etc.).

Iyo nyika haigone kuchinja panguva yekuitwa kweiyo PHP script, saka kune nzira imwe chete yekuwana seti nyowani ye data yekuisa: nekubvisa iyo ndangariro yemaitiro uye kuitangazve.

Iyi modhi yekuuraya ine zvakawanda zvakanakira. Iwe haufanirwe kunetseka zvakanyanya nezve mashandisiro endangariro, maitiro ese akaparadzaniswa zvachose, uye kana imwe yadzo ikafa, inozogadziriswa otomatiki pasina kukanganisa mamwe maitiro. Asi nzira iyi zvakare ine zvayakaipira zvinoonekwa kana uchiedza kuyera application.

Kuipa uye kusashanda kweiyo yenguva dzose PHP nharaunda

Kana iwe uri kuita hunyanzvi hwekuvandudza muPHP, saka iwe unoziva kwekutanga chirongwa chitsva - nekusarudza chimiro. Iyo ine maraibhurari ekutsamira jekiseni, ORMs, shanduro uye matemplate. Uye zvechokwadi, ese ekushandisa mushandisi anogona kuiswa zviri nyore muchinhu chimwe (Symfony/HttpFoundation kana PSR-7). Frameworks dzakanaka!

Asi zvese zvine mutengo wazvo. Mune chero bhizinesi-chikamu chimiro, kugadzirisa chikumbiro chakareruka chemushandisi kana kuwana dhatabhesi, iwe uchafanirwa kurodha angangoita gumi nemaviri emafaira, kugadzira akawanda makirasi uye kurongedza akati wandei magadzirirwo. Asi chakanyanya kuipa ndechekuti mushure mekupedza basa rega rega iwe uchada kugadzirisa zvese uye wotanga zvakare: iyo kodhi yese yawachangotanga inova isina basa, nerubatsiro rwayo hauchazogadziri chimwe chikumbiro. Udza izvi kune chero programmer anonyora mune chero mumwe mutauro, uye iwe uchaona kuvhiringidzika pachiso chake.

PHP mainjiniya vakapedza makore vachitsvaga nzira dzekugadzirisa dambudziko iri, vachishandisa akangwara simbe kurodha nzira, microframeworks, optimized maraibhurari, cache, etc. Asi pakupedzisira, uchiri kufanira reset yose Anwendung uye kutanga pamusoro, zvakare uye zvakare. (Chinyorwa cheMushanduri: dambudziko iri richagadziriswa zvishoma nekuuya kwe preload mu PHP 7.4)

PHP ine Go inogona kurarama zvinopfuura chikumbiro chimwe chete?

Zvinokwanisika kunyora PHP zvinyorwa zvinogara kwenguva refu kupfuura maminetsi mashoma (kusvika maawa kana mazuva): semuenzaniso, cron mabasa, CSV parsers, queue busters. Vese vanoshanda zvinoenderana nemamiriro akafanana: vanotora basa, voriita, uye vanomirira rinotevera. Iyo kodhi inogara mundangariro, ichichengetedza akakosha milliseconds sezvo akawanda ekuwedzera matanho anodiwa kurodha chimiro uye kushandisa.

Asi kugadzira zvinyorwa zvenguva refu hazvisi nyore. Chero kukanganisa kunouraya zvachose maitiro, kuongorora ndangariro kuvuza kunokupengesa, uye hauchakwanisa kushandisa F5 debugging.

Mamiriro acho akavandudzwa nekuburitswa kwePHP 7: muunganidzi wemarara akavimbika akaonekwa, zvave nyore kubata zvikanganiso, uye kernel extensions ikozvino yakadzivirirwa kubva pakudonha. Ichokwadi, mainjiniya achiri kuda kungwarira nekuyeuka uye kuziva nezvenyaya dzehurumende mukodhi (pane mutauro watisingafaniri kunetseka pamusoro pezvinhu izvi?). Uye zvakadaro, muPHP 7, zvishoma zvinoshamisa zvakatimirira.

Zvinogoneka here kutora modhi yekushanda neakarebesa PHP zvinyorwa, kuigadzirisa kune mamwe mabasa asina musoro sekugadzirisa zvikumbiro zveHTTP, uye nekudaro kubvisa kudiwa kwekurodha zvese kubva pakatanga pachikumbiro chega chega?

Kuti tigadzirise dambudziko iri, isu takatanga tashandisa sevha application iyo inogona kugamuchira zvikumbiro zveHTTP uye tozvitumira imwe neimwe kune mushandi wePP pasina kuiuraya nguva dzese.

Isu taiziva kuti taigona kunyora webhu server mune yakachena PHP (PHP-PM) kana kushandisa C yekuwedzera (Swoole). Uye kunyangwe imwe neimwe nzira ine kwayo kwayo, sarudzo dzese hadzina kuenderana nesu - isu taida chimwe chinhu. Isu taida zvinopfuura sevha yewebhu - taitarisira kuwana mhinduro inogona kutiponesa kubva kumatambudziko ane chekuita ne "kuoma kutanga" muPHP, iyo panguva imwechete yaigona kuchinjika nyore uye kuwedzerwa kune chaiwo maapplication. Kureva kuti taida application server.

Can Go help with this? Taiziva kuti zvaigona nokuti mutauro unounganidza zvikumbiro kuva mabhinari mamwe chete; iri cross-platform; inoshandisa yayo, yakanakisa, yakafanana yekugadzirisa modhi (concurrency) uye raibhurari yekushanda neHTTP; uye pakupedzisira, zviuru zveakavhurika-sosi maraibhurari uye masanganiswa achawanikwa kwatiri.

Zvinetso zvekubatanidza mitauro miviri yekuronga

Danho rekutanga rakanga riri rekuona kuti mafomu maviri kana kupfuura aizotaurirana sei.

Somuenzaniso, kushandisa raibhurari yakanaka Alex Palaestras aigona kushandisa ndangariro kugovana pakati pePP uye Go maitiro (akafanana nemod_php muApache). Asi raibhurari iyi ine zvinhu zvinoganhurira kushandiswa kwayo kugadzirisa dambudziko redu.

Isu takasarudza kushandisa imwe, yakajairika, nzira: kuvaka kudyidzana pakati pemaitiro kuburikidza nezvigadziko / mapaipi. Iyi nzira yakaratidza kuvimbika kwayo mumakumi emakore apfuura uye yakagadziridzwa zvakanaka padanho rekushandisa system.

Kutanga, takagadzira yakapfava bhinari protocol yekuchinjana data pakati pemaitiro uye kubata zvikanganiso zvekutapurirana. Muchimiro chayo chakareruka, rudzi urwu rweprotocol rwakafanana ne netstring с yakagadziriswa saizi yepakiti musoro (munyaya yedu 17 bytes), iyo ine ruzivo pamusoro pemhando yepakiti, ukuru hwayo uye bhinari mask kuti uone kutendeseka kwedata.

Kudivi rePP takashandisa pack basa, uye parutivi rweGo - raibhurari encoding/binary.

Zvaiita sekuti imwe protocol yanga isina kukwana - saka takawedzera kugona kufona Enda masevhisi net/rpc zvakananga kubva PHP. Izvi zvakazotibatsira zvakanyanya mukusimudzira, sezvo taigona kubatanidza Go maraibhurari mumapurogiramu ePP. Mhedzisiro yebasa iri inogona kuoneka, semuenzaniso, mune yedu imwe yakavhurika-sosi chigadzirwa Goridge.

Kugovera mabasa kune akawanda PHP vashandi

Mushure mekuita nzira yekudyidzana, takatanga kufunga nezve nzira yekunyatso kuendesa mabasa kune PHP maitiro. Kana basa rasvika, sevha yekushandisa inofanirwa kusarudza mushandi wemahara kuti apedze. Kana mushandi / chirongwa chikapera nekukanganisa kana "kufa," tinoibvisa uye kugadzira imwe nyowani yekuitsiva. Uye kana mushandi / maitiro apedza zvinobudirira, tinodzosera kune dziva revashandi varipo kuti vaite mabasa.

RoadRunner: PHP haina kuvakwa kuti ife, kana Golang kununura

Kuchengeta dziva revashandi vanoshanda vataishandisa buffered channel, kubvisa zvisingatarisirwi "vakafa" vashandi kubva mudziva, takawedzera nzira yekutevera zvikanganiso uye nyika dzevashandi.

Nekuda kweizvozvo, takagamuchira inoshanda PHP server inokwanisa kugadzirisa chero zvikumbiro zvinounzwa mune binary fomu.

Kuti application yedu ishande sewebhu server, taifanira kusarudza yakavimbika PHP standard kumiririra chero zvikumbiro zvinouya zveHTTP. Kwatiri isu chete shandura net/http chikumbiro kubva Go to fomati PSR-7kuitira kuti ienderane neakawanda PHP masisitimu aripo nhasi.

Nekuti PSR-7 inoonekwa seisingachinjike (vamwe vangati tekinoroji haisi iyo), vagadziri vanofanirwa kunyora zvikumbiro zvisinganyatso kubata chikumbiro sechinhu chepasi rose. Izvi zvinonyatsoenderana nepfungwa yekugara kwenguva refu PHP maitiro. Kuitwa kwedu kwekupedzisira, kwanga kusati kwadomwa zita, kwakataridzika seizvi:

RoadRunner: PHP haina kuvakwa kuti ife, kana Golang kununura

Kusuma RoadRunner - yakakwirira-inoshanda PHP application server

Basa redu rekutanga rekuyedza raive API backend, iyo nguva nenguva yaisangana nekuputika kusingatarisirwe kwezvikumbiro (kazhinji kazhinji kupfuura zvakajairwa). Kunyange zvazvo nginx yakanga yakakwana muzviitiko zvakawanda, taigara tichisangana nezvikanganiso zve 502 nokuti taisakwanisa kuenzanisa hurongwa nokukurumidza zvakakwana nokuda kwekuwedzera kunotarisirwa mumutoro.

Kutsiva iyi mhinduro, takaisa yedu yekutanga PHP/Go application server mukutanga kwa2018. Uye pakarepo takawana incredible effect! Hatina kungobvisa zvachose kukanganisa kwe502, asi takakwanisawo kuderedza nhamba yemaseva nezvikamu zviviri kubva muzvitatu, kuchengetedza mari yakawanda uye misoro yeinjiniya uye vatungamiri vezvigadzirwa.

Pakazosvika pakati pegore, isu takanga tagadzirisa mhinduro yedu, takaiburitsa paGitHub pasi peMIT rezenisi, ndokuidaidza. Roadrunner, nokudaro ichisimbisa kukurumidza kwayo kunoshamisa uye kushanda kwayo.

Nzira yeRoadRunner Inogona Kuvandudza Yako Yekuvandudza Stack

Kushanda Roadrunner yakatibvumira kushandisa Middleware net/http padivi reGo kuita ongororo yeJWT chikumbiro chisati charova PHP, pamwe nekubata maWebSockets uye kuunganidzwa kwenyika muPrometheus.

Kutenda kune yakavakirwa-mukati RPC, unogona kuvhura iyo API yechero Go maraibhurari ePP pasina kunyora ekuwedzera wrappers. Zvinotonyanya kukosha, RoadRunner inogona kushandiswa kuendesa maseva matsva asiri eHTTP. Mienzaniso inosanganisira kutanga vanobata muPHP AWS Lambda, kugadzira yakavimbika queue busters uye kunyange kuwedzera gRPC kuzvikumbiro zvedu.

Nerubatsiro rwePHP neGo nharaunda, takawedzera kugadzikana kwemhinduro, takawedzera mashandiro ekushandisa kusvika ku40 nguva mune dzimwe bvunzo, yakagadziridzwa maturusi ekugadzirisa, kushandiswa kwekubatanidza neSymfony framework, uye kuwedzera rutsigiro rweHTTPS, HTTP/ 2, plugins, uye PSR-17.

mhedziso

Vamwe vanhu vachiri kubatwa mukuona kwechinyakare kwePHP semutauro unononoka, wakaoma wakanakira kunyora WordPress plugins. Vanhu ava vangatotaura kuti PHP ine painogumira: kana application yacho yakura zvakakwana, iwe unofanirwa kusarudza mutauro "wakakura" uye wonyora patsva nheyo yekodhi yakaunganidzwa kwemakore mazhinji.

Kune izvi zvose ndinoda kupindura: funga zvakare. Isu tinotenda kuti iwe chete ndiwe unogona kuseta chero zvirambidzo zvePHP. Unogona kupedza hupenyu hwako hwese uchisvetuka kubva kune mumwe mutauro uchienda kune mumwe, uchiedza kutsvaga wakakwana wezvaunoda, kana iwe unogona kutanga kufunga mitauro sezvishandiso. Izvo zvinofungidzirwa kukanganisa kwemutauro wakaita sePHP zvinogona kunge zviri izvo zvikonzero zvekubudirira kwayo. Uye kana ukaisanganisa nemumwe mutauro wakaita seGo, unogona kugadzira zvigadzirwa zvine simba zvakanyanya kupfuura dai waingogumira kumutauro mumwe chete.

Tashanda nemusanganiswa weGo uye PHP, tinogona kutaura kuti tinovada. Isu hatironge kubayira imwe kune imwe, asi kuti titsvage nzira dzekuwana kukosha kwakawanda kubva mune iyi mbiri stack.

UPD: Tinogamuchira mugadziri weRoadRunner uye munyori-mubatsiri wechinyorwa chekutanga - Lachesis

Source: www.habr.com

Voeg