Molo, Habr! Sisebenza eBadoo
Kwiminyaka yakutshanje, i-PHP yenze inkqubela phambili enkulu: umqokeleli wenkunkuma uye waphucula, izinga lokuzinza liye landa - namhlanje ungabhala iidaemon kunye nemibhalo ehlala ixesha elide kwi-PHP ngaphandle kweengxaki. Oku kwavumela i-Spiral Scout ukuba iqhube phambili: I-RoadRunner, ngokungafani ne-PHP-FPM, ayicoci imemori phakathi kwezicelo, enika izibonelelo zokusebenza ezongezelelweyo (nangona le ndlela idibanisa inkqubo yophuhliso). Ngoku senza umfuniselo ngesi sixhobo, kodwa asinazo iziphumo zokwabelana okwangoku. Ukwenza kube mnandi ukubalinda, Sipapasha inguqulelo yesaziso se-RoadRunner esivela kwi-Spiral Scout.
Indlela esuka kwinqaku isondele kuthi: xa sisombulula iingxaki zethu, sihlala sisebenzisa indibaniselwano ye-PHP kunye ne-Go, sifumana izibonelelo zazo zombini iilwimi kwaye singanikezeli enye ngenxa yolunye.
Kule minyaka ilishumi idlulileyo, senze izicelo zeenkampani ezikolu luhlu
Phantse kwangoko, safumanisa ukuba iGo isivumele ukuba sakhe usetyenziso olukhulu oluya kuthi ga kwi-40x yokusebenza ngokukhawuleza. Ngayo, sakwazi ukwandisa iimveliso ezikhoyo ezibhalwe kwi-PHP, siziphucule ngokudibanisa iingenelo zeelwimi zombini.
Siza kukuxelela indlela indibaniselwano ye-Go kunye ne-PHP inceda ngayo ekusombululeni iingxaki zophuhliso lokwenyani kunye nendlela ethe yajika yaba sisixhobo sethu esinokususa ezinye zeengxaki ezinxulumene nazo.
Imeko yakho yemihla ngemihla yoPhuhliso lwe-PHP
Phambi kokuba sithethe ngendlela onokuyisebenzisa ngayo i-Go ukuvuselela imodeli efayo ye-PHP, makhe sijonge kwindawo yakho esemgangathweni yophuhliso lwe-PHP.
Kwiimeko ezininzi, usebenzisa usetyenziso usebenzisa indibaniselwano ye-nginx iseva yewebhu kunye neseva ye-PHP-FPM. Eyokuqala ikhonza iifayile ezimileyo kwaye iphinda iqondise izicelo ezithile kwi-PHP-FPM, kwaye i-PHP-FPM ngokwayo yenza ikhowudi ye-PHP. Mhlawumbi usebenzisa indibaniselwano engaziwayo kakhulu esuka kwi-Apache kunye ne-mod_php. Kodwa nangona isebenza ngokwahlukileyo kancinci, imigaqo iyafana.
Makhe sijonge indlela i-PHP-FPM eyenza ngayo ikhowudi yesicelo. Xa isicelo sifika, i-PHP-FPM iqalisa inkqubo ye-PHP yomntwana ize igqithise iinkcukacha zesicelo njengenxalenye yemeko yayo (_GET, _POST, _SERVER, njl.).
Umbuso awukwazi ukutshintsha ngexesha lokwenziwa kweskripthi se-PHP, ngoko kukho indlela enye kuphela yokufumana isethi entsha yedatha yokufaka: ngokucima imemori yenkqubo kunye nokuphinda uyiqalise.
Le modeli yokuphumeza ineenzuzo ezininzi. Awunakukhathazeka kakhulu malunga nokusetyenziswa kwememori, zonke iinkqubo zizodwa ngokupheleleyo, kwaye ukuba enye yazo iyafa, iya kuphinda yenziwe ngokuzenzekelayo ngaphandle kokuchaphazela ezinye iinkqubo. Kodwa le ndlela ikwanazo nezingeloncedo ezivelayo xa uzama ukukala usetyenziso.
Ukungalungi kunye nokungasebenzi kakuhle kwendawo ye-PHP eqhelekileyo
Ukuba ubandakanyeka kuphuhliso lobuchwephesha kwi-PHP, ngoko uyazi ukuba ungaqala phi iprojekthi entsha - ngokukhetha isakhelo. Iqulathe amathala eencwadi okutofwa kokuxhomekeka, iiORM, iinguqulelo kunye neetemplates. Kwaye kunjalo, lonke igalelo lomsebenzisi linokufakwa ngokulula kwinto enye (Symfony/HttpFoundation okanye PSR-7). Izakhelo zipholile!
Kodwa yonke into inexabiso layo. Kuso nasiphi na isakhelo somgangatho weshishini, ukwenza isicelo esilula somsebenzisi okanye ukufikelela kwisiseko sedatha, kuya kufuneka ulayishe ubuncinci iifayile ezininzi, udale iiklasi ezininzi kwaye ucazulule ulungelelwaniso oluninzi. Kodwa eyona nto imbi kakhulu kukuba emva kokugqiba umsebenzi ngamnye uya kufuna ukuseta kwakhona yonke into kwaye uqale kwakhona: yonke ikhowudi osanda kuyiqala iba yinto engenamsebenzi, ngoncedo lwayo awusayi kuphinda usebenze esinye isicelo. Xelela oku nawuphi na umdwelisi obhala ngalo naluphi na olunye ulwimi, kwaye uya kubona ukudideka ebusweni bakhe.
Iinjineli ze-PHP zichithe iminyaka zikhangela iindlela zokusombulula le ngxaki, zisebenzisa ubuchule obukrelekrele bokulayisha ubuvila, ii-microframeworks, iilayibrari eziphuculweyo, ii-cache, njl. (Inqaku lomguquli: le ngxaki iya kusonjululwa ngokuyinxenye ngokufika kwe
Ngaba i-PHP ene-Go ingasinda ngaphezu kwesicelo esinye?
Kunokwenzeka ukuba ubhale izikripthi ze-PHP eziza kuhlala ixesha elide kunemizuzu embalwa (ukuya kwiiyure okanye iintsuku): umzekelo, imisebenzi ye-cron, i-CSV parsers, i-queue busters. Bonke basebenza ngokwemeko efanayo: bafumana umsebenzi, bawenze, kwaye balinde olandelayo. Ikhowudi ihlala kwimemori, igcina i-millisecond exabisekileyo njengoko kufuneka amanyathelo amaninzi ongezelelweyo ukulayisha isakhelo kunye nesicelo.
Kodwa ukuphuhlisa izikripthi ezihlala ixesha elide akulula kangako. Nayiphi na impazamo ibulala ngokupheleleyo inkqubo, ukufumanisa ukuvuza kwememori kuyakuphambana, kwaye awusakwazi ukusebenzisa i-F5 debugging.
Imeko iphuculwe ngokukhululwa kwe-PHP 7: umqokeleli wenkunkuma othembekileyo uvele, kube lula ukuphatha iimpazamo, kwaye ukwandiswa kwe-kernel ngoku kukhuselwe ekuvuzeni. Enyanisweni, iinjineli zisafuneka zilumke ngememori kwaye ziqaphele imiba yelizwe kwikhowudi (ngaba kukho ulwimi apho singenakukhathazeka ngezi zinto?). Kwaye okwangoku, kwi-PHP 7, silindelwe yimimangaliso embalwa.
Ngaba kuyenzeka ukuba uthathe imodeli yokusebenza ngemibhalo ye-PHP ehlala ixesha elide, uyilungelelanise kwimisebenzi engabalulekanga njengokuqhubekekisa izicelo ze-HTTP, kwaye ngokwenjenjalo uphelise isidingo sokulayisha yonke into ukusuka ekuqaleni kwisicelo ngasinye?
Ukusombulula le ngxaki, sidinga kuqala ukuphumeza usetyenziso lweseva olunokwamkela izicelo zeHTTP kwaye sizithumele nganye nganye kumsebenzi wePHP ngaphandle kokuyibulala ngalo lonke ixesha.
Sasisazi ukuba sinokubhala umncedisi wewebhu kwi-PHP ecocekileyo (PHP-PM) okanye usebenzisa i-C extension (Swoole). Kwaye nangona indlela nganye inokufaneleka kwayo, zombini iinketho azizange zisifanele - besifuna enye into. Sasifuna okungaphezulu nje komncedisi wewebhu - sasinethemba lokufumana isisombululo esinokusisindisa kwiingxaki ezinxulumene "nokuqala nzima" kwi-PHP, enokuthi kwangaxeshanye ilungiswe ngokulula kwaye yandiswe kwizicelo ezithile. Oko kukuthi, besidinga iseva yesicelo.
Ungaya kunceda ngale nto? Besiyazi ukuba inokwenzeka kuba ulwimi luqokelela izicelo zibe ngamaqela amabini; liqonga elinqamlezileyo; isebenzisa eyakhe, intle kakhulu, imodeli yokusetyenzwa ngokunxuseneyo (concurrency) kunye nethala leencwadi lokusebenza ngeHTTP; kwaye okokugqibela, amawaka ethala leencwadi elivulelekileyo kunye nodibaniso luya kufumaneka kuthi.
Ubunzima bokudibanisa iilwimi ezimbini zokucwangcisa
Inyathelo lokuqala yaba kukufumanisa indlela izicelo ezimbini okanye ngaphezulu ezaziya kunxibelelana ngayo.
Umzekelo, ukusebenzisa
Sagqiba ekubeni sisebenzise enye, indlela eqhelekileyo, indlela: ukwakha intsebenziswano phakathi kweenkqubo ngokusebenzisa iisokethi/imibhobho. Le ndlela ibonakalise ukuthembeka kwayo kumashumi eminyaka adlulileyo kwaye iphuculwe kakuhle kwinqanaba lenkqubo yokusebenza.
Ukuqala, senze iprotocol elula yokutshintshiselana ngedatha phakathi kweenkqubo kunye nokuphatha iimpazamo zothumelo. Ngeyona ndlela ilula, olu hlobo lweprotocol lufana ne
Kwicala le-PHP sisebenzise
Kwakubonakala ngathi iprotocol enye ayanelanga- ke songeze ukukwazi ukufowuna
Ukusasaza imisebenzi kubasebenzi abaninzi be-PHP
Emva kokuphumeza inkqubo yokunxibelelana, saqala ukucinga ngendlela yokudlulisela imisebenzi kwiinkqubo zePHP. Xa umsebenzi ufika, umncedisi wesicelo kufuneka akhethe umsebenzi okhululekileyo ukuwugqiba. Ukuba umsebenzi/inkqubo iphela ngempazamo okanye βuyafa,β siyayisusa kwaye senze entsha ukuyibuyisela endaweni yayo. Kwaye ukuba umsebenzi / inkqubo igqityiwe ngempumelelo, siyibuyisela kwiqela labasebenzi elikhoyo ukwenza imisebenzi.
Ukugcina ichibi labasebenzi abasebenzayo sasisebenzisa
Ngenxa yoko, sifumene iseva esebenzayo ye-PHP ekwaziyo ukuqhubekekisa naziphi na izicelo ezinikezelwe kwifomu yokubini.
Ukuze isicelo sethu sisebenze njengomncedisi wewebhu, kwafuneka sikhethe umgangatho othembekileyo we-PHP ukumela naziphi na izicelo ze-HTTP ezingenayo. Kwimeko yethu thina nje
Ngenxa yokuba i-PSR-7 ithathwa njengengaguqukiyo (abanye bangatsho ngokobuchwepheshe ayisiyiyo), abaphuhlisi kufuneka babhale izicelo ezingasiphathiyo isicelo njengeziko lehlabathi. Oku kuhambelana kakuhle nombono weenkqubo ze-PHP yexesha elide. Ukuphunyezwa kwethu kokugqibela, ebekungekabizwa ngegama, kujongeka ngolu hlobo:
Ukwazisa i-RoadRunner - umncedisi wesicelo ophezulu we-PHP
Umsebenzi wethu wokuqala wovavanyo yayiyi-API backend, eyayisoloko ifumana ukugqabhuka kwezicelo okungalindelekanga (kaninzi kaninzi kunesiqhelo). Nangona i-nginx yayanele kwiimeko ezininzi, sasihlala sidibana neempazamo ze-502 ngenxa yokuba asikwazanga ukulinganisa inkqubo ngokukhawuleza ngokwaneleyo ukunyuka okulindelwe komthwalo.
Ukutshintsha esi sisombululo, sisebenzise iseva yethu yokuqala ye-PHP/Go ekuqaleni kuka-2018. Kwaye ngoko nangoko safumana umphumo ongakholelekiyo! Asizange nje silahle ngokupheleleyo impazamo ye-502, kodwa sakwazi ukunciphisa inani lamaseva ngamabini kwisithathu, ukugcina imali eninzi kunye neentloko zeenjineli kunye nabaphathi beemveliso.
Phakathi enyakeni, sasigqibelele isisombululo sethu, sayipapasha kwi-GitHub phantsi kwelayisenisi ye-MIT, kwaye siyibiza.
Indlela i-RoadRunner inokuphucula ngayo isitaki sakho soPhuhliso
Isicelo
Enkosi kwi-RPC eyakhelwe-ngaphakathi, unokuvula i-API yayo nayiphi na amathala eencwadi e-PHP ngaphandle kokubhala ii-wrappers ezongeziweyo. Okubaluleke ngakumbi, i-RoadRunner ingasetyenziselwa ukuhambisa iiseva ezintsha ezingezizo ze-HTTP. Imizekelo ibandakanya ukuqaliswa kweziphatho kwi-PHP
Ngoncedo lwe-PHP kunye noluntu lwe-Go, siye sandisa ukuzinza kwesisombululo, ukwandisa ukusebenza kwesicelo ukuya kumaxesha e-40 kwezinye iimvavanyo, izixhobo eziphuculweyo zokuphucula izixhobo, ukudibanisa ukuphunyezwa kunye nesakhelo se-Symfony, kunye nenkxaso eyongeziweyo ye-HTTPS, i-HTTP / 2, iiplagi, kunye ne-PSR-17.
isiphelo
Abanye abantu basabanjwe kumbono wakudala we-PHP njengolwimi olucothayo, olunzima kuphela olulungele ukubhala iiplagi ze-WordPress. Aba bantu banokuthi i-PHP inomda: xa isicelo sikhula ngokwaneleyo, kufuneka ukhethe ulwimi "olukhulileyo" kwaye ubhale kwakhona isiseko sekhowudi eqokelelwe kwiminyaka emininzi.
Kuzo zonke ezi zinto ndifuna ukuphendula: cinga kwakhona. Sikholelwa ukuba nguwe kuphela onokumisela naziphi na izithintelo ze-PHP. Unokuchitha ubomi bakho bonke utsiba ukusuka kolunye ulwimi uye kolunye, uzama ukufumana umdlalo ofanelekileyo kwiimfuno zakho, okanye ungaqala ukucinga ngeelwimi njengezixhobo. Iintsilelo ezibonwayo zolwimi olufana ne-PHP isenokuba zizizathu zempumelelo yayo. Kwaye ukuba uyayidibanisa nolunye ulwimi olunje ngeGo, unokwenza iimveliso ezinamandla ngakumbi kunokuba ubunolwimi olunye kuphela.
Emva kokusebenza kunye nendibaniselwano ye-Go kunye ne-PHP, sinokuthi siyabathanda. Asicwangcisi ukuncama enye ngenxa yomnye, kodwa endaweni yoko sijonge iindlela zokufumana ixabiso elingakumbi kolu luhlu lubini.
UPD: Siyakwamkela umyili we-RoadRunner kunye nombhali-mbhali wenqaku lokuqala -
umthombo: www.habr.com