{"id":35722,"date":"2019-10-31T22:05:58","date_gmt":"2019-10-31T19:05:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/roadrunner-php-ne-sozdan-chtoby-umirat-ili-golang-speshit-na-pomoshh\/"},"modified":"2019-10-31T22:05:58","modified_gmt":"2019-10-31T19:05:58","slug":"roadrunner-php-ne-sozdan-chtoby-umirat-ili-golang-speshit-na-pomoshh","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/roadrunner-php-ne-sozdan-chtoby-umirat-ili-golang-speshit-na-pomoshh","title":{"rendered":"RoadRunner: PHP nuk \u00ebsht\u00eb krijuar p\u00ebr t'u vdekur, ose Golang nxit n\u00eb ndihm\u00eb","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"RoadRunner: PHP nuk \u00ebsht\u00eb krijuar p\u00ebr t&#039;u vdekur, ose Golang nxit n\u00eb ndihm\u00eb\" src=\"\/wp-content\/uploads\/2019\/06\/d2a69318cf25caa8fb49efedb333d7f8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00ebrsh\u00ebndetje, Habr! Ne n\u00eb Badoo jemi aktivisht <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/badoo\/blog\/430722\/\">duke punuar mbi performanc\u00ebn e PHP<\/a><\/noindex>, pasi kemi nj\u00eb sistem t\u00eb mjaftuesh\u00ebm t\u00eb madh n\u00eb k\u00ebt\u00eb gjuh\u00eb dhe \u00e7\u00ebshtja e performanc\u00ebs \u00ebsht\u00eb nj\u00eb \u00e7\u00ebshtje kursimi parash. M\u00eb shum\u00eb se nj\u00eb dekad\u00eb m\u00eb par\u00eb, ne krijuam PHP-FPM, i cili fillimisht ishte nj\u00eb grup patch-e p\u00ebr PHP, dhe m\u00eb von\u00eb u b\u00eb pjes\u00eb e shp\u00ebrndarjes zyrtare.<\/p>\n<p>Gjat\u00eb viteve t\u00eb fundit, PHP ka p\u00ebrparuar shum\u00eb: mekanizmi i grumbullimit t\u00eb mbetjes ka p\u00ebrmir\u00ebsuar, stabiliteti \u00ebsht\u00eb rritur \u2014 sot n\u00eb PHP \u00ebsht\u00eb e mundur t\u00eb shkruani demon\u00eb dhe skript\u00eb me jet\u00ebgjat\u00ebsi pa probleme t\u00eb m\u00ebdha. Kjo i ka lejuar Spiral Scout t\u00eb shkoj\u00eb m\u00eb tej: RoadRunner, ndryshe nga PHP-FPM, nuk pastron memorie midis k\u00ebrkesave, gj\u00eb q\u00eb ofron nj\u00eb fitim t\u00eb shtuar n\u00eb performanc\u00eb (ndon\u00ebse kjo qasje e nd\u00ebrlikon procesin e zhvillimit). Ne tani po eksperimentojm\u00eb me k\u00ebt\u00eb mjet, por ende nuk kemi rezultati q\u00eb mund t\u00eb ndajm\u00eb. Q\u00eb t\u00eb presim me m\u00eb shum\u00eb g\u00ebzim, <b>po publikojm\u00eb p\u00ebrkthimin e njoftimit t\u00eb RoadRunner nga Spiral Scout.<\/b><\/p>\n<p>Naiveja nga artikulli \u00ebsht\u00eb e njohur p\u00ebr ne: kur zgjidhim problemet tona, shpesh p\u00ebrdorim kombinimin PHP dhe Go, duke p\u00ebrfituar nga t\u00eb dyja gjuh\u00ebt pa hequr dor\u00eb nga nj\u00ebra p\u00ebr shkak t\u00eb tjetr\u00ebs.<\/p>\n<p>Shijoni!<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Gjat\u00eb dhjet\u00eb viteve t\u00eb fundit, ne krijuam aplikacione p\u00ebr kompani nga lista <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Fortune_Global_500\">Fortune 500<\/a><\/noindex>, dhe p\u00ebr biznese me nj\u00eb audienc\u00eb prej m\u00eb pak se 500 p\u00ebrdoruesve. Gjat\u00eb k\u00ebsaj periudhe, inxhinier\u00ebt tan\u00eb zhvilluan predominant backend n\u00eb PHP. Por dy vjet m\u00eb par\u00eb, di\u00e7ka ndikoi ndjesh\u00ebm jo vet\u00ebm n\u00eb performanc\u00ebn e produkteve tona, por edhe n\u00eb shkall\u00ebzueshm\u00ebrin\u00eb e tyre \u2014 ne prezantuam Golang (Go) n\u00eb stackun ton\u00eb t\u00eb teknologjis\u00eb.<\/p>\n<p>Pothuajse menj\u00ebher\u00eb zbuluam se Go na lejon t\u00eb krijojm\u00eb aplikacione m\u00eb t\u00eb m\u00ebdha me nj\u00eb rritje t\u00eb performanc\u00ebs deri n\u00eb 40 her\u00eb. Me t\u00eb, arrit\u00ebm t\u00eb zgjeronim produktet ekzistuese t\u00eb shkruara n\u00eb PHP, duke i p\u00ebrmir\u00ebsuar ato fal\u00eb kombinimit t\u00eb t\u00eb dyja gjuh\u00ebve.<\/p>\n<p>Ne do t\u00eb tregojm\u00eb se si kombinimi Go dhe PHP ndihmon n\u00eb zgjidhjen e problemeve reale t\u00eb zhvillimit dhe si u b\u00eb nj\u00eb mjet q\u00eb na ndihmon t\u00eb heqim dor\u00eb nga disa nga problemet e lidhura me <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/post\/179399\/\">modelin e 'vdekjes' s\u00eb PHP<\/a><\/noindex>.<\/p>\n<h3>Mjedisi juaj p\u00ebr zhvillim PHP \u00e7do dit\u00eb<\/h3>\n<p>\nPara se treguar se si, me ndihm\u00ebn e Go, mund ta ringjallni modelin e \"vdekjes\" s\u00eb PHP-s\u00eb, le t\u00eb shqyrtojm\u00eb ambientin tuaj standard t\u00eb zhvillimit PHP.<\/p>\n<p>N\u00eb shumic\u00ebn e rasteve, ju e hapni aplikacionin me nj\u00eb kombinim t\u00eb serverit web nginx dhe serverit PHP-FPM. I pari sh\u00ebrben skedar\u00ebt statik\u00eb dhe redirekton k\u00ebrkesat specifike n\u00eb PHP-FPM, nd\u00ebrsa PHP-FPM ekzekuton kodin PHP. Ndoshta po p\u00ebrdorni nj\u00eb kombinim m\u00eb pak t\u00eb njohur t\u00eb Apache dhe mod_php. Por, ndon\u00ebse funksionon pak ndryshe, parimet jan\u00eb t\u00eb nj\u00ebjta.<\/p>\n<p>Le t\u00eb shqyrtojm\u00eb se si PHP-FPM ekzekuton kodin e aplikacionit. Kur vjen nj\u00eb k\u00ebrkes\u00eb, PHP-FPM inicializon nj\u00eb proces t\u00eb dyt\u00eb PHP, dhe detajet e k\u00ebrkes\u00ebs i kalon si pjes\u00eb e gjendjes s\u00eb tij (_GET, _POST, _SERVER etj.). <\/p>\n<p>Gjendja nuk mund t\u00eb ndryshoj\u00eb gjat\u00eb ekzekutimit t\u00eb skenarit PHP, prandaj nj\u00eb grup t\u00eb ri t\u00eb t\u00eb dh\u00ebnave hyr\u00ebse mund t\u00eb merret vet\u00ebm n\u00eb nj\u00eb m\u00ebnyr\u00eb: duke pastruar memorien e procesit dhe duke e inicializuar at\u00eb p\u00ebrs\u00ebri.<\/p>\n<p>Ky model ka shum\u00eb p\u00ebrfitime. Nuk duhet t\u00eb shqet\u00ebsoheni shum\u00eb p\u00ebr konsumin e memories, t\u00eb gjitha proceset jan\u00eb t\u00eb izoluara plot\u00ebsisht, dhe n\u00ebse nj\u00ebri prej tyre \"vdes\", ai do t\u00eb rikrijohet automatikisht pa prekur proceset e tjera. Por ky qasje ka edhe disavantazhe, q\u00eb shfaqen kur p\u00ebrpiqeni t\u00eb shkall\u00ebzoni aplikacionin.<\/p>\n<h3>Disavantazhet dhe efikasiteti i ul\u00ebt i nj\u00eb ambienti t\u00eb zakonsh\u00ebm PHP<\/h3>\n<p>\nN\u00ebse jeni t\u00eb angazhuar n\u00eb zhvillimin profesional me PHP, e dini nga duhet t\u00eb filloni nj\u00eb projekt t\u00eb ri \u2014 nga zgjedhja e nj\u00eb framework-u. Ai p\u00ebrb\u00ebn biblioteka p\u00ebr shtimin e var\u00ebsive, ORM, p\u00ebrkthime dhe shabllone. Dhe, sigurisht, t\u00eb gjitha t\u00eb dh\u00ebnat e hyrjes nga p\u00ebrdoruesit mund t\u00eb vendosen leht\u00ebsisht n\u00eb nj\u00eb objekt (Symfony\/HttpFoundation ose PSR-7). Framework-et jan\u00eb t\u00eb shk\u00eblqyera!<\/p>\n<p>Por \u00e7do gj\u00eb ka nj\u00eb \u00e7mim. N\u00eb \u00e7do framework t\u00eb nivelit enterprise, p\u00ebr t\u00eb procesuar nj\u00eb k\u00ebrkes\u00eb t\u00eb thjesht\u00eb t\u00eb p\u00ebrdoruesit ose nj\u00eb thirrje n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave, do t\u00eb duhet t\u00eb ngarkoni t\u00eb pakt\u00ebn dhjet\u00ebra skedar\u00eb, t\u00eb krijoni klasa t\u00eb shumta dhe t\u00eb analizoni disa konfigurime. Por m\u00eb e keqja \u00ebsht\u00eb se pas kryerjes s\u00eb \u00e7do detyre, do t\u00eb duhet t\u00eb rinisni nga fillimi: t\u00eb gjith\u00eb kodin e sapo iniciuar b\u00ebhet i padobish\u00ebm, me t\u00eb cilin nuk mund t\u00eb p\u00ebrpunoni nj\u00eb tjet\u00ebr k\u00ebrkes\u00eb. Thoni k\u00ebt\u00eb kushdo programuesi q\u00eb shkruan n\u00eb ndonj\u00eb gjuh\u00eb tjet\u00ebr, dhe do t\u00eb shihni nj\u00eb shprehje konfuzioni n\u00eb fytyr\u00ebn e tij.<\/p>\n<p>Inxhinier\u00ebt PHP kan\u00eb k\u00ebrkuar p\u00ebr vite m\u00ebnyra p\u00ebr t\u00eb zgjidhur k\u00ebt\u00eb problem, duke p\u00ebrdorur metodologji t\u00eb menduara p\u00ebr 'ngarkimin e lenient', mikrofremework\u00eb, biblioteka t\u00eb optimizuara, cache, etj. Por n\u00eb fund, p\u00ebrs\u00ebri duhet t\u00eb riachoni t\u00eb gjith\u00eb aplikacionin dhe t\u00eb filloni nga fillimi, p\u00ebrs\u00ebri dhe p\u00ebrs\u00ebri.<i> (Sh\u00ebnim i p\u00ebrkthyesit: pjes\u00ebrisht ky problem do t\u00eb zgjidhet me daljen e <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.php.net\/rfc\/preload\">preload<\/a><\/noindex> n\u00eb PHP 7.4)<\/p>\n<h3>A mund t\u00eb p\u00ebrballoj\u00eb PHP m\u00eb shum\u00eb se nj\u00eb k\u00ebrkes\u00eb me ndihm\u00ebn e Go?<\/h3>\n<p>\n<\/i>Mund t\u00eb shkruhen skripte PHP q\u00eb jetojn\u00eb m\u00eb gjat\u00eb se disa minuta (deri n\u00eb or\u00eb ose dit\u00eb): p\u00ebr shembull, detyra cron, parserat CSV, dekompozuesit e radh\u00ebs. T\u00eb gjitha ato funksionojn\u00eb sipas nj\u00eb skenari t\u00eb nj\u00ebjt\u00eb: nxjerrin nj\u00eb detyr\u00eb, e kryejn\u00eb at\u00eb, presin p\u00ebr t\u00eb ardhmen. Kodi q\u00ebndron vazhdimisht n\u00eb memorie, duke kursyer milisekonda t\u00eb \u00e7muara, pasi ngarkimi i korniz\u00ebs dhe aplikacionit k\u00ebrkon t\u00eb kryhen shum\u00eb veprime t\u00eb tjera shtes\u00eb.<\/p>\n<p>Por nuk \u00ebsht\u00eb aq e leht\u00eb t\u00eb zhvillosh skripte me jet\u00ebgjat\u00ebsi. \u00c7do gabim e vret plot\u00ebsisht procesin, diagnostikimi i rrjedhjeve t\u00eb memories e \u00e7on n\u00eb \u00e7menduri, dhe nuk mund t\u00eb p\u00ebrdoret m\u00eb debugging me F5.<\/p>\n<p>Situata u p\u00ebrmir\u00ebsua me daljen e PHP 7: nj\u00eb mbledh\u00ebs i besuesh\u00ebm i mbetjeve u shfaq, u b\u00eb m\u00eb e leht\u00eb p\u00ebr t\u00eb p\u00ebrpunuar gabimet, dhe zgjerimet e b\u00ebrtham\u00ebs tani jan\u00eb t\u00eb mbrojtura nga rrjedhjet. Megjithat\u00eb, inxhinier\u00ebt duhet ende t\u00eb jen\u00eb t\u00eb kujdessh\u00ebm me memorin\u00eb dhe t\u00eb kujtojn\u00eb problemet e gjendjes n\u00eb kod (a ka ndonj\u00eb gjuh\u00eb ku nuk duhen kushtuar v\u00ebmendje k\u00ebtyre gj\u00ebrave?). Sidoqoft\u00eb, n\u00eb PHP 7 na presin m\u00eb pak papritur.<\/p>\n<p>A mund t\u00eb p\u00ebrdorim nj\u00eb model pune me skripte PHP t\u00eb q\u00ebndrueshme, ta adaptojm\u00eb at\u00eb p\u00ebr detyra m\u00eb t\u00eb thjeshta si p\u00ebrpunimi i k\u00ebrkesave HTTP dhe k\u00ebshtu t\u00eb shmangim ngarkimin e gjith\u00e7kaje nga fillimi p\u00ebr secil\u00ebn k\u00ebrkes\u00eb?<\/p>\n<p>P\u00ebr t\u00eb zgjidhur k\u00ebt\u00eb problem, s\u00eb pari duhej t\u00eb realizonim nj\u00eb aplikacion serveri q\u00eb do t\u00eb ishte n\u00eb gjendje t\u00eb pranoj\u00eb k\u00ebrkesa HTTP dhe t'i drejtoj\u00eb ato nj\u00eb nga nj\u00eb te PHP-uperi, pa e vrar\u00eb at\u00eb \u00e7do her\u00eb.<\/p>\n<p>E dinim q\u00eb mund t\u00eb shkruajm\u00eb nj\u00eb server web n\u00eb PHP t\u00eb past\u00ebr (PHP-PM) ose duke p\u00ebrdorur nj\u00eb ekstenzion C (Swoole). Dhe edhe pse \u00e7do metod\u00eb ka p\u00ebrfitimet e veta, asnj\u00ebra prej tyre nuk na k\u00ebnaqte \u2014 d\u00ebshironim di\u00e7ka m\u00eb shum\u00eb. Na duhej jo thjesht nj\u00eb server web \u2014 ne planifikonim t\u00eb merrnim nj\u00eb zgjidhje q\u00eb mund t\u00eb na \u00e7lironte nga problemet e \"fillimit t\u00eb r\u00ebnd\u00eb\" n\u00eb PHP, e cila gjithashtu mund t\u00eb adaptohej dhe shtrinte leht\u00ebsisht p\u00ebr aplikacione t\u00eb ve\u00e7anta. K\u00ebshtu, na duhej nj\u00eb server aplikacionesh.<\/p>\n<p>A mund t\u00eb na ndihmoj\u00eb Go n\u00eb k\u00ebt\u00eb? E dinim se mundet, sepse ky gjuh\u00eb kompilon aplikacione n\u00eb skedar\u00eb binar\u00eb t\u00eb vetme; \u00ebsht\u00eb shum\u00ebplatform\u00eb; p\u00ebrdor nj\u00eb model shum\u00eb t\u00eb elegancsh\u00ebm p\u00ebr p\u00ebrpunimin paralele (concurrency) dhe nj\u00eb bibliotek\u00eb p\u00ebr pun\u00eb me HTTP; dhe, p\u00ebrfundimisht, do t\u00eb kemi n\u00eb dispozicion mij\u00ebra biblioteka open-source dhe integrime.<\/p>\n<h3>V\u00ebshtir\u00ebsit\u00eb e p\u00ebrzierjes s\u00eb dy gjuh\u00ebve t\u00eb programimit<\/h3>\n<p>\nS\u00eb pari, duhej t\u00eb p\u00ebrcaktohej se si dy ose m\u00eb shum\u00eb aplikacione do t\u00eb komunikonin me nj\u00ebri-tjetrin.<\/p>\n<p>P\u00ebr shembull, p\u00ebrmes<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deuill\/go-php\"> bibliotek\u00ebs s\u00eb shk\u00eblqyer<\/a><\/noindex> t\u00eb Alek\u00ebs Palaeastrasit, ishte e mundur t\u00eb realizohej ndarja e memories midis proceseve PHP dhe Go (ngjash\u00ebm me mod_php n\u00eb Apache). Por kjo bibliotek\u00eb ka ve\u00e7ori q\u00eb i kufizojn\u00eb p\u00ebr p\u00ebrdorim n\u00eb zgjidhjen e detyr\u00ebs son\u00eb.<\/p>\n<p>Ne vendos\u00ebm t\u00eb p\u00ebrdorim nj\u00eb qasje tjet\u00ebr, m\u00eb t\u00eb zakonshme: t\u00eb nd\u00ebrtojm\u00eb nd\u00ebrveprimin midis proceseve p\u00ebrmes soketeve\/pipes. Kjo qasje ka treguar besueshm\u00ebrin\u00eb e saj dhe \u00ebsht\u00eb optimizuar mir\u00eb n\u00eb nivelin e sistemit operativ gjat\u00eb dekadave t\u00eb fundit.<\/p>\n<p>N\u00eb fillim, ne krijuam nj\u00eb protokoll binar t\u00eb thjesht\u00eb p\u00ebr shk\u00ebmbimin e t\u00eb dh\u00ebnave midis proceseve dhe trajtimin e gabimeve t\u00eb transmetimit. N\u00eb form\u00ebn e tij m\u00eb t\u00eb thjesht\u00eb, protokolli i k\u00ebtij tipi \u00ebsht\u00eb i ngjash\u00ebm me <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Netstring\">netstring<\/a><\/noindex> me<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spiral\/goridge\/blob\/master\/prefix.go\"> nj\u00eb krye pakete me madh\u00ebsi fikse<\/a><\/noindex> (n\u00eb rastin ton\u00eb 17 byte), i cili p\u00ebrmban informacion mbi llojin e paket\u00ebs, madh\u00ebsin\u00eb e saj dhe nj\u00eb mask\u00eb binare p\u00ebr verifikimin e integritetit t\u00eb t\u00eb dh\u00ebnave.<\/p>\n<p>N\u00eb an\u00ebn e PHP, ne p\u00ebrdor\u00ebm <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spiral\/goridge\/blob\/master\/php-src\/SocketRelay.php#L247\">funkcioni pack<\/a><\/noindex>, nd\u00ebrsa n\u00eb an\u00ebn e Go \u2014 bibliotek\u00ebn<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spiral\/goridge\/blob\/master\/prefix.go\"> encoding\/binary<\/a><\/noindex>.<\/p>\n<p>Na duket se nj\u00eb protokoll nuk ishte i mjaftuesh\u00ebm \u2014 dhe ne shtuam mund\u00ebsin\u00eb p\u00ebr t\u00eb thirrur<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spiral\/goridge\/blob\/master\/codec.go\"> sh\u00ebrbimet Go net\/rpc direkt nga PHP<\/a><\/noindex>. M\u00eb von\u00eb, kjo na ndihmoi shum\u00eb n\u00eb zhvillim, pasi mund t\u00eb integrojm\u00eb leht\u00ebsisht bibliotekat Go n\u00eb aplikacionet PHP. Rezultati i k\u00ebsaj pune mund t\u00eb shihet, p\u00ebr shembull, n\u00eb produktin ton\u00eb tjet\u00ebr open-source<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spiral\/goridge\"> Goridge<\/a><\/noindex>.<\/p>\n<h3>Shp\u00ebrndarja e detyrave nd\u00ebrmjet disa PHP-pun\u00ebtor\u00ebve<\/h3>\n<p>\nPas realizimit t\u00eb mekanizmit t\u00eb nd\u00ebrveprimit, filluam t\u00eb mendojm\u00eb se si t\u00eb p\u00ebrcjellim detyrat n\u00eb proceset PHP n\u00eb m\u00ebnyr\u00ebn m\u00eb t\u00eb efektshme. Kur vjen nj\u00eb detyr\u00eb, serveri i aplikacioneve duhet t\u00eb zgjedh\u00eb nj\u00eb pun\u00ebtor t\u00eb lir\u00eb p\u00ebr ta ekzekutuar at\u00eb. N\u00ebse pun\u00ebtori\/procesi p\u00ebrfundon pun\u00ebn me gabim ose 'vdes', ne e eliminojm\u00eb at\u00eb dhe krijojm\u00eb nj\u00eb t\u00eb ri n\u00eb vendin e tij. Nd\u00ebrsa, n\u00ebse pun\u00ebtori\/procesi e p\u00ebrfundon me sukses, e kthejm\u00eb at\u00eb n\u00eb grupin e pun\u00ebtor\u00ebve t\u00eb disponuesh\u00ebm p\u00ebr t\u00eb kryer detyra.<\/p>\n<p><img decoding=\"async\" alt=\"RoadRunner: PHP nuk \u00ebsht\u00eb krijuar p\u00ebr t&#039;u vdekur, ose Golang nxit n\u00eb ndihm\u00eb\" src=\"\/wp-content\/uploads\/2019\/06\/fe94ef304e0327247973ddd15723285a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00ebr t\u00eb ruajtur grupin e pun\u00ebtor\u00ebve aktiv\u00eb, ne p\u00ebrdor\u00ebm<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spiral\/roadrunner\/blob\/master\/static_pool.go\"> nj\u00eb kanal t\u00eb buferizuar<\/a><\/noindex>, p\u00ebr t\u00eb hequr nga grupi pun\u00ebtor\u00ebt q\u00eb 'vdesin' papritur, shtuam nj\u00eb mekaniz\u00ebm p\u00ebr monitorimin e gabimeve dhe gjendjeve t\u00eb pun\u00ebtor\u00ebve.<\/p>\n<p>Si rezultat, mor\u00ebm nj\u00eb server PHP funksional, i aft\u00eb p\u00ebr t\u00eb trajtuar \u00e7do k\u00ebrkes\u00eb t\u00eb paraqitur n\u00eb format binar.<\/p>\n<p>P\u00ebr t\u00eb b\u00ebr\u00eb q\u00eb aplikacioni yn\u00eb t\u00eb fillonte t\u00eb punonte si nj\u00eb server web, duhej t\u00eb zgjidhnim nj\u00eb standard t\u00eb besuesh\u00ebm PHP p\u00ebr p\u00ebrfaq\u00ebsimin e \u00e7do k\u00ebrkese HTTP t\u00eb ardhur. N\u00eb rastin ton\u00eb, ne thjesht <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spiral\/roadrunner\/blob\/master\/service\/http\/request.go\">kemi transformuar<\/a><\/noindex> k\u00ebrkes\u00ebn net\/http nga Go n\u00eb formatin<noindex><a rel=\"nofollow\" href=\"https:\/\/www.php-fig.org\/psr\/psr-7\/meta\/\"> PSR-7<\/a><\/noindex>, p\u00ebr ta b\u00ebr\u00eb at\u00eb t\u00eb pajtuesh\u00ebm me shumic\u00ebn e kuadrove PHP t\u00eb disponueshme sot.<\/p>\n<p>Duke PSR-7 konsiderohet i pandryshuesh\u00ebm (disa do t\u00eb thoshin q\u00eb teknikisht nuk \u00ebsht\u00eb k\u00ebshtu), zhvilluesit duhet t\u00eb shkruajn\u00eb aplikacione q\u00eb n\u00eb parim nuk e trajtojn\u00eb k\u00ebrkes\u00ebn si nj\u00eb entitet global. Kjo p\u00ebrshtatet perfekt me konceptin e proceseve PHP me jet\u00ebgjat\u00ebsi t\u00eb gjat\u00eb. Implementimi yn\u00eb p\u00ebrfundimtar, q\u00eb ende nuk ka marr\u00eb em\u00ebr, dukej k\u00ebshtu:<\/p>\n<p><img decoding=\"async\" alt=\"RoadRunner: PHP nuk \u00ebsht\u00eb krijuar p\u00ebr t&#039;u vdekur, ose Golang nxit n\u00eb ndihm\u00eb\" src=\"\/wp-content\/uploads\/2019\/06\/e3a3a1af1925dfc60b7f8fd256d1ae11.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Paraqesim RoadRunner \u2014<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spiral\/roadrunner\"> nj\u00eb server PHP me performanc\u00eb t\u00eb lart\u00eb<\/a><\/noindex><\/h3>\n<p>\nDetyra jon\u00eb e par\u00eb testuese ishte nj\u00eb API-backend, mbi t\u00eb cilin p\u00ebrkoh\u00ebsisht shfaqeshin shp\u00ebrthime k\u00ebrkesh q\u00eb ishin t\u00eb papritur (shum\u00eb m\u00eb shpesh se zakonisht). Megjith\u00ebse n\u00eb shumic\u00ebn e rasteve mund\u00ebsit\u00eb e nginx ishin t\u00eb mjaftueshme, ne vazhdimisht p\u00ebrballeshim me gabimin 502, sepse nuk mund t\u00eb balancojm\u00eb sistemin mjaft shpejt sipas rritjes s\u00eb pritur t\u00eb ngarkes\u00ebs.<\/p>\n<p>P\u00ebr t\u00eb z\u00ebvend\u00ebsuar k\u00ebt\u00eb zgjidhje, n\u00eb fillim t\u00eb vitit 2018 nxorr\u00ebm serverin ton\u00eb t\u00eb par\u00eb t\u00eb PHP\/Go p\u00ebr aplikacione. Dhe menj\u00ebher\u00eb mor\u00ebm nj\u00eb efekt t\u00eb jasht\u00ebzakonsh\u00ebm! Ne jo vet\u00ebm q\u00eb eliminuam plot\u00ebsisht gabimin 502, por gjithashtu arrit\u00ebm t\u00eb reduktojm\u00eb numrin e server\u00ebve me dy t\u00eb tretat, duke kursyer nj\u00eb sasi t\u00eb madhe parash dhe tableta p\u00ebr dhimbjen e kok\u00ebs p\u00ebr inxhinier\u00ebt dhe menaxher\u00ebt e produkteve.<\/p>\n<p>N\u00eb mes t\u00eb vitit p\u00ebrmir\u00ebsuam zgjidhjen ton\u00eb, e publikuan at\u00eb n\u00eb GitHub n\u00ebn licenc\u00ebn MIT dhe e quajt\u00ebm <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spiral\/roadrunner\">RoadRunner<\/a><\/noindex>, duke theksuar k\u00ebshtu shpejt\u00ebsin\u00eb e tij t\u00eb jasht\u00ebzakonshme dhe efikasitetin.<\/p>\n<h3>Si mundet RoadRunner t\u00eb p\u00ebrmir\u00ebsoj\u00eb stakun tuaj t\u00eb zhvillimit<\/h3>\n<p>\nAplikimi<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spiral\/roadrunner\"> RoadRunner<\/a><\/noindex> na lejoi t\u00eb p\u00ebrdorim Middleware net\/http n\u00eb an\u00ebn e Go p\u00ebr t\u00eb kryer verifikimin JWT p\u00ebrpara se k\u00ebrkesa t\u00eb arrij\u00eb n\u00eb PHP, si dhe p\u00ebr t\u00eb trajtuar WebSockets dhe p\u00ebr t\u00eb agreguar globalisht gjendjet n\u00eb Prometheus. <\/p>\n<p>Me RPC t\u00eb integruar, \u00ebsht\u00eb e mundur t\u00eb hapim API-t\u00eb e \u00e7do biblioteke Go p\u00ebr PHP pa shkruar zgjerime-n\u00ebp\u00ebrmjet. M\u00eb e r\u00ebnd\u00ebsishmja, me RoadRunner mund t\u00eb vendosim server\u00eb t\u00eb rinj, t\u00eb cil\u00ebt dallohet nga HTTP. Disa shembuj t\u00eb mundsh\u00ebm jan\u00eb nisja e trajtuesve n\u00eb PHP<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spiral\/roadrunner\/wiki\/AWS-Lambda\"> AWS Lambda<\/a><\/noindex>, krijimi i parser\u00ebve t\u00eb besuesh\u00ebm t\u00eb radh\u00ebve dhe madje edhe shtimi<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spiral\/php-grpc\"> gRPC<\/a><\/noindex> n\u00eb aplikacionet tona.<\/p>\n<p>Me bashk\u00ebsit\u00eb PHP dhe Go ne p\u00ebrmir\u00ebsuam stabilitetin e zgjidhjes, n\u00eb disa teste rrit\u00ebm performanc\u00ebn e aplikacioneve deri n\u00eb 40 her\u00eb, p\u00ebrmir\u00ebsuam mjetet e debugut, realizuam integrimin me framework-un Symfony dhe shtuam mb\u00ebshtetje p\u00ebr HTTPS, HTTP\/2, plugin dhe PSR-17.<\/p>\n<h3>P\u00ebrfundimi<\/h3>\n<p>\nDisa akoma jan\u00eb t\u00eb bllokuar n\u00eb nj\u00eb perceptim t\u00eb vjet\u00ebruar t\u00eb PHP si nj\u00eb gjuh\u00eb t\u00eb ngadalt\u00eb dhe t\u00eb r\u00ebnd\u00eb, t\u00eb p\u00ebrshtatshme vet\u00ebm p\u00ebr t\u00eb shkruar plug-ins p\u00ebr WordPress. K\u00ebta njer\u00ebz madje mund t\u00eb thon\u00eb se PHP ka nj\u00eb kufizim t\u00eb till\u00eb: kur aplikacioni b\u00ebhet mjaft i madh, duhet t\u00eb zgjedh\u00ebsh nj\u00eb gjuh\u00eb m\u00eb \"t\u00eb pjekur\" dhe t\u00eb riprogramosh baz\u00ebn e kodit t\u00eb grumbulluar p\u00ebr vite me radh\u00eb.<\/p>\n<p>P\u00ebr t\u00eb gjitha k\u00ebto, d\u00ebshirojm\u00eb t\u00eb p\u00ebrgjigjemi: mendoni p\u00ebrs\u00ebri. Ne besojm\u00eb se vet\u00ebm ju vet\u00eb vendosni disa kufizime p\u00ebr PHP. Mund t\u00eb kaloni gjith\u00eb jet\u00ebn tuaj duke kaluar nga nj\u00eb gjuh\u00eb n\u00eb tjetr\u00ebn, duke u munduar t\u00eb gjeni kombinimin ideal p\u00ebr nevojat tuaja, ose mund t\u00eb filloni ta shihni gjuh\u00ebt si mjete. Pseudoshkak\u00ebt e nj\u00eb gjuhe si PHP n\u00eb t\u00eb v\u00ebrtet\u00eb mund t\u00eb jen\u00eb arsyet p\u00ebr suksesin e saj. Dhe n\u00ebse e kombinoni at\u00eb me nj\u00eb gjuh\u00eb tjet\u00ebr si Go, do t\u00eb krijoni produkte shum\u00eb m\u00eb t\u00eb fuqishme se sa n\u00ebse do t\u00eb kufizoheshit n\u00eb p\u00ebrdorimin e nj\u00eb gjuhe t\u00eb vetme.<\/p>\n<p>Pas pun\u00ebs me kombinimin Go dhe PHP, mund t\u00eb afirmojm\u00eb se i kemi dashur. Nuk planifikojm\u00eb t\u00eb sakrifikojm\u00eb nj\u00eb p\u00ebr shkak t\u00eb tjetrit \u2014 p\u00ebrkundrazi, do t\u00eb k\u00ebrkojm\u00eb m\u00ebnyra p\u00ebr t\u00eb nxjerr\u00eb edhe m\u00eb shum\u00eb p\u00ebrfitime nga ky dyfishim i stack-ut.<\/p>\n<p><i>UPD: mir\u00ebseardhje krijuesit t\u00eb RoadRunner dhe bashkautorit t\u00eb artikullit origjinal \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/users\/lachezis\/\" class=\"user_link\">Lachezis<\/a><\/noindex><\/i><br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/badoo\/blog\/434272\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u044b \u0432 Badoo \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e PHP, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430 \u044d\u0442\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0438 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2014 \u044d\u0442\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u0434\u0435\u043d\u0435\u0433. \u0411\u043e\u043b\u0435\u0435 \u0434\u0435\u0441\u044f\u0442\u0438 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e PHP-FPM, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u0442\u0447\u0435\u0439 \u0434\u043b\u044f PHP, \u0430 \u043f\u043e\u0437\u0436\u0435 \u0432\u043e\u0448\u0451\u043b \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0443. \u0417\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b PHP \u0441\u0438\u043b\u044c\u043d\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26762,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35722","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u044b \u0432 Badoo \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e PHP, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430 \u044d\u0442\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0438 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2014 \u044d\u0442\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u0434\u0435\u043d\u0435\u0433. \u0411\u043e\u043b\u0435\u0435 \u0434\u0435\u0441\u044f\u0442\u0438 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e PHP-FPM, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u0442\u0447\u0435\u0439 \u0434\u043b\u044f PHP, \u0430 \u043f\u043e\u0437\u0436\u0435 \u0432\u043e\u0448\u0451\u043b \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0443. \u0417\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b PHP \u0441\u0438\u043b\u044c\u043d\u043e\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/roadrunner-php-ne-sozdan-chtoby-umirat-ili-golang-speshit-na-pomoshh\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47RoadRunner: PHP \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d, \u0447\u0442\u043e\u0431\u044b \u0443\u043c\u0438\u0440\u0430\u0442\u044c, \u0438\u043b\u0438 Golang \u0441\u043f\u0435\u0448\u0438\u0442 \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u044b \u0432 Badoo \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e PHP, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430 \u044d\u0442\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0438 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2014 \u044d\u0442\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u0434\u0435\u043d\u0435\u0433. \u0411\u043e\u043b\u0435\u0435 \u0434\u0435\u0441\u044f\u0442\u0438 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e PHP-FPM, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u0442\u0447\u0435\u0439 \u0434\u043b\u044f PHP, \u0430 \u043f\u043e\u0437\u0436\u0435 \u0432\u043e\u0448\u0451\u043b \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0443. \u0417\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b PHP \u0441\u0438\u043b\u044c\u043d\u043e\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/roadrunner-php-ne-sozdan-chtoby-umirat-ili-golang-speshit-na-pomoshh\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:05:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:05:58+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47RoadRunner: PHP nuk \u00ebsht\u00eb krijuar p\u00ebr t\u00eb vdekur, ose Golang po vjen n\u00eb ndihm\u00eb | ProHoster","description":"P\u00ebrsh\u00ebndetje, Habr! Ne n\u00eb Badoo po punojm\u00eb aktivisht p\u00ebr performanc\u00ebn e PHP, pasi kemi nj\u00eb sistem t\u00eb madhe n\u00eb k\u00ebt\u00eb gjuh\u00eb dhe \u00e7\u00ebshtja e performanc\u00ebs \u00ebsht\u00eb \u00e7\u00ebshtje kursimi parash. M\u00eb shum\u00eb se dhjet\u00eb vjet m\u00eb par\u00eb krijuam p\u00ebr k\u00ebt\u00eb PHP-FPM, i cili fillimisht ishte nj\u00eb set patch-esh p\u00ebr PHP, dhe m\u00eb von\u00eb u p\u00ebrfshi n\u00eb shp\u00ebrndarjen zyrtare. N\u00eb vitet e fundit, PHP ka pasur nj\u00eb zhvillim t\u00eb madh","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/roadrunner-php-ne-sozdan-chtoby-umirat-ili-golang-speshit-na-pomoshh","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47RoadRunner: PHP \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d, \u0447\u0442\u043e\u0431\u044b \u0443\u043c\u0438\u0440\u0430\u0442\u044c, \u0438\u043b\u0438 Golang \u0441\u043f\u0435\u0448\u0438\u0442 \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u044b \u0432 Badoo \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e PHP, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430 \u044d\u0442\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0438 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2014 \u044d\u0442\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u0434\u0435\u043d\u0435\u0433. \u0411\u043e\u043b\u0435\u0435 \u0434\u0435\u0441\u044f\u0442\u0438 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e PHP-FPM, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u0442\u0447\u0435\u0439 \u0434\u043b\u044f PHP, \u0430 \u043f\u043e\u0437\u0436\u0435 \u0432\u043e\u0448\u0451\u043b \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0443. \u0417\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b PHP \u0441\u0438\u043b\u044c\u043d\u043e","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/roadrunner-php-ne-sozdan-chtoby-umirat-ili-golang-speshit-na-pomoshh","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:05:58+00:00","article:modified_time":"2019-10-31T19:05:58+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35722","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 00:30:57","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:57:45","updated":"2026-01-22 00:30:57","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/35722","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=35722"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/35722\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/26762"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=35722"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=35722"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=35722"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}