I-RoadRunner: I-PHP ayakhelwe ukuba ife, noma i-Golang ukuze isindise

I-RoadRunner: I-PHP ayakhelwe ukuba ife, noma i-Golang ukuze isindise

Sawubona, Habr! Sisebenza e-Badoo ukusebenza ekusebenzeni kwe-PHP, njengoba sinohlelo olukhulu kakhulu ngalolu limi futhi udaba lokusebenza luyindaba yokonga imali. Eminyakeni engaphezu kweyishumi edlule, sakha i-PHP-FPM yalokhu, ekuqaleni eyayiyiqoqo leziqephu ze-PHP, futhi kamuva yaba yingxenye yokusabalalisa okusemthethweni.

Eminyakeni yamuva, i-PHP yenze intuthuko enkulu: umqoqi kadoti uthuthukile, izinga lokuzinza liye landa - namuhla ungabhala ama-daemon nemibhalo ehlala isikhathi eside ku-PHP ngaphandle kwezinkinga. Lokhu kuvumele i-Spiral Scout ukuthi iqhubekele phambili: I-RoadRunner, ngokungafani ne-PHP-FPM, ayihlanzi inkumbulo phakathi kwezicelo, okunikeza izinzuzo ezengeziwe zokusebenza (nakuba le ndlela yenza inqubo yokuthuthukiswa ibe nzima). Okwamanje sizama leli thuluzi, kodwa asinayo imiphumela esingabelana ngayo okwamanje. Ukwenza kube mnandi ukubalinda, Sishicilela ukuhumusha kwesimemezelo se-RoadRunner esivela ku-Spiral Scout.

Indlela evela esihlokweni iseduze nathi: lapho sixazulula izinkinga zethu, sivame ukusebenzisa inhlanganisela ye-PHP ne-Go, sithola izinzuzo zazo zombili izilimi futhi singayeki eyodwa sivuna enye.

Jabulela!

Kule minyaka eyishumi edlule, sidale izicelo zezinkampani ezisohlwini I-Fortune 500, nakumabhizinisi anezithameli ezingeqile ku-500 abasebenzisi. Sonke lesi sikhathi, onjiniyela bethu bathuthukise i-backend ikakhulukazi ku-PHP. Kodwa eminyakeni emibili edlule, okuthile akuba nomthelela omkhulu hhayi kuphela ekusebenzeni kwemikhiqizo yethu, kodwa nasekukhuleni kwayo - sethule i-Golang (Go) esitaki sethu sobuchwepheshe.

Cishe ngokushesha, sithole ukuthi i-Go isivumele ukuthi sakhe izinhlelo zokusebenza ezinkulu ezinokusebenza okusheshayo okungafika ku-40x. Ngayo, sikwazile ukwandisa imikhiqizo ekhona ebhalwe nge-PHP, siyithuthukise ngokuhlanganisa izinzuzo zazo zombili izilimi.

Sizokutshela ukuthi inhlanganisela ye-Go ne-PHP isiza kanjani ukuxazulula izinkinga zangempela zentuthuko nokuthi isiphenduke kanjani ithuluzi lethu elingaqeda ezinye zezinkinga ezihlobene Imodeli yokufa ye-PHP.

Imvelo Yakho Yokuthuthukiswa Kwe-PHP Yansuku zonke

Ngaphambi kokuthi sikhulume ngokuthi ungasebenzisa kanjani i-Go ukuze uvuselele imodeli efayo ye-PHP, ake sibheke indawo yakho evamile yokuthuthukiswa kwe-PHP.

Ezimweni eziningi, usebenzisa uhlelo lokusebenza usebenzisa inhlanganisela yeseva yewebhu ye-nginx kanye neseva ye-PHP-FPM. Eyokuqala isebenzela amafayela amile futhi iqondise kabusha izicelo ezithile ku-PHP-FPM, futhi i-PHP-FPM ngokwayo isebenzisa ikhodi ye-PHP. Mhlawumbe usebenzisa inhlanganisela engaziwa kancane evela ku-Apache ne-mod_php. Kodwa nakuba isebenza ngokuhlukile kancane, izimiso ziyefana.

Ake sibheke ukuthi i-PHP-FPM iyenza kanjani ikhodi yohlelo lokusebenza. Lapho isicelo sifika, i-PHP-FPM iqalisa inqubo ye-PHP yengane futhi idlulise imininingwane yesicelo njengengxenye yesimo sayo (_GET, _POST, _SERVER, njll.).

Isimo asikwazi ukushintsha ngesikhathi kusetshenziswa iskripthi se-PHP, ngakho-ke kunendlela eyodwa kuphela yokuthola isethi entsha yedatha yokufaka: ngokusula inkumbulo yenqubo futhi uyiqalise kabusha.

Le modeli yokubulawa inezinzuzo eziningi. Akudingeki ukhathazeke kakhulu ngokusetshenziswa kwenkumbulo, zonke izinqubo zihlukanisiwe ngokuphelele, futhi uma enye yazo ifa, izokwenziwa kabusha ngokuzenzakalelayo ngaphandle kokuthinta ezinye izinqubo. Kodwa le ndlela futhi inemibi evela lapho uzama ukukala uhlelo lokusebenza.

Ukubi nokungasebenzi kahle kwemvelo ye-PHP evamile

Uma ubambe iqhaza ekuthuthukisweni kochwepheshe ku-PHP, khona-ke uyazi ukuthi ungaqala kuphi iphrojekthi entsha - ngokukhetha uhlaka. Iqukethe imitapo yolwazi yomjovo wokuncika, ama-ORM, ukuhumusha nezifanekiso. Futhi-ke, konke okokufaka komsebenzisi kungafakwa kalula entweni eyodwa (Symfony/HttpFoundation noma i-PSR-7). Amafreyimu apholile!

Kodwa yonke into inenani layo. Kunoma yiluphi uhlaka lwezinga lebhizinisi, ukucubungula isicelo esilula somsebenzisi noma ukufinyelela kusizindalwazi, kuzodingeka ukuthi ulayishe okungenani inqwaba yamafayela, udale amakilasi amaningi futhi uhlukanise ukucupha okuningi. Kodwa into embi kakhulu ukuthi ngemva kokuqeda umsebenzi ngamunye uzodinga ukusetha kabusha yonke into futhi uqale futhi: yonke ikhodi osanda kuyiqala iba yize, ngosizo lwayo ngeke usacubungula esinye isicelo. Tshela lokhu kunoma yimuphi umhleli obhala nganoma yiluphi olunye ulimi, futhi uzobona ukudideka ebusweni bakhe.

Onjiniyela be-PHP bachithe iminyaka befuna izindlela zokuxazulula le nkinga, besebenzisa amasu ahlakaniphile okulayisha avilaphayo, ama-microframeworks, imitapo yolwazi ethuthukisiwe, izinqolobane, njll. Kodwa ekugcineni, kusamele usethe kabusha lonke uhlelo lokusebenza bese uqala kabusha, futhi futhi. (Inothi lomhumushi: le nkinga izoxazululwa kancane ngokufika kwe layisha kuqala ku-PHP 7.4)

Ingabe i-PHP ene-Go ingasinda kwisicelo esingaphezu kwesisodwa?

Kungenzeka ukuthi ubhale imibhalo ye-PHP ezohlala isikhathi eside kunemizuzu embalwa (kufika emahoreni noma izinsuku): isibonelo, imisebenzi ye-cron, abahlaluli be-CSV, amabhasi omugqa. Wonke asebenza ngokwesimo esifanayo: athola umsebenzi, awenze, bese elinda olandelayo. Ikhodi ihlala enkumbulweni, ilondoloza ama-millisecond ayigugu njengoba kudingeka izinyathelo eziningi ezengeziwe ukuze kulayishwe uhlaka nokusetshenziswa.

Kodwa ukwakha imibhalo ehlala isikhathi eside akulula kangako. Noma yiliphi iphutha liyibulala ngokuphelele inqubo, ukuhlonza ukuvuza kwememori kuyakuhlanyisa, futhi awusakwazi ukusebenzisa ukulungisa iphutha kwe-F5.

Isimo siye sathuthuka ngokukhululwa kwe-PHP 7: kuvele umqoqi wezibi onokwethenjelwa, kube lula ukuphatha amaphutha, futhi izandiso ze-kernel manje zivikelekile ekuvuzeni. Yiqiniso, onjiniyela basadinga ukuqaphela inkumbulo futhi baqaphele izindaba zombuso kukhodi (ingabe lukhona ulimi lapho kungadingeki sikhathazeke ngalezi zinto?). Futhi nokho, ku-PHP 7, izimanga ezimbalwa zisilindile.

Kungenzeka yini ukuthatha imodeli yokusebenza ngemibhalo ye-PHP ephile isikhathi eside, uyivumelanise nemisebenzi emincane efana nokucubungula izicelo ze-HTTP, bese ususa isidingo sokulayisha yonke into kusukela ekuqaleni kwesicelo ngasinye?

Ukuze sixazulule le nkinga, siqale sidinga ukusebenzisa uhlelo lokusebenza lweseva olungamukela izicelo ze-HTTP futhi sizidlulisele ngakunye kusisebenzi se-PHP ngaphandle kokusibulala ngaso sonke isikhathi.

Besazi ukuthi singabhala iseva yewebhu nge-PHP emsulwa (PHP-PM) noma sisebenzisa isandiso se-C (Swoole). Futhi nakuba indlela ngayinye inokufaneleka kwayo, zombili izinketho azizange zisifanele - besifuna okunye okwengeziwe. Besidinga okungaphezu nje kweseva yewebhu - besithemba ukuthi sizothola isixazululo esingasisindisa ezinkingeni ezihlobene "nokuqala kanzima" ku-PHP, ngesikhathi esifanayo esingashintshwa kalula futhi sandiswe ezinhlelweni ezithile. Okusho ukuthi, besidinga iseva yohlelo lokusebenza.

Ungakwazi ukusiza ngalokhu? Besazi ukuthi kungenzeka ngoba ulimi luhlanganisa izinhlelo zokusebenza zibe ngamabhanari owodwa; iyi-cross-platform; isebenzisa eyakhe, nenhle kakhulu, imodeli yokucubungula okufanayo (concurrency) kanye nomtapo wolwazi wokusebenza ne-HTTP; futhi ekugcineni, izinkulungwane zemitapo yolwazi evulekile kanye nokuhlanganiswa kuzotholakala kithi.

Ubunzima bokuhlanganisa izilimi ezimbili zokuhlela

Isinyathelo sokuqala kwakuwukunquma ukuthi izicelo ezimbili noma ngaphezulu zizoxhumana kanjani.

Ngokwesibonelo, ngokusebenzisa umtapo wolwazi omangalisayo U-Alex Palaestras angasebenzisa ukwabelana ngenkumbulo phakathi kwezinqubo ze-PHP ne-Go (ezifana ne-mod_php ku-Apache). Kodwa lo mtapo wezincwadi unezici ezinciphisa ukusetshenziswa kwawo ekuxazululeni inkinga yethu.

Sinqume ukusebenzisa enye indlela, ejwayelekile kakhulu: ukwakha ukuxhumana phakathi kwezinqubo ngokusebenzisa amasokhethi/amapayipi. Le ndlela ifakazele ukwethembeka kwayo emashumini eminyaka adlule futhi ithuthukiswe kahle ezingeni lesistimu yokusebenza.

Okokuqala, sidale inqubo kanambambili elula yokushintshisana ngedatha phakathi kwezinqubo nokusingatha amaphutha okudlulisela. Ngendlela elula, lolu hlobo lwephrothokholi lufana ne inethi с unhlokweni wephakethe losayizi ongashintshi (kithi amabhayithi angu-17), aqukethe ulwazi mayelana nohlobo lwephakethe, usayizi walo kanye nemaski kanambambili ukuhlola ubuqotho bedatha.

Ohlangothini lwe-PHP sisebenzise umsebenzi wephakethe, futhi ohlangothini lwe-Go - umtapo wolwazi umbhalo wekhodi/ kanambambili.

Kithina kwabonakala sengathi umthetho olandelwayo owodwa ayanele - ngakho-ke sengeze ikhono lokushaya ucingo Hamba amasevisi net/rpc ngokuqondile kusuka ku-PHP. Lokhu kamuva kwasisiza kakhulu ekuthuthukisweni, njengoba besingakwazi ukuhlanganisa kalula imitapo yolwazi ye-Go ezinhlelweni ze-PHP. Umphumela walo msebenzi ungabonakala, ngokwesibonelo, komunye umkhiqizo wethu womthombo ovulekile I-Goridge.

Ukusabalalisa imisebenzi kubasebenzi abaningi be-PHP

Ngemuva kokusebenzisa indlela yokusebenzisana, saqala ukucabanga ngendlela yokudlulisa ngempumelelo imisebenzi kuzinqubo ze-PHP. Lapho umsebenzi ufika, iseva yesicelo kufanele ikhethe isisebenzi samahhala ukuze siwuqedele. Uma isisebenzi/inqubo inqanyulwa ngephutha noma “sifa,” siyayisusa bese sidala entsha esizoyishintsha. Futhi uma isisebenzi/inqubo iqedwe ngempumelelo, siyibuyisela kubasebenzi abakhona ukuze benze imisebenzi.

I-RoadRunner: I-PHP ayakhelwe ukuba ife, noma i-Golang ukuze isindise

Ukugcina inqwaba yabasebenzi abakhuthele sasisebenzisa isiteshi esigciniwe, ukususa abasebenzi “abafile” ngokungalindelekile echibini, sengeze indlela yokulandelela amaphutha nezimo zezisebenzi.

Ngenxa yalokho, sithole iseva esebenzayo ye-PHP ekwazi ukucubungula noma yiziphi izicelo ezethulwa ngefomu kanambambili.

Ukuze uhlelo lwethu lokusebenza lusebenze njengeseva yewebhu, bekufanele sikhethe izinga elithembekile le-PHP ukumela noma yiziphi izicelo ze-HTTP ezingenayo. Esimweni sethu nje guqula isicelo se-net/http kusuka ku-Go to format I-PSR-7ukuze ihambisane nezinhlaka eziningi ze-PHP ezitholakalayo namuhla.

Ngenxa yokuthi i-PSR-7 ithathwa njengengaguquleki (abanye bangasho ngokobuchwepheshe akunjalo), onjiniyela kufanele babhale izinhlelo zokusebenza ezingasiphathi isicelo njengebhizinisi lomhlaba jikelele. Lokhu kufanelana kahle nomqondo wezinqubo ze-PHP ezihlala isikhathi eside. Ukuqaliswa kwethu kokugcina, ebekungakaqanjwa, kubukeke kanje:

I-RoadRunner: I-PHP ayakhelwe ukuba ife, noma i-Golang ukuze isindise

Sethula i-RoadRunner - iseva yesicelo se-PHP esebenza kahle kakhulu

Umsebenzi wethu wokuqala wokuhlola bekuwukubuyela emuva kwe-API, eyenzeka ngezikhathi ezithile ukuqhuma okungalindelekile kwezicelo (kaningi kunokujwayelekile). Nakuba i-nginx yayanele ezimweni eziningi, sasihlala sihlangabezana namaphutha angu-502 ngoba asikwazanga ukulinganisa isistimu ngokushesha ngokwanele ukuze kukhuliswe umthwalo olindelekile.

Ukushintsha lesi sixazululo, sithumele iseva yethu yokuqala ye-PHP/Go ekuqaleni kuka-2018. Futhi ngokushesha sathola umphumela omangalisayo! Asizange nje silahle ngokuphelele iphutha le-502, kodwa sakwazi nokunciphisa inani lamaseva ngokuphindwe kabili kwezintathu, silondoloza imali eningi kanye nekhanda elibuhlungu konjiniyela nabaphathi bemikhiqizo.

Maphakathi nonyaka, sase sifeze isixazululo sethu, sasishicilela ku-GitHub ngaphansi kwelayisensi ye-MIT, futhi sayibiza ngokuthi. I-RoadRunner, ngaleyo ndlela igcizelela ijubane layo elimangalisayo nokusebenza kahle.

I-RoadRunner Ingasithuthukisa Kanjani Isitaki Sakho Sokuthuthukiswa

Isicelo I-RoadRunner wasivumela ukuthi sisebenzise i-Middleware net/http ohlangothini lwe-Go ukuze senze ukuqinisekiswa kwe-JWT ngaphambi kokuthi isicelo sishaye i-PHP, kanye nokusingatha ama-WebSockets kanye nokuhlanganisa isimo somhlaba wonke ku-Prometheus.

Ngenxa ye-RPC eyakhelwe ngaphakathi, ungakwazi ukuvula i-API yanoma imaphi amalabhulali we-Go we-PHP ngaphandle kokubhala izengezo zokugoqa. Okubaluleke nakakhulu, i-RoadRunner ingasetshenziselwa ukukhipha amaseva amasha angewona awe-HTTP. Izibonelo zifaka izibambi zokuqalisa ku-PHP I-AWS Lambda, ukudala amabhasi omugqa athembekile ngisho nokwengeza gRPC ezicelweni zethu.

Ngosizo lwemiphakathi ye-PHP ne-Go, sikhulise ukuzinza kwesixazululo, sandisa ukusebenza kohlelo lokusebenza izikhathi ezingafika kwezingu-40 kwezinye izivivinyo, amathuluzi okulungisa amaphutha athuthukisiwe, ukuhlanganiswa okusetshenziswe ngohlaka lwe-Symfony, nokusekelwa okwengeziwe kwe-HTTPS, i-HTTP/ 2, ama-plugin, kanye ne-PSR-17.

isiphetho

Abanye abantu basabanjwe umbono ophelelwe yisikhathi we-PHP njengolimi olunensayo, olunzima kuphela oluhle lokubhala ama-plugin we-WordPress. Laba bantu bangase bathi i-PHP inomkhawulo: lapho uhlelo lokusebenza luba likhulu ngokwanele, kufanele ukhethe ulimi "oluvuthiwe" futhi ubhale kabusha isisekelo sekhodi esiye sanqwabelana eminyakeni eminingi.

Kukho konke lokhu ngifuna ukuphendula: cabanga futhi. Sikholelwa ukuthi nguwe kuphela ongabeka noma yimiphi imikhawulo ye-PHP. Ungachitha impilo yakho yonke ugxuma usuka kolunye ulimi uye kolunye, uzama ukuthola okufanelana kahle nezidingo zakho, noma ungaqala ukucabanga ngezilimi njengamathuluzi. Ukushiyeka okucatshangwayo kolimi olufana ne-PHP kungase kube izizathu zempumelelo yayo. Futhi uma uyihlanganisa nolunye ulimi olufana ne-Go, ungakha imikhiqizo enamandla kakhulu kunalapho ubukhawulelwe olimini olulodwa kuphela.

Njengoba sisebenze nenhlanganisela ye-Go ne-PHP, singasho ukuthi siyabathanda. Asihlele ukudela esinye ngenxa yokunye, kodwa kunalokho sibheka izindlela zokuthola inani elithe xaxa kulesi sitaki esikabili.

I-UPD: Siyamamukela umdali we-RoadRunner kanye nombhali ohlanganyela naye we-athikili yoqobo - I-Lachesis

Source: www.habr.com

Engeza amazwana