ãããããã«ïŒ Badooã§æŽ»åããŠããŸã
è¿å¹ŽãPHP ã¯å€§ããªé²æ©ãéããŸãããã¬ããŒãž ã³ã¬ã¯ã¿ãŒãæ¹è¯ãããå®å®æ§ã®ã¬ãã«ãåäžããŸãããçŸåšã§ã¯ãPHP ã§ããŒã¢ã³ãåç¶æéã®é·ãã¹ã¯ãªãããåé¡ãªãäœæã§ããããã«ãªããŸããã ããã«ãããSpiral Scout ã¯ããã«åé²ããããšãã§ããŸãããRoadRunner ã¯ãPHP-FPM ãšã¯ç°ãªãããªã¯ãšã¹ãéã§ã¡ã¢ãªãã¯ãªãŒã³ã¢ããããªãããããããªãããã©ãŒãã³ã¹ã®åäžãåŸãããŸã (ãã ãããã®ã¢ãããŒãã¯éçºããã»ã¹ãè€éã«ããŸã)ã çŸåšãã®ããŒã«ãå®éšäžã§ããããŸã å ±æã§ããçµæã¯ãããŸããã åŸ ã€æéããã£ãšæ¥œããããããã«ã Spiral Scout ããã® RoadRunner çºè¡šã®ç¿»èš³ãå ¬éããŸãã
ãã®èšäºã®ã¢ãããŒãã¯ç§ãã¡ã«è¿ããã®ã§ããåé¡ã解決ãããšããç§ãã¡ã¯å€ãã®å ŽåãPHP ãš Go ã䜿çšããäž¡æ¹ã®èšèªã®å©ç¹ã掻çšããäžæ¹ãæŸæ£ããŠä»æ¹ãåªå ããããšã¯ãããŸããã
éå» XNUMX 幎éãç§ãã¡ã¯ãªã¹ãããäŒæ¥åãã®ã¢ããªã±ãŒã·ã§ã³ãäœæããŠããŸããã
ã»ãšãã©ããã«ãGo ã䜿çšãããšããã©ãŒãã³ã¹ãæ倧 40 ååäžãã倧èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããããšãããããŸããã ããã«ãããPHP ã§æžãããæ¢åã®è£œåãæ¡åŒµããäž¡æ¹ã®èšèªã®å©ç¹ãçµã¿åãããŠæ¹è¯ããããšãã§ããŸããã
Go ãš PHP ã®çµã¿åãããå®éã®éçºäžã®åé¡ã解決ããã®ã«ã©ã®ããã«åœ¹ç«ã€ãããŸã Go ãš PHP ãç§ãã¡ã«ãšã£ãŠã©ã®ããã«ããŠãGo ãš PHP ã«é¢é£ããåé¡ã®äžéšã解決ã§ããããŒã«ã«ãªã£ããã説æããŸãã
æ¥åžžã® PHP éçºç°å¢
Go ã䜿çšã㊠PHP ã®æ¶æ» ã¢ãã«ã埩掻ãããæ¹æ³ã«ã€ããŠèª¬æããåã«ãããã©ã«ãã® PHP éçºç°å¢ãèŠãŠã¿ãŸãããã
ã»ãšãã©ã®å Žåãnginx Web ãµãŒããŒãš PHP-FPM ãµãŒããŒãçµã¿åãããŠäœ¿çšââããŠã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã åè ã¯éçãã¡ã€ã«ãæäŸããç¹å®ã®ãªã¯ãšã¹ãã PHP-FPM ã«ãªãã€ã¬ã¯ãããŸãããPHP-FPM èªäœã¯ PHP ã³ãŒããå®è¡ããŸãã Apache ãš mod_php ãšããããŸãäžè¬çã§ã¯ãªãçµã¿åããã䜿çšããŠããå¯èœæ§ããããŸãã ãã ããåäœã¯å°ãç°ãªããŸãããåçã¯åãã§ãã
PHP-FPM ãã¢ããªã±ãŒã·ã§ã³ ã³ãŒããã©ã®ããã«å®è¡ããããèŠãŠã¿ãŸãããã ãªã¯ãšã¹ããå±ããšãPHP-FPM 㯠PHP åããã»ã¹ãåæåãããªã¯ãšã¹ãã®è©³çŽ°ããã®ç¶æ (_GETã_POSTã_SERVER ãªã©) ã®äžéšãšããŠæž¡ããŸãã
PHP ã¹ã¯ãªããã®å®è¡äžã«ç¶æ ãå€æŽããããšã¯ã§ããªããããæ°ããå ¥åããŒã¿ã®ã»ãããååŸããã«ã¯ãããã»ã¹ ã¡ã¢ãªãã¯ãªã¢ããŠååæåããæ¹æ³ãããããŸããã
ãã®å®è¡ã¢ãã«ã«ã¯å€ãã®å©ç¹ããããŸãã ã¡ã¢ãªæ¶è²»ã«ã€ããŠããŸãå¿é ããå¿ èŠã¯ãããŸããããã¹ãŠã®ããã»ã¹ã¯å®å šã«åé¢ãããŠããããã®ãã¡ã® XNUMX ã€ããåæ¢ãããŠãèªåçã«åäœæãããæ®ãã®ããã»ã¹ã«ã¯åœ±é¿ããŸããã ãã ãããã®ã¢ãããŒãã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãæ¡åŒµããããšãããšãã«çŸããæ¬ ç¹ããããŸãã
éåžžã® PHP ç°å¢ã®æ¬ ç¹ãšéå¹çæ§
ããªããããã® PHP éçºè ã§ããã°ããã¬ãŒã ã¯ãŒã¯ã®éžæãšãšãã«ãæ°ãããããžã§ã¯ããã©ãããå§ããã¹ãããç¥ã£ãŠããã§ãããã ããã¯ãäŸåé¢ä¿æ³šå ¥ã©ã€ãã©ãªãORMã翻蚳ããã³ãã¬ãŒãã§æ§æãããŸãã ãããŠãã¡ããããã¹ãŠã®ãŠãŒã¶ãŒå ¥åã 7 ã€ã®ãªããžã§ã¯ã (Symfony/HttpFoundation ãŸã㯠PSR-XNUMX) ã«å ¥ããããšãã§ããŸãã ãã¬ãŒã ã¯ãŒã¯ã£ãŠã«ãã³ããã§ããïŒ
ãããããã¹ãŠã«ã¯å€æ®µãã€ããã®ã§ãã ãšã³ã¿ãŒãã©ã€ãºã¬ãã«ã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯ãåçŽãªãŠãŒã¶ãŒãªã¯ãšã¹ããããŒã¿ããŒã¹ãžã®ã¢ã¯ã»ã¹ãåŠçããã«ã¯ãå°ãªããšãæ°åã®ãã¡ã€ã«ãããŒãããå€æ°ã®ã¯ã©ã¹ãäœæããããã€ãã®æ§æã解æããå¿ èŠããããŸãã ãããææªãªã®ã¯ãåã¿ã¹ã¯ãå®äºããåŸããã¹ãŠããªã»ããããŠæåããããçŽãå¿ èŠãããããšã§ããéå§ããã°ããã®ã³ãŒãã¯ãã¹ãŠåœ¹ã«ç«ããªããªãããã®å©ããåããŠå¥ã®ãªã¯ãšã¹ããåŠçã§ããªããªããŸãã ä»ã®èšèªã§æžãããã°ã©ãã«ãã®ããšã話ãããã圌ã®é¡ã«ã¯å°æã®è²ãæµ®ãã¶ã§ãããã
PHP ãšã³ãžãã¢ã¯ãè³¢ãé
延èªã¿èŸŒã¿æè¡ããã€ã¯ããã¬ãŒã ã¯ãŒã¯ãæé©åãããã©ã€ãã©ãªããã£ãã·ã¥ãªã©ã䜿çšããŠããã®åé¡ã解決ããæ¹æ³ãäœå¹Žãæ¢ããŠããŸãããããããæçµçã«ã¯ãã¢ããªã±ãŒã·ã§ã³å
šäœããªã»ããããŠãäœåºŠãããçŽãå¿
èŠããããŸãã (翻蚳è
泚: ãã®åé¡ã¯ã
Go ã䜿çšãã PHP ã¯è€æ°ã®ãªã¯ãšã¹ãã«èããããšãã§ããŸãã?
cron ã¿ã¹ã¯ãCSV ããŒãµãŒããã¥ãŒ ãã¬ãŒã«ãŒãªã©ãæ°åããé·ãåç¶ãã (æ倧ã§æ°æéãŸãã¯æ°æ¥é) PHP ã¹ã¯ãªãããäœæããããšãã§ããŸãã ãããã¯ãã¹ãŠåãã·ããªãªã«åŸã£ãŠåäœããŸããã€ãŸããã¿ã¹ã¯ãååŸããå®è¡ãã次ã®ã¿ã¹ã¯ãåŸ ã¡ãŸãã ã³ãŒãã¯åžžã«ã¡ã¢ãªå ã«åžžé§ãããã¬ãŒã ã¯ãŒã¯ãšã¢ããªã±ãŒã·ã§ã³ãèªã¿èŸŒãããã«å€ãã®è¿œå æé ãå¿ èŠãšãªãããã貎éãªããªç§ãç¯çŽã§ããŸãã
ããããé·æéåç¶ããã¹ã¯ãªãããéçºããã®ã¯ç°¡åã§ã¯ãããŸããã ãšã©ãŒãçºçãããšããã»ã¹ãå®å šã«åŒ·å¶çµäºãããã¡ã¢ãª ãªãŒã¯ã®èšºæã¯ã€ã©ã€ã©ããF5 ããŒãæŒããŠãããã°ããããšã¯ã§ããªããªããŸãã
PHP 7 ã®ãªãªãŒã¹ã§ç¶æ³ã¯æ¹åãããŸãããä¿¡é Œã§ããã¬ããŒãž ã³ã¬ã¯ã¿ãŒãç»å Žãããšã©ãŒã®åŠçã容æã«ãªããã«ãŒãã«æ¡åŒµæ©èœã¯ãªãŒã¯é²æ¢ã«ãªããŸããã 確ãã«ããšã³ãžãã¢ã¯äŸç¶ãšããŠã¡ã¢ãªã«æ³šæããã³ãŒãå ã®ç¶æ ã®åé¡ã«æ³šæããå¿ èŠããããŸã (ãããã®ããšãç¡èŠã§ããèšèªã¯ãããŸãã?)ã ããã§ããPHP 7 ã«ã¯ãç§ãã¡ã«ãšã£ãŠé©ãã¹ãããšãã»ãšãã©ãããŸããã
é·æéåç¶ãã PHP ã¹ã¯ãªãããæ±ãã¢ãã«ãæ¡çšããããã HTTP ãªã¯ãšã¹ãã®åŠçãªã©ã®ããåçŽãªã¿ã¹ã¯ã«é©å¿ãããããã«ãã£ãŠãªã¯ãšã¹ãããšã«ãã¹ãŠãæåããããŒãããå¿ èŠããªããããšã¯å¯èœã§ãããã?
ãã®åé¡ã解決ããã«ã¯ããŸã HTTP ãªã¯ãšã¹ããåãå ¥ããæ¯å PHP ã¯ãŒã«ãŒã匷å¶çµäºããããšãªããHTTP ãªã¯ãšã¹ãã XNUMX ã€ãã€ãªãã€ã¬ã¯ãã§ãããµãŒã㌠ã¢ããªã±ãŒã·ã§ã³ãå®è£ ããå¿ èŠããããŸããã
ç§ãã¡ã¯ãçŽç²ãª PHP (PHP-PM) ãŸã㯠C æ¡åŒµæ©èœ (Swoole) ã䜿çšã㊠Web ãµãŒããŒãäœæã§ããããšãç¥ã£ãŠããŸããã ãããŠãããããã®æ¹æ³ã«ã¯ç¬èªã®ã¡ãªããããããŸãããã©ã¡ãã®ãªãã·ã§ã³ãç§ãã¡ã«ã¯åããªãã£ãã®ã§ããã£ãšäœãã欲ããã£ãã®ã§ãã ç§ãã¡ã¯åãªã Web ãµãŒããŒä»¥äžã®ãã®ãå¿ èŠãšããŠããŸãããç§ãã¡ã¯ãPHP ã®ãããŒãã¹ã¿ãŒããã«äŒŽãåé¡ããç§ãã¡ãæã£ãŠããããšåæã«ãç¹å®ã®ã¢ããªã±ãŒã·ã§ã³åãã«ç°¡åã«é©å¿ããã³æ¡åŒµã§ãããœãªã¥ãŒã·ã§ã³ãæã«å ¥ããããšãæåŸ ããŠããŸããã ã€ãŸããã¢ããªã±ãŒã·ã§ã³ ãµãŒããŒãå¿ èŠã§ããã
Go ã§ããã解決ã§ããŸãã? ãã®èšèªã¯ã¢ããªã±ãŒã·ã§ã³ãåäžã®ãã€ããªã«ã³ã³ãã€ã«ããããããããå¯èœã§ããããšã¯ããã£ãŠããŸããã ã¯ãã¹ãã©ãããã©ãŒã ã§ãã ç¬èªã®éåžžã«ãšã¬ã¬ã³ããªäžŠååŠçã¢ãã« (åæå®è¡) ãš HTTP ãæäœããããã®ã©ã€ãã©ãªã䜿çšããŸãã ãããŠæåŸã«ãäœåãã®ãªãŒãã³ãœãŒã¹ ã©ã€ãã©ãªãšçµ±åãå©çšã§ããããã«ãªããŸãã
XNUMX ã€ã®ããã°ã©ãã³ã°èšèªãçµã¿åãããé£ãã
ãŸãæåã«ãXNUMX ã€ä»¥äžã®ã¢ããªã±ãŒã·ã§ã³ãã©ã®ããã«çžäºã«éä¿¡ãããã決å®ããå¿ èŠããããŸããã
ããšãã°ã次ã®ããã«äœ¿çšããŸãã
ç§ãã¡ã¯ããœã±ãã/ãã€ãã©ã€ã³ãä»ããŠããã»ã¹éã®å¯Ÿè©±ãæ§ç¯ãããšãããå¥ã®ããäžè¬çãªã¢ãããŒãã䜿çšããããšã«ããŸããã ãã®ã¢ãããŒãã¯éå»æ°å幎ã«ããã£ãŠä¿¡é Œæ§ãé«ãããšã蚌æãããŠããããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã¬ãã«ã§é©åã«æé©åãããŠããŸãã
ãŸããããã»ã¹éã§ããŒã¿ã亀æããéä¿¡ãšã©ãŒãåŠçããããã®åçŽãªãã€ã㪠ãããã³ã«ãäœæããŸããã æãåçŽãªåœ¢åŒã§ã¯ããã®ã¿ã€ãã®ãããã³ã«ã¯æ¬¡ã®ããã«ãªããŸãã
PHPåŽã§äœ¿çšããã®ã¯
XNUMX ã€ã®ãããã³ã«ã§ã¯ååã§ã¯ãªããšæãããã®ã§ãåŒã³åºãæ©èœãè¿œå ããŸããã
è€æ°ã® PHP ã¯ãŒã«ãŒã«ã¿ã¹ã¯ãåæ£ãã
ã€ã³ã¿ã©ã¯ã·ã§ã³ã¡ã«ããºã ãå®è£ ããåŸãã¿ã¹ã¯ã PHP ããã»ã¹ã«è»¢éããæãå¹ççãªæ¹æ³ã«ã€ããŠèãå§ããŸããã ã¿ã¹ã¯ãå°çãããšãã¢ããªã±ãŒã·ã§ã³ ãµãŒããŒã¯ãããå®è¡ããããã®ç©ºãã¯ãŒã«ãŒãéžæããå¿ èŠããããŸãã ã¯ãŒã«ãŒ/ããã»ã¹ããšã©ãŒã§çµäºããããæ»äº¡ãããå Žåããããåé€ããæ°ããã¯ãŒã«ãŒ/ããã»ã¹ãäœæããŠçœ®ãæããŸãã ãããŠãã¯ãŒã«ãŒ/ããã»ã¹ãæ£åžžã«å®äºããå Žåã¯ãã¿ã¹ã¯ã®å®è¡ã«äœ¿çšã§ããã¯ãŒã«ãŒã®ããŒã«ã«ãããè¿ããŸãã
ã¢ã¯ãã£ããªã¯ãŒã«ãŒã®ããŒã«ãä¿åããããã«ã次ã䜿çšããŸããã
ãã®çµæããã€ããªåœ¢åŒã§æ瀺ããããªã¯ãšã¹ããåŠçã§ãããåäœãã PHP ãµãŒããŒãååŸããŸããã
ã¢ããªã±ãŒã·ã§ã³ã Web ãµãŒããŒãšããŠåäœã§ããããã«ããã«ã¯ãåä¿¡ HTTP ãªã¯ãšã¹ããè¡šãä¿¡é Œã§ãã PHP æšæºãéžæããå¿
èŠããããŸããã ç§ãã¡ã®å Žåã¯ã
PSR-7 ã¯äžå€ã§ãããšèããããŠãããã (æè¡çã«ã¯äžå€ã§ã¯ãªããšãã人ãããŸã)ãéçºè ã¯ååãšããŠãªã¯ãšã¹ããã°ããŒãã« ãšã³ãã£ãã£ãšããŠæ±ããªãã¢ããªã±ãŒã·ã§ã³ãäœæããå¿ èŠããããŸãã ããã¯ãåç¶æéã®é·ã PHP ããã»ã¹ã®æŠå¿µã«ããé©åããŸãã æçµçãªå®è£ ã¯ãŸã ååãä»ããããŠããŸãããã次ã®ããã«ãªããŸãã
ããŒãã©ã³ããŒã®ãçŽ¹ä» - é«æ§èœPHPã¢ããªã±ãŒã·ã§ã³ãµãŒããŒ
æåã®ãã¹ã ã¿ã¹ã¯ã¯ API ããã¯ãšã³ãã§ãããã¯å®æçã« (éåžžãããã¯ããã«é »ç¹ã«) äºæž¬ã§ããªããªã¯ãšã¹ããããŒã¹ãããŸãã ã»ãšãã©ã®å Žåãnginx ã§ååã§ããããäºæ³ãããè² è·ã®å¢å ã«å¯ŸããŠååãªéãã§ã·ã¹ãã ã®ãã©ã³ã¹ã調æŽã§ããªãã£ããããé »ç¹ã« 502 ãšã©ãŒãçºçããŸããã
ãã®ãœãªã¥ãŒã·ã§ã³ã眮ãæããããã«ã2018 幎åãã«æåã® PHP/Go ã¢ããªã±ãŒã·ã§ã³ ãµãŒããŒããããã€ããŸããã ãããšããã«é©ãã¹ãå¹æãçŸããŸããïŒ 502 ãšã©ãŒãå®å šã«åãé€ãããšãã§ããã ãã§ãªãããµãŒããŒã®æ°ã XNUMX åã® XNUMX ã«æžããããšãã§ããå€ãã®è²»çšãšãšã³ãžãã¢ããããã¯ã ãããŒãžã£ãŒã®é çè¬ãç¯çŽããããšãã§ããŸããã
ä»å¹Žã®åã°ãŸã§ã«ãç§ãã¡ã¯ãœãªã¥ãŒã·ã§ã³ãæ¹è¯ããMIT ã©ã€ã»ã³ã¹ã«åºã¥ã㊠GitHub ã§å
¬éãããã®ååãä»ããŸããã
RoadRunner ãéçºã¹ã¿ãã¯ãã©ã®ããã«æ¹åã§ããã
ã¢ããªã±ãŒã·ã§ã³
çµã¿èŸŒã¿ã® RPC ã®ãããã§ãæ¡åŒµã©ãããŒãäœæããã«ãPHP çšã® Go ã©ã€ãã©ãªã® API ãéãããšãã§ããŸãã ããã«éèŠãªã®ã¯ãRoadRunner ã䜿çšãããšãæ°ããé HTTP ãµãŒããŒãå±éã§ããããšã§ãã äŸã«ã¯ãPHP ã§ã®ãã³ãã©ãŒã®å®è¡ãå«ãŸããŸãã
PHP ããã³ Go ã³ãã¥ããã£ã®æ¯æŽã«ããããœãªã¥ãŒã·ã§ã³ã®å®å®æ§ãåäžããäžéšã®ãã¹ãã§ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãæ倧 40 ååäžãããããã° ããŒã«ãæ¹åãããSymfony ãã¬ãŒã ã¯ãŒã¯ãšã®çµ±åãå®è£ ãããHTTPSãHTTP/2ããã©ã°ã€ã³ãPSR-17ã
ãŸãšã
PHP ã¯é ããŠæ±ãã«ããèšèªã§ãããWordPress çšã®ãã©ã°ã€ã³ãäœæããã®ã«ã®ã¿é©ããŠãããšããæ代é ãã®æŠå¿µã«æªã ã«åãããŠãã人ãããŸãã ãããã人ã ã¯ãPHP ã«ã¯ãã®ãããªå¶éãããããšããèšããããããŸãããã¢ããªã±ãŒã·ã§ã³ãååã«å€§ãããªããšããããæçãããèšèªãéžæããé·å¹Žã«ããã£ãŠèç©ãããã³ãŒã ããŒã¹ãæžãçŽããªããã°ãªããŸããã
ããããã¹ãŠã«å¯ŸããŠç§ã¯çããããšæããŸããããäžåºŠèããŠãã ããã PHP ã«å¶éãèšå®ããŠããã®ã¯ããªãã ãã§ãããšç§ãã¡ã¯èããŠããŸãã èªåã®ããŒãºã«ãŽã£ããåãèšèªãèŠã€ããããšããŠãããèšèªããå¥ã®èšèªã«ç§»è¡ããããšã«äžçãè²»ããããšãã§ããŸãããèšèªãããŒã«ãšããŠèãå§ããããšãã§ããŸãã PHP ã®ãããªèšèªã®æ³å®ãããæ¬ é¥ããå®éã«ã¯ãã®æåã®çç±ã§ããå¯èœæ§ããããŸãã ãŸããGo ãªã©ã®å¥ã®èšèªãšçµã¿åããããšãXNUMX ã€ã®èšèªã®äœ¿çšã«éå®ãããå Žåãããã¯ããã«åŒ·åãªè£œåãäœæã§ããŸãã
ç§ãã¡ã¯ Go ãš PHP ããããã䜿ã£ãŠããã®ã§ããããã倧奜ãã ãšèšããŸãã ç§ãã¡ã¯ãäžæ¹ãä»æ¹ã®ããã«ç ç²ã«ããã€ããã¯ãããŸãããéã«ããã®ãã¥ã¢ã« ã¹ã¿ãã¯ããããã«å€ãã®äŸ¡å€ãåŸãæ¹æ³ã暡玢ããŸãã
UPD: RoadRunner ã®äœæè
ããã³å
ã®èšäºã®å
±èè
ã«ããã«ã¡ã¯ -
åºæïŒ habr.com