RoadRunner: PHP dia tsy natao ho faty, na Golang ho famonjena

RoadRunner: PHP dia tsy natao ho faty, na Golang ho famonjena

Salama, Habr! Mavitrika ao amin'ny Badoo izahay miasa amin'ny fampisehoana PHP, satria manana rafitra somary lehibe amin'ity fiteny ity isika ary ny olana momba ny fampisehoana dia resaka fitahirizana vola. Folo taona mahery lasa izay, namorona PHP-FPM izahay ho an'ity, izay tamin'ny voalohany dia andiana patch ho an'ny PHP, ary taty aoriana dia lasa ampahany tamin'ny fizarana ofisialy.

Tao anatin'ny taona vitsivitsy izay, ny PHP dia nanao fandrosoana lehibe: nihatsara ny mpanangom-pako, nitombo ny haavon'ny fitoniana - androany ianao dia afaka manoratra daemon sy script efa ela amin'ny PHP tsy misy olana. Izany dia nahafahan'ny Spiral Scout handeha lavitra kokoa: RoadRunner, tsy toy ny PHP-FPM, dia tsy manadio fahatsiarovana eo anelanelan'ny fangatahana, izay manome tombony fanampiny amin'ny fampisehoana (na dia manasarotra ny fizotran'ny fampandrosoana aza ity fomba ity). Eo am-panandramana ity fitaovana ity izahay amin'izao fotoana izao, saingy tsy mbola misy valiny azo zaraina. Mba hahafinaritra kokoa ny miandry azy ireo, Mamoaka fandikana ny fanambarana RoadRunner avy amin'ny Spiral Scout izahay.

Ny fomba fiasa avy amin'ny lahatsoratra dia akaiky anay: rehefa mamaha ny olanay izahay dia matetika mampiasa PHP sy Go, mahazo tombony amin'ny fiteny roa ary tsy mahafoy ny iray ho an'ny iray hafa.

Ankafizo!

Tao anatin'ny folo taona lasa, namorona fangatahana ho an'ny orinasa avy amin'ny lisitra izahay Fortune 500, ary ho an'ny orinasa manana mpihaino tsy mihoatra ny 500. Nandritra izany fotoana izany, ny injeniera dia namolavola ny backend indrindra amin'ny PHP. Saingy roa taona lasa izay, nisy fiantraikany lehibe tsy teo amin'ny fahombiazan'ny vokatray ihany, fa teo amin'ny scalability ihany koa - nampiditra an'i Golang (Go) izahay tamin'ny fitambaran'ny teknolojia.

Saika avy hatrany dia hitanay fa namela anay hanangana rindranasa lehibe kokoa miaraka amin'ny fampisehoana haingana 40x ny Go. Miaraka amin'izany, afaka nanitatra ny vokatra efa misy voasoratra amin'ny PHP izahay, nanatsara azy ireo tamin'ny fampifangaroana ny tombony amin'ny fiteny roa.

Holazainay aminao ny fomba ahafahan'ny fitambaran'ny Go sy PHP manampy amin'ny famahana ny olan'ny fampandrosoana tena izy ary ny fomba nivadika ho fitaovana ho antsika izay afaka manafoana ny olana sasany mifandray amin'ny PHP maty modely.

Ny tontolo iainanao PHP fampandrosoana isan'andro

Alohan'ny hiresahantsika momba ny fomba ahafahanao mampiasa Mandehana hamelona indray ny maodelin'ny PHP efa maty, andao hojerentsika ny tontolo manodidina ny fampandrosoana PHP mahazatra anao.

Amin'ny ankabeazan'ny toe-javatra, mampiasa ny fampiarahana ny mpizara tranonkala nginx sy ny mpizara PHP-FPM ianao. Ny voalohany dia manolotra rakitra static ary mamerina ny fangatahana manokana amin'ny PHP-FPM, ary ny PHP-FPM mihitsy no manatanteraka ny code PHP. Angamba ianao mampiasa fitambarana tsy dia malaza amin'ny Apache sy mod_php. Saingy na dia hafa kely aza ny fiasany dia mitovy ny fitsipika.

Andeha hojerentsika ny fomba fampiharana PHP-FPM kaody fampiharana. Rehefa tonga ny fangatahana, ny PHP-FPM dia manomboka ny fizotran'ny PHP zaza ary mandefa ny antsipirian'ny fangatahana ho ampahany amin'ny fanjakana (_GET, _POST, _SERVER, sns.).

Tsy afaka miova ny fanjakana mandritra ny fanatanterahana ny script PHP, noho izany dia tsy misy afa-tsy fomba iray ahazoana angon-drakitra fampidirana vaovao: amin'ny alàlan'ny fanadiovana ny fitadidiana ny fizotrany sy ny famerenana azy indray.

Ity modely famonoana ity dia manana tombony maro. Tsy mila manahy be momba ny fanjifana fitadidiana ianao, mitoka-monina tanteraka ny dingana rehetra, ary raha maty ny iray amin'izy ireo, dia haverina ho azy izany tsy misy fiantraikany amin'ny dingana sisa. Saingy ity fomba fiasa ity koa dia manana fatiantoka izay miseho rehefa manandrana manitsy ny fampiharana.

Ny tsy fahampiana sy ny tsy fahombiazan'ny tontolo PHP mahazatra

Raha mirotsaka amin'ny fampandrosoana matihanina amin'ny PHP ianao, dia fantatrao hoe aiza no hanombohana tetikasa vaovao - amin'ny alàlan'ny fisafidianana rafitra. Izy io dia ahitana tranomboky ho an'ny tsindrona fiankinan-doha, ORM, fandikana ary modely. Ary mazava ho azy, ny fampidirana mpampiasa rehetra dia azo apetraka amin'ny zavatra iray (Symfony/HttpFoundation na PSR-7). Tsara ny frameworks!

Misy vidiny anefa ny zava-drehetra. Ao amin'ny rafitry ny orinasa rehetra, mba hikarakarana ny fangatahan'ny mpampiasa tsotra na hidirana amin'ny angon-drakitra, dia tsy maintsy mameno rakitra am-polony farafahakeliny ianao, mamorona kilasy maro ary manara-maso maromaro. Fa ny ratsy indrindra dia rehefa vita ny asa tsirairay dia mila mamerina ny zava-drehetra ianao ary manomboka indray: lasa tsy misy ilana azy ny code rehetra vao natombokao, miaraka amin'ny fanampiany dia tsy hanao fangatahana hafa intsony ianao. Lazao amin'ny programmer izay manoratra amin'ny fiteny hafa izany, dia ho hitanao fa very hevitra eo amin'ny tarehiny.

Ny injeniera PHP dia nandany taona maro nitadiavana fomba hamahana ity olana ity, amin'ny fampiasana teknika mavesatra malaina, microframeworks, tranomboky optimized, caches, sns. Saingy amin'ny farany, mbola mila mamerina ny fampiharana manontolo ianao ary manomboka miverimberina. (Fanamarihan'ny mpandika teny: ho voavaha amin'ny ampahany ity olana ity amin'ny fahatongavan'ny preload amin'ny PHP 7.4)

Afaka miaina fangatahana mihoatra ny iray ve ny PHP miaraka amin'i Go?

Azo atao ny manoratra script PHP izay haharitra mihoatra ny minitra vitsivitsy (hatramin'ny ora na andro): ohatra, asa cron, parser CSV, busters filaharana. Miasa amin'ny sehatra iray ihany izy rehetra: maka asa iray, manatanteraka izany ary miandry ny manaraka. Ny kaody dia mipetraka ao anaty fitadidiana, mitahiry milliseconds sarobidy satria maro ny dingana fanampiny ilaina mba hampidirana ny rafitra sy ny fampiharana.

Tsy mora anefa ny manamboatra script maharitra ela. Ny hadisoana rehetra dia mamono tanteraka ny dingana, ny fizahana ny fahatapahan'ny fahatsiarovana dia mahatonga anao ho adala, ary tsy afaka mampiasa F5 debugging intsony ianao.

Nihatsara ny toe-draharaha tamin'ny famoahana ny PHP 7: niseho ny mpanangom-pako azo antoka, nanjary mora kokoa ny nikarakara ny fahadisoana, ary voaaro amin'ny fivoahana ny fanitarana kernel. Marina fa mbola mila mitandrina amin'ny fitadidiana ny injeniera ary mahafantatra ny olan'ny fanjakana ao amin'ny fehezan-dalàna (misy fiteny tsy mila manahy momba ireo zavatra ireo ve?). Na izany aza, ao amin'ny PHP 7, vitsy kokoa ny tsy ampoizina miandry antsika.

Azo atao ve ny maka ny maodely miasa miaraka amin'ny script PHP maharitra ela, mampifanaraka izany amin'ny asa tsy dia misy dikany kokoa toy ny fanodinana ny fangatahana HTTP, ary amin'izany dia manafoana ny filàna hampiditra ny zava-drehetra hatrany am-boalohany ho an'ny fangatahana tsirairay?

Mba hamahana ity olana ity dia mila nampihatra fampiharana mpizara izay afaka manaiky ny fangatahana HTTP izahay ary mandefa azy tsirairay amin'ny mpiasa PHP nefa tsy mamono azy isaky ny mandeha.

Fantatray fa afaka manoratra mpizara tranonkala amin'ny PHP madio (PHP-PM) na mampiasa ny fanitarana C (Swoole). Ary na dia samy manana ny fahamendrehany aza ny fomba tsirairay, ny safidy roa dia tsy mifanaraka aminay - mila zavatra bebe kokoa izahay. Nila mihoatra noho ny mpizara tranonkala ihany izahay - nanantena izahay fa hahazo vahaolana izay afaka hamonjy anay amin'ny olana mifandray amin'ny “fanombohana mafy” ao amin'ny PHP, izay azo amboarina mora foana sy hitarina amin'ny fampiharana manokana. Izany hoe mila mpizara fampiharana izahay.

Afaka manampy amin'izany ve i Go? Fantatray fa mety izany satria ny fiteny dia manangona fampiharana ho binary tokana; cross-platform izy io; mampiasa ny maodely fanodinana azy manokana, tena kanto, mifanitsy (concurrency) sy tranomboky hiasa amin'ny HTTP; ary farany, trano famakiam-boky misokatra sy fampidirana an'arivony no ho azonay.

Fahasarotan'ny fampifangaroana fiteny roa fandaharana

Ny dingana voalohany dia ny famaritana ny fomba hifandraisan'ny fampiharana roa na maromaro.

Ohatra, mampiasa tranomboky mahafinaritra Alex Palaestras dia afaka nampihatra fizarana fahatsiarovana eo amin'ny PHP sy ny fizotran'ny Go (mitovy amin'ny mod_php amin'ny Apache). Saingy ity tranomboky ity dia manana endri-javatra izay mametra ny fampiasana azy amin'ny famahana ny olantsika.

Nanapa-kevitra ny hampiasa fomba hafa mahazatra kokoa izahay: hanorina fifandraisana eo amin'ny dingana amin'ny alàlan'ny socket/pipelines. Io fomba fiasa io dia nanaporofo ny maha-azo itokiana azy nandritra ny folo taona lasa ary efa nohatsaraina tsara teo amin'ny sehatry ny rafitra fiasana.

Hanombohana dia namorona protocole binary tsotra izahay ho an'ny fifanakalozana angona eo anelanelan'ny dingana sy ny fitantanana ny lesoka fampitana. Amin'ny endriny tsotra indrindra, ity karazana protocol ity dia mitovy amin'ny netstring с lohapejy fonosana habe voafaritra (amin'ny tranga misy antsika dia 17 bytes), izay misy fampahalalana momba ny karazana fonosana, ny habeny ary ny saron-tava mimari-droa mba hanamarinana ny fahamarinan'ny angona.

Eo amin'ny lafiny PHP ampiasainay fonosana fonosana, ary eo amin'ny lafiny Go - tranomboky encoding/binary.

Toa tsy ampy ny protocol iray - ka nampianay ny fahafahana miantso Go services net/rpc mivantana avy amin'ny PHP. Nanampy anay betsaka tamin'ny fampandrosoana izany taty aoriana, satria afaka nampiditra mora foana ny tranomboky Go amin'ny fampiharana PHP. Ny vokatr'ity asa ity dia azo jerena, ohatra, amin'ny vokatra open source hafa Goridge.

Mizara asa amin'ny mpiasa PHP marobe

Taorian'ny fampiharana ny mekanika fifaneraserana dia nanomboka nieritreritra ny fomba hamindrana asa amin'ny fomba mahomby indrindra amin'ny fizotran'ny PHP izahay. Rehefa tonga ny asa iray, ny mpizara fampiharana dia tsy maintsy mifidy mpiasa maimaim-poana hamita izany. Raha misy mpiasa/process iray mifarana amin'ny fahadisoana na "maty", dia esorinay izany ary mamorona vaovao hanolo azy. Ary raha nahavita soa aman-tsara ny mpiasa/fizotry ny asa, dia averinay any amin'ny dobo mpiasa afaka manao asa.

RoadRunner: PHP dia tsy natao ho faty, na Golang ho famonjena

Mba hitahiry dobo mpiasa mavitrika no nampiasainay fantsona buffered, mba hanesorana ireo mpiasa "maty" tsy nampoizina tao amin'ny dobo, dia nampiana rafitra iray hanaraha-maso ny fahadisoana sy ny toetry ny mpiasa.

Vokatr'izany dia nahazo mpizara PHP miasa izahay afaka manodina izay fangatahana aseho amin'ny endrika binary.

Mba hahafahan'ny fampiharana ataonay miasa amin'ny maha-mpizara tranonkala dia tsy maintsy nisafidy fenitra PHP azo itokisana izahay mba hanehoana ny fangatahana HTTP miditra. Amin'ny tranga misy antsika ihany hanova net/http fangatahana avy amin'ny Go to format PSR-7mba hifanaraka amin'ny ankamaroan'ny rafitra PHP misy ankehitriny.

Satria ny PSR-7 dia heverina ho tsy azo ovaina (milaza ny sasany amin'ny lafiny ara-teknika fa tsy izany), ny mpamorona dia tsy maintsy manoratra fampiharana izay tsy mandray ny fangatahana ho toy ny fikambanana manerantany. Mifanaraka tsara amin'ny foto-kevitry ny fizotran'ny PHP maharitra izany. Ny fampiharana farany nataontsika, izay tsy mbola nomena anarana, dia toy izao:

RoadRunner: PHP dia tsy natao ho faty, na Golang ho famonjena

Fampidirana RoadRunner - mpizara fampiharana PHP mahomby

Ny andrana voalohany nataonay dia ny API backend, izay nisedra fangatahana tsy nampoizina tsindraindray (matetika kokoa noho ny mahazatra). Na dia ampy aza ny nginx amin'ny ankamaroan'ny toe-javatra, dia sendra tsy tapaka ny fahadisoana 502 satria tsy afaka nandanjalanja haingana ny rafitra izahay noho ny fitomboan'ny entana.

Mba hanoloana ity vahaolana ity dia nametraka ny mpizara fampiharana PHP/Go voalohany izahay tamin'ny fiandohan'ny taona 2018. Ary avy hatrany dia nahazo vokatra tsy mampino izahay! Tsy vitan'ny hoe nanala tanteraka ny fahadisoana 502 izahay, fa afaka nampihena roa ampahatelony ny isan'ny mpizara, nitahiry vola be sy aretin'andoha ho an'ny injeniera sy ny mpitantana ny vokatra.

Tamin'ny tapaky ny taona dia nahavita ny vahaolanay izahay, namoaka izany tao amin'ny GitHub tamin'ny alàlan'ny fahazoan-dàlana MIT, ary niantso azy io. RoadRunner, ka manantitrantitra ny hafainganam-pandehany sy ny fahombiazany tsy mampino.

Ahoana no ahafahan'ny RoadRunner manatsara ny stack fampandrosoana anao

fampiharana RoadRunner namela anay hampiasa Middleware net/http eo amin'ny lafiny Go hanaovana fanamarinana JWT alohan'ny hidiran'ny fangatahana amin'ny PHP, ary koa amin'ny fitantanana ny WebSockets sy ny fitambaran'ny fanjakana manerantany ao amin'ny Prometheus.

Noho ny RPC naorina, azonao atao ny manokatra ny API amin'ny tranomboky Go rehetra ho an'ny PHP nefa tsy manoratra fonosana fanitarana. Ny zava-dehibe kokoa, ny RoadRunner dia azo ampiasaina amin'ny fametrahana mpizara vaovao tsy HTTP. Ohatra amin'izany ny fandefasana mpandrindra amin'ny PHP Zanak'i Lambda, mamorona mpangalatra filaharana azo antoka ary manampy mihitsy aza gRPC amin'ny fangatahanay.

Miaraka amin'ny fanampian'ny vondrom-piarahamonina PHP sy Go, dia nampitombo ny fahamarinan'ny vahaolana izahay, nampitombo ny fampandehanana ny fampiharana hatramin'ny in-40 amin'ny fitsapana sasany, nanatsara ny fitaovana fanamafisam-peo, nampidirina tamin'ny rafitra Symfony, ary nanampy fanohanana ny HTTPS, HTTP/ 2, plugins, ary PSR-17.

famaranana

Ny olona sasany dia mbola tratra amin'ny fomba fijery efa lany andro amin'ny PHP ho fiteny miadana sy saro-takarina tsara amin'ny fanoratana plugins WordPress. Mety hilaza mihitsy aza ireo olona ireo fa misy fetrany ny PHP: rehefa mihabetsaka ny fampiharana dia tsy maintsy misafidy fiteny “matotra” kokoa ianao ary manoratra indray ny fototry ny kaody nanangona nandritra ny taona maro.

Izany rehetra izany no tiako hovaliana: eritrereto indray. Mino izahay fa ianao ihany no afaka mametraka fameperana ho an'ny PHP. Azonao atao ny mandany ny fiainanao manontolo mitsambikina avy amin'ny fiteny iray mankany amin'ny iray hafa, manandrana mitady ny mifanentana tsara amin'ny filanao, na afaka manomboka mieritreritra ny fiteny ho fitaovana ianao. Ny lesoka hita amin'ny fiteny toa an'ny PHP dia mety ho antony mahatonga ny fahombiazany. Ary raha manambatra azy amin'ny fiteny hafa toa an'i Go ianao dia afaka mamorona vokatra matanjaka kokoa noho ny hoe voafetra amin'ny fiteny iray fotsiny ianao.

Rehefa niara-niasa tamin'ny Go sy PHP, dia afaka milaza isika fa tia azy ireo. Tsy mikasa ny hanao sorona ny iray ho an'ny hafa izahay, fa mitady fomba hahazoana lanja bebe kokoa amin'ity andiany roa ity.

UPD: Miarahaba ny mpamorona ny RoadRunner sy mpiara-manoratra ny lahatsoratra tany am-boalohany - Lachesis

Source: www.habr.com

Add a comment