RoadRunner: PHP ืœื ื‘ื ื•ื™ ืœืžื•ืช, ืื• ื’ื•ืœื ื’ ืœื”ืฆืœื”

RoadRunner: PHP ืœื ื‘ื ื•ื™ ืœืžื•ืช, ืื• ื’ื•ืœื ื’ ืœื”ืฆืœื”

ื”ื™ื™ ื”ื‘ืจ! ืื ื—ื ื• ืคืขื™ืœื™ื ื‘-Badoo ืขื•ื‘ื“ื™ื ืขืœ ื‘ื™ืฆื•ืขื™ PHP, ืžื›ื™ื•ื•ืŸ ืฉื™ืฉ ืœื ื• ืžืขืจื›ืช ื“ื™ ื’ื“ื•ืœื” ื‘ืฉืคื” ื–ื• ื•ื‘ืขื™ื™ืช ื”ื‘ื™ืฆื•ืขื™ื ื”ื™ื ื‘ืขื™ื” ืฉืœ ื—ื™ืกื›ื•ืŸ ื‘ื›ืกืฃ. ืœืคื ื™ ื™ื•ืชืจ ืžืขืฉืจ ืฉื ื™ื ื™ืฆืจื ื• ืขื‘ื•ืจ ื–ื” ืืช PHP-FPM, ืฉื‘ื”ืชื—ืœื” ื”ื™ื” ืกื˜ ืฉืœ ืชื™ืงื•ื ื™ื ืขื‘ื•ืจ PHP, ื•ื‘ื”ืžืฉืš ื ื›ื ืก ืœื”ืคืฆื” ื”ืจืฉืžื™ืช.

ื‘ืฉื ื™ื ื”ืื—ืจื•ื ื•ืช PHP ื”ืชืงื“ืžื” ืžืื•ื“: ืืกืคืŸ ื”ืืฉืคื” ื”ืฉืชืคืจ, ืจืžืช ื”ื™ืฆื™ื‘ื•ืช ืขืœืชื” - ื›ื™ื•ื ื ื™ืชืŸ ืœื›ืชื•ื‘ ื“ืžื•ื ื™ื ื•ืกืงืจื™ืคื˜ื™ื ืืจื•ื›ื™ื ื‘-PHP ืœืœื ื‘ืขื™ื•ืช. ื–ื” ืืคืฉืจ ืœืกืคื™ืจืœ ืกืงืื•ื˜ ืœืœื›ืช ืจื—ื•ืง ื™ื•ืชืจ: RoadRunner, ื‘ื ื™ื’ื•ื“ ืœ-PHP-FPM, ืœื ืžื ืงื” ื–ื™ื›ืจื•ืŸ ื‘ื™ืŸ ื‘ืงืฉื•ืช, ืžื” ืฉื ื•ืชืŸ ืจื•ื•ื— ื ื•ืกืฃ ื‘ื‘ื™ืฆื•ืขื™ื (ืœืžืจื•ืช ืฉื’ื™ืฉื” ื–ื• ืžืกื‘ื›ืช ืืช ืชื”ืœื™ืš ื”ืคื™ืชื•ื—). ื›ืจื’ืข ืื ื• ืžืชื ืกื™ื ื‘ื›ืœื™ ื–ื”, ืืš ืื™ืŸ ืœื ื• ืขื“ื™ื™ืŸ ืชื•ืฆืื•ืช ืœื—ืœื•ืง. ื›ื“ื™ ืœื”ืคื•ืš ืืช ื”ื”ืžืชื ื” ืœื”ื ืœืžื”ื ื” ื™ื•ืชืจ, ืื ื• ืžืคืจืกืžื™ื ืืช ื”ืชืจื’ื•ื ืฉืœ ื”ื•ื“ืขืช RoadRunner ืž-Spiral Scout.

ื”ื’ื™ืฉื” ืžื”ืžืืžืจ ืงืจื•ื‘ื” ืืœื™ื ื•: ื›ืฉืคื•ืชืจื™ื ืืช ื”ื‘ืขื™ื•ืช ืฉืœื ื•, ืื ื—ื ื• ื’ื ืžืฉืชืžืฉื™ื ืœืจื•ื‘ ื‘ื›ืžื” PHP ื•-Go, ื›ื“ื™ ืœืงื‘ืœ ืืช ื”ื™ืชืจื•ื ื•ืช ืฉืœ ืฉืชื™ ื”ืฉืคื•ืช ื•ืœื ืœื ื˜ื•ืฉ ืืช ื”ืื—ืช ืœื˜ื•ื‘ืช ื”ืฉื ื™ื™ื”.

ืชื”ื ื•!

ื‘ืขืฉืจ ื”ืฉื ื™ื ื”ืื—ืจื•ื ื•ืช ื™ืฆืจื ื• ืืคืœื™ืงืฆื™ื•ืช ืœื—ื‘ืจื•ืช ืžื”ืจืฉื™ืžื” ืคื•ืจืฆ'ืŸ 500, ื•ืœืขืกืงื™ื ืขื ืงื”ืœ ืฉืœ ืœื ื™ื•ืชืจ ืž-500 ืžืฉืชืžืฉื™ื. ื›ืœ ื”ื–ืžืŸ ื”ื–ื”, ื”ืžื”ื ื“ืกื™ื ืฉืœื ื• ืคื™ืชื—ื• ืืช ื”-backend ื‘ืขื™ืงืจ ื‘-PHP. ืื‘ืœ ืœืคื ื™ ืฉื ืชื™ื™ื, ืžืฉื”ื• ื”ืฉืคื™ืข ืจื‘ื•ืช ืœื ืจืง ืขืœ ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ื”ืžื•ืฆืจื™ื ืฉืœื ื•, ืืœื ื’ื ืขืœ ื”ืžื“ืจื’ื™ื•ืช ืฉืœื”ื - ื”ื›ื ืกื ื• ืืช Golang (Go) ืœืขืจื™ืžืช ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ืฉืœื ื•.

ื›ืžืขื˜ ืžื™ื“ ื’ื™ืœื™ื ื• ืฉ-Go ืืคืฉืจื” ืœื ื• ืœื‘ื ื•ืช ืืคืœื™ืงืฆื™ื•ืช ื’ื“ื•ืœื•ืช ื™ื•ืชืจ ืขื ืฉื™ืคื•ืจื™ ื‘ื™ืฆื•ืขื™ื ืขื“ ืคื™ 40. ื‘ืขื–ืจืชื•, ื”ืฆืœื—ื ื• ืœื”ืจื—ื™ื‘ ืืช ื”ืžื•ืฆืจื™ื ื”ืงื™ื™ืžื™ื ืฉืœื ื• ืฉื ื›ืชื‘ื• ื‘-PHP, ื•ืœืฉืคืจ ืื•ืชื ืขืœ ื™ื“ื™ ืฉื™ืœื•ื‘ ื”ื™ืชืจื•ื ื•ืช ืฉืœ ืฉืชื™ ื”ืฉืคื•ืช.

ื ืกืคืจ ืœื›ื ื›ื™ืฆื“ ื”ืฉื™ืœื•ื‘ ืฉืœ Go ื•-PHP ืขื•ื–ืจ ืœืคืชื•ืจ ื‘ืขื™ื•ืช ืคื™ืชื•ื— ืืžื™ืชื™ื•ืช ื•ื›ื™ืฆื“ ื”ื•ื ื”ืคืš ืขื‘ื•ืจื ื• ืœื›ืœื™ ืฉื™ื›ื•ืœ ืœื”ื™ืคื˜ืจ ืžื—ืœืง ืžื”ื‘ืขื™ื•ืช ื”ืงืฉื•ืจื•ืช ื“ื’ื PHP ื’ื•ืกืก.

ืกื‘ื™ื‘ืช ื”ืคื™ืชื•ื— ื”ื™ื•ืžื™ืช ืฉืœืš ื‘-PHP

ืœืคื ื™ ืฉื ื“ื‘ืจ ืขืœ ืื™ืš ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘-Go ื›ื“ื™ ืœื”ื—ื™ื•ืช ืืช ืžื•ื“ืœ ื”-PHP ื”ื’ื•ืกืกืช, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืกื‘ื™ื‘ืช ื”ืคื™ืชื•ื— ื”ืžื•ื’ื“ืจืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ืฉืœ PHP.

ื‘ืจื•ื‘ ื”ืžืงืจื™ื, ืืชื” ืžืคืขื™ืœ ืืช ื”ื™ื™ืฉื•ื ืฉืœืš ื‘ืืžืฆืขื•ืช ืฉื™ืœื•ื‘ ืฉืœ ืฉืจืช ื”ืื™ื ื˜ืจื ื˜ nginx ื•ืฉืจืช PHP-FPM. ื”ืจืืฉื•ืŸ ืžืฉืจืช ืงื‘ืฆื™ื ืกื˜ื˜ื™ื™ื ื•ืžืคื ื” ื‘ืงืฉื•ืช ืกืคืฆื™ืคื™ื•ืช ืœ-PHP-FPM, ื‘ืขื•ื“ ืฉ-PHP-FPM ืขืฆืžื• ืžื‘ืฆืข ืงื•ื“ PHP. ื™ื™ืชื›ืŸ ืฉืืชื” ืžืฉืชืžืฉ ื‘ืฉื™ืœื•ื‘ ื”ืคื—ื•ืช ืคื•ืคื•ืœืจื™ ืฉืœ Apache ื•-mod_php. ืื‘ืœ ืœืžืจื•ืช ืฉื–ื” ืขื•ื‘ื“ ืงืฆืช ืื—ืจืช, ื”ืขืงืจื•ื ื•ืช ื–ื”ื™ื.

ื‘ื•ืื• ื ืกืชื›ืœ ื›ื™ืฆื“ PHP-FPM ืžื‘ืฆืขืช ืงื•ื“ ื™ื™ืฉื•ื. ื›ืฉืžื’ื™ืขื” ื‘ืงืฉื”, PHP-FPM ืžืืชื—ืœ ืชื”ืœื™ืš ืฆืืฆื ืฉืœ PHP ื•ืžืขื‘ื™ืจ ืืช ืคืจื˜ื™ ื”ื‘ืงืฉื” ื›ื—ืœืง ืžื”ืžืฆื‘ ืฉืœื” (_GET, _POST, _SERVER ื•ื›ื•').

ื”ืžืฆื‘ ืœื ื™ื›ื•ืœ ืœื”ืฉืชื ื•ืช ื‘ืžื”ืœืš ื‘ื™ืฆื•ืข ืกืงืจื™ืคื˜ PHP, ืื– ื™ืฉ ืจืง ื“ืจืš ืื—ืช ืœืงื‘ืœ ืกื˜ ื—ื“ืฉ ืฉืœ ื ืชื•ื ื™ ืงืœื˜: ืขืœ ื™ื“ื™ ื ื™ืงื•ื™ ื–ื™ื›ืจื•ืŸ ื”ืชื”ืœื™ืš ื•ืืชื—ื•ืœ ืžื—ื“ืฉ ืฉืœื•.

ืœืžื•ื“ืœ ื‘ื™ืฆื•ืข ื–ื” ื™ืชืจื•ื ื•ืช ืจื‘ื™ื. ืœื ืฆืจื™ืš ืœื“ืื•ื’ ื™ื•ืชืจ ืžื“ื™ ืœื’ื‘ื™ ืฆืจื™ื›ืช ื–ื™ื›ืจื•ืŸ, ื›ืœ ื”ืชื”ืœื™ื›ื™ื ืžื‘ื•ื“ื“ื™ื ืœื—ืœื•ื˜ื™ืŸ, ื•ืื ืื—ื“ ืžื”ื "ื™ืžื•ืช", ื”ื•ื ื™ื™ื•ื•ืฆืจ ืžื—ื“ืฉ ืื•ื˜ื•ืžื˜ื™ืช ื•ื–ื” ืœื ื™ืฉืคื™ืข ืขืœ ืฉืืจ ื”ืชื”ืœื™ื›ื™ื. ืืš ืœื’ื™ืฉื” ื–ื• ื™ืฉ ื’ื ื—ืกืจื•ื ื•ืช ื”ืžื•ืคื™ืขื™ื ื›ืืฉืจ ืžื ืกื™ื ืœื”ืจื—ื™ื‘ ืืช ื”ื™ื™ืฉื•ื.

ื—ืกืจื•ื ื•ืช ื•ื—ื•ืกืจ ื™ืขื™ืœื•ืช ืฉืœ ืกื‘ื™ื‘ืช PHP ืจื’ื™ืœื”

ืื ืืชื” ืžืคืชื— PHP ืžืงืฆื•ืขื™, ืื– ืืชื” ื™ื•ื“ืข ืื™ืคื” ืœื”ืชื—ื™ืœ ืคืจื•ื™ืงื˜ ื—ื“ืฉ - ืขื ื‘ื—ื™ืจืช ืžืกื’ืจืช. ื”ื•ื ืžื•ืจื›ื‘ ืžืกืคืจื™ื•ืช ื”ื–ืจืงืช ืชืœื•ืช, ORMs, ืชืจื’ื•ืžื™ื ื•ืชื‘ื ื™ื•ืช. ื•ื›ืžื•ื‘ืŸ, ื ื™ืชืŸ ืœื”ื›ื ื™ืก ื‘ื ื•ื—ื•ืช ืืช ื›ืœ ืงืœื˜ ื”ืžืฉืชืžืฉ ืœืื•ื‘ื™ื™ืงื˜ ืื—ื“ (Symfony/HttpFoundation ืื• PSR-7). ืžืกื’ืจื•ืช ื–ื” ืžื’ื ื™ื‘!

ืื‘ืœ ืœื›ืœ ื“ื‘ืจ ื™ืฉ ืืช ื”ืžื—ื™ืจ ืฉืœื•. ื‘ื›ืœ ืžืกื’ืจืช ื‘ืจืžืช ื”ืืจื’ื•ืŸ, ื›ื“ื™ ืœืขื‘ื“ ื‘ืงืฉืช ืžืฉืชืžืฉ ืคืฉื•ื˜ื” ืื• ื’ื™ืฉื” ืœืžืกื“ ื ืชื•ื ื™ื, ืชืฆื˜ืจืš ืœื˜ืขื•ืŸ ืœืคื—ื•ืช ืขืฉืจื•ืช ืงื‘ืฆื™ื, ืœื™ืฆื•ืจ ืžื—ืœืงื•ืช ืจื‘ื•ืช ื•ืœื ืชื— ืžืกืคืจ ืชืฆื•ืจื•ืช. ืื‘ืœ ื”ื“ื‘ืจ ื”ื’ืจื•ืข ื‘ื™ื•ืชืจ ื”ื•ื ืฉืื—ืจื™ ื”ืฉืœืžืช ื›ืœ ืžืฉื™ืžื”, ืชืฆื˜ืจื›ื• ืœืืคืก ื”ื›ืœ ื•ืœื”ืชื—ื™ืœ ืžื—ื“ืฉ: ื›ืœ ื”ืงื•ื“ ืฉื™ื–ืžืชื ื–ื” ืขืชื” ื”ื•ืคืš ื—ืกืจ ืชื•ืขืœืช, ื‘ืขื–ืจืชื• ืœื ืชืขื‘ื“ื• ืขื•ื“ ื‘ืงืฉื” ื ื•ืกืคืช. ืชื’ื™ื“ ืืช ื–ื” ืœื›ืœ ืžืชื›ื ืช ืฉื›ื•ืชื‘ ื‘ืฉืคื” ืื—ืจืช, ื•ืชืจืื” ืชืžื™ื”ื” ืขืœ ืคื ื™ื•.

ืžื”ื ื“ืกื™ PHP ื—ื™ืคืฉื• ื“ืจื›ื™ื ืœืคืชื•ืจ ื‘ืขื™ื” ื–ื• ื‘ืžืฉืš ืฉื ื™ื, ืชื•ืš ืฉื™ืžื•ืฉ ื‘ื˜ื›ื ื™ืงื•ืช ื—ื›ืžื•ืช ืฉืœ ื˜ืขื™ื ื” ืขืฆืœื”, ืžื™ืงืจื•-ืคืจื™ื™ื, ืกืคืจื™ื•ืช ืžื•ืชืืžื•ืช, ืžื˜ืžื•ืŸ ื•ื›ื•'. ืื‘ืœ ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ, ืขื“ื™ื™ืŸ ืฆืจื™ืš ืœืืคืก ืืช ื›ืœ ื”ืืคืœื™ืงืฆื™ื” ื•ืœื”ืชื—ื™ืœ ืžื—ื“ืฉ, ืฉื•ื‘ ื•ืฉื•ื‘ . (ื”ืขืจืช ื”ืžืชืจื’ื: ื‘ืขื™ื” ื–ื• ืชื™ืคืชืจ ื—ืœืงื™ืช ืขื ื”ื•ืคืขืชื• ืฉืœ preload ื‘-PHP 7.4)

ื”ืื PHP ืขื Go ื™ื›ื•ืœ ืœืฉืจื•ื“ ื™ื•ืชืจ ืžื‘ืงืฉื” ืื—ืช?

ืืคืฉืจ ืœื›ืชื•ื‘ ืกืงืจื™ืคื˜ื™ื ืฉืœ PHP ืฉื™ื™ืžืฉื›ื• ื™ื•ืชืจ ืžื›ืžื” ื“ืงื•ืช (ืขื“ ืฉืขื•ืช ืื• ื™ืžื™ื): ืœืžืฉืœ ืžืฉื™ืžื•ืช cron, ืžื ืชื—ื™ CSV, queue busters. ื›ื•ืœื ืขื•ื‘ื“ื™ื ืœืคื™ ืื•ืชื• ืชืจื—ื™ืฉ: ื”ื ืžืฉื—ื–ืจื™ื ืžืฉื™ืžื”, ืžื‘ืฆืขื™ื ืื•ืชื” ื•ืžื—ื›ื™ื ืœืžืฉื™ืžื” ื”ื‘ืื”. ื”ืงื•ื“ ืฉื•ื›ืŸ ื‘ื–ื™ื›ืจื•ืŸ, ื—ื•ืกืš ืืœืคื™ื•ืช ืฉื ื™ื•ืช ื™ืงืจื•ืช ืžื›ื™ื•ื•ืŸ ืฉื ื“ืจืฉื™ื ืฉืœื‘ื™ื ื ื•ืกืคื™ื ืจื‘ื™ื ืœื˜ืขื™ื ืช ื”ืžืกื’ืจืช ื•ื”ื™ื™ืฉื•ื.

ืื‘ืœ ืคื™ืชื•ื— ืกืงืจื™ืคื˜ื™ื ืืจื•ื›ื™ื ื–ื” ืœื ืงืœ. ื›ืœ ืฉื’ื™ืื” ื”ื•ืจื’ืช ืœื—ืœื•ื˜ื™ืŸ ืืช ื”ืชื”ืœื™ืš, ืื‘ื—ื•ืŸ ื“ืœื™ืคื•ืช ื–ื™ื›ืจื•ืŸ ืžื›ืขื™ืก, ื•ืื™ืชื•ืจ ื‘ืื’ื™ื F5 ืื™ื ื• ืืคืฉืจื™ ืขื•ื“.

ื”ืžืฆื‘ ื”ืฉืชืคืจ ืขื ืฉื—ืจื•ืจื• ืฉืœ PHP 7: ื”ื•ืคื™ืข ืื•ืกืฃ ืืฉืคื” ืืžื™ืŸ, ื”ืคืš ืงืœ ื™ื•ืชืจ ืœื˜ืคืœ ื‘ืฉื’ื™ืื•ืช, ื•ื”ืจื—ื‘ื•ืช ืœื™ื‘ื” ืžื•ื’ื ื•ืช ื›ืขืช ืžืคื ื™ ื“ืœื™ืคื•ืช. ื ื›ื•ืŸ, ืžื”ื ื“ืกื™ื ืขื“ื™ื™ืŸ ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ื–ื”ื™ืจื™ื ื‘ื–ื™ื›ืจื•ืŸ ื•ืœื”ื™ื•ืช ืžื•ื“ืขื™ื ืœื‘ืขื™ื•ืช ืžืฆื‘ ื‘ืงื•ื“ (ื”ืื ื™ืฉ ืฉืคื” ืฉื‘ื” ืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื ืœื“ืื•ื’ ืœื“ื‘ืจื™ื ื”ืืœื”?). ื•ืขื“ื™ื™ืŸ, ื‘-PHP 7 ืžื—ื›ื•ืช ืœื ื• ืคื—ื•ืช ื”ืคืชืขื•ืช.

ื”ืื ืืคืฉืจ ืœืงื—ืช ืืช ื”ืžื•ื“ืœ ืฉืœ ืขื‘ื•ื“ื” ืขื ืกืงืจื™ืคื˜ื™ื ืฉืœ PHP ืืจื•ื›ื™ ื—ื™ื™ื, ืœื”ืชืื™ื ืื•ืชื• ืœืžืฉื™ืžื•ืช ื˜ืจื™ื•ื•ื™ืืœื™ื•ืช ื™ื•ืชืจ ื›ืžื• ืขื™ื‘ื•ื“ ื‘ืงืฉื•ืช HTTP, ื•ื‘ื›ืš ืœื”ื™ืคื˜ืจ ืžื”ืฆื•ืจืš ืœื˜ืขื•ืŸ ื”ื›ืœ ืžืืคืก ืขื ื›ืœ ื‘ืงืฉื”?

ื›ื“ื™ ืœืคืชื•ืจ ื‘ืขื™ื” ื–ื•, ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืชื—ื™ืœื” ืœื™ื™ืฉื ื™ื™ืฉื•ื ืฉืจืช ืฉื™ื›ื•ืœ ืœืงื‘ืœ ื‘ืงืฉื•ืช HTTP ื•ืœื”ืคื ื•ืช ืื•ืชืŸ ืื—ืช ืื—ืช ืœืขื•ื‘ื“ ื”-PHP ืžื‘ืœื™ ืœื”ืจื•ื’ ืื•ืชื• ื‘ื›ืœ ืคืขื.

ื™ื“ืขื ื• ืฉืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื›ืชื•ื‘ ืฉืจืช ืื™ื ื˜ืจื ื˜ ื‘-PHP ื˜ื”ื•ืจ (PHP-PM) ืื• ื‘ืืžืฆืขื•ืช ืกื™ื•ืžืช C (Swoole). ื•ืœืžืจื•ืช ืฉืœื›ืœ ืฉื™ื˜ื” ื™ืฉ ื™ืชืจื•ื ื•ืช ืžืฉืœื”, ืฉืชื™ ื”ืืคืฉืจื•ื™ื•ืช ืœื ื”ืชืื™ืžื• ืœื ื• โ€“ ืจืฆื™ื ื• ืขื•ื“ ืžืฉื”ื•. ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ื™ื•ืชืจ ืžืกืชื ืฉืจืช ืื™ื ื˜ืจื ื˜ - ืฆื™ืคื™ื ื• ืœืงื‘ืœ ืคืชืจื•ืŸ ืฉื™ื›ื•ืœ ืœื”ืฆื™ืœ ืื•ืชื ื• ืžื”ื‘ืขื™ื•ืช ื”ืงืฉื•ืจื•ืช ืœ"ื”ืชื—ืœื” ืงืฉื”" ื‘-PHP, ืฉื‘ืžืงื‘ื™ืœ ื ื™ืชืŸ ืœื”ืชืื™ื ื•ืœื”ืจื—ื™ื‘ ื‘ืงืœื•ืช ืœืืคืœื™ืงืฆื™ื•ืช ืกืคืฆื™ืคื™ื•ืช. ื›ืœื•ืžืจ, ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืฉืจืช ื™ื™ืฉื•ืžื™ื.

ื”ืื ื’ื• ื™ื›ื•ืœ ืœืขื–ื•ืจ ื‘ื–ื”? ื™ื“ืขื ื• ืฉื–ื” ื™ื›ื•ืœ ืžื›ื™ื•ื•ืŸ ืฉื”ืฉืคื” ืžืจื›ื™ื‘ื” ื™ื™ืฉื•ืžื™ื ืœืงื‘ืฆื™ื ื‘ื™ื ืืจื™ื™ื ื‘ื•ื“ื“ื™ื; ื–ื” ื—ื•ืฆื” ืคืœื˜ืคื•ืจืžื•ืช; ืžืฉืชืžืฉ ื‘ืžื•ื“ืœ ืขื™ื‘ื•ื“ ืžืงื‘ื™ืœื™ ืžืฉืœื•, ืืœื’ื ื˜ื™ ืžืื•ื“ (ื‘ืžืงื‘ื™ืœ) ื•ื‘ืกืคืจื™ื™ื” ืœืขื‘ื•ื“ื” ืขื HTTP; ื•ืœื‘ืกื•ืฃ, ืืœืคื™ ืกืคืจื™ื•ืช ื•ืื™ื ื˜ื’ืจืฆื™ื•ืช ื‘ืงื•ื“ ืคืชื•ื— ื™ื”ื™ื• ื–ืžื™ื ื•ืช ืœื ื•.

ื”ืงืฉื™ื™ื ื‘ืฉื™ืœื•ื‘ ืฉืชื™ ืฉืคื•ืช ืชื›ื ื•ืช

ืงื•ื“ื ื›ืœ, ื”ื™ื” ืฆื•ืจืš ืœืงื‘ื•ืข ื›ื™ืฆื“ ืฉืชื™ ื™ื™ืฉื•ืžื™ื ืื• ื™ื•ืชืจ ื™ืชืงืฉืจื• ื–ื” ืขื ื–ื”.

ืœื“ื•ื’ืžื”, ื‘ืืžืฆืขื•ืช ืกืคืจื™ื™ื” ืžืขื•ืœื” Alex Palaestras, ื ื™ืชืŸ ื”ื™ื” ืœืฉืชืฃ ื–ื™ื›ืจื•ืŸ ื‘ื™ืŸ ืชื”ืœื™ื›ื™ PHP ื•-Go (ื‘ื“ื•ืžื” ืœ-mod_php ื‘-Apache). ืื‘ืœ ืœืกืคืจื™ื™ื” ื”ื–ื• ื™ืฉ ืชื›ื•ื ื•ืช ืฉืžื’ื‘ื™ืœื•ืช ืืช ื”ืฉื™ืžื•ืฉ ื‘ื” ืœืคืชืจื•ืŸ ื”ื‘ืขื™ื” ืฉืœื ื•.

ื”ื—ืœื˜ื ื• ืœื”ืฉืชืžืฉ ื‘ื’ื™ืฉื” ืื—ืจืช, ื ืคื•ืฆื” ื™ื•ืชืจ: ืœื‘ื ื•ืช ืื™ื ื˜ืจืืงืฆื™ื” ื‘ื™ืŸ ืชื”ืœื™ื›ื™ื ื‘ืืžืฆืขื•ืช ืฉืงืขื™ื/ืฆื™ื ื•ืจื•ืช. ื’ื™ืฉื” ื–ื• ื”ื•ื›ื—ื” ื›ืืžื™ื ื” ื‘ืขืฉื•ืจื™ื ื”ืื—ืจื•ื ื™ื ื•ืขื‘ืจื” ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื˜ื•ื‘ื” ื‘ืจืžืช ืžืขืจื›ืช ื”ื”ืคืขืœื”.

ืžืœื›ืชื—ื™ืœื”, ื™ืฆืจื ื• ืคืจื•ื˜ื•ืงื•ืœ ื‘ื™ื ืืจื™ ืคืฉื•ื˜ ืœื”ื—ืœืคืช ื ืชื•ื ื™ื ื‘ื™ืŸ ืชื”ืœื™ื›ื™ื ื•ื˜ื™ืคื•ืœ ื‘ืฉื’ื™ืื•ืช ืฉื™ื“ื•ืจ. ื‘ืฆื•ืจืชื• ื”ืคืฉื•ื˜ื” ื‘ื™ื•ืชืจ, ืกื•ื’ ื–ื” ืฉืœ ืคืจื•ื˜ื•ืงื•ืœ ื“ื•ืžื” ืœ ืžื—ืจื•ื–ืช ืจืฉืช ั ื›ื•ืชืจืช ืžื ื•ืช ื‘ื’ื•ื“ืœ ืงื‘ื•ืข (ื‘ืžืงืจื” ืฉืœื ื• 17 ื‘ืชื™ื), ื”ืžื›ื™ืœื” ืžื™ื“ืข ืขืœ ืกื•ื’ ื”ื—ื‘ื™ืœื”, ื’ื•ื“ืœื” ื•ืžืกื™ื›ื” ื‘ื™ื ืืจื™ืช ืœื‘ื“ื™ืงืช ืชืงื™ื ื•ืช ื”ื ืชื•ื ื™ื.

ื‘ืฆื“ PHP ื”ืฉืชืžืฉื ื• ืคื•ื ืงืฆื™ื™ืช ื—ื‘ื™ืœื”, ื•ื‘ืฆื“ Go, ื”ืกืคืจื™ื™ื” ืงื™ื“ื•ื“/ื‘ื™ื ืืจื™.

ื ืจืื” ื”ื™ื” ืœื ื• ืฉืœื ืžืกืคื™ืง ืคืจื•ื˜ื•ืงื•ืœ ืื—ื“ - ื•ื”ื•ืกืคื ื• ืืคืฉืจื•ืช ืœื”ืชืงืฉืจ net/rpc go ืฉื™ืจื•ืชื™ ื™ืฉื™ืจื•ืช ืž-PHP. ืžืื•ื—ืจ ื™ื•ืชืจ, ื–ื” ืขื–ืจ ืœื ื• ืžืื•ื“ ื‘ืคื™ืชื•ื—, ืžื›ื™ื•ื•ืŸ ืฉื™ื›ื•ืœื ื• ืœืฉืœื‘ ื‘ืงืœื•ืช ืกืคืจื™ื•ืช Go ื‘ืืคืœื™ืงืฆื™ื•ืช PHP. ืืช ื”ืชื•ืฆืื” ืฉืœ ืขื‘ื•ื“ื” ื–ื• ื ื™ืชืŸ ืœืจืื•ืช, ืœืžืฉืœ, ื‘ืžื•ืฆืจ ื”ืงื•ื“ ื”ืคืชื•ื— ื”ืื—ืจ ืฉืœื ื• ื’ื•ืจื™ื“ื’'.

ื”ืคืฆืช ืžืฉื™ืžื•ืช ืขืœ ืคื ื™ ืžืกืคืจ ืขื•ื‘ื“ื™ PHP

ืœืื—ืจ ื”ื˜ืžืขืช ืžื ื’ื ื•ืŸ ื”ืื™ื ื˜ืจืืงืฆื™ื”, ื”ืชื—ืœื ื• ืœื—ืฉื•ื‘ ืขืœ ื”ื“ืจืš ื”ื™ืขื™ืœื” ื‘ื™ื•ืชืจ ืœื”ืขื‘ื™ืจ ืžืฉื™ืžื•ืช ืœืชื”ืœื™ื›ื™ PHP. ื›ืืฉืจ ืžืฉื™ืžื” ืžื’ื™ืขื”, ืฉืจืช ื”ื™ื™ืฉื•ืžื™ื ื—ื™ื™ื‘ ืœื‘ื—ื•ืจ ืขื•ื‘ื“ ืคื ื•ื™ ืฉื™ื‘ืฆืข ืื•ืชื”. ืื ืขื•ื‘ื“/ืชื”ืœื™ืš ื™ื•ืฆื ืขื ืฉื’ื™ืื” ืื• "ืžืช", ืื ื• ื ืคื˜ืจื™ื ืžืžื ื• ื•ื™ื•ืฆืจื™ื ืื—ื“ ื—ื“ืฉ ืฉื™ื—ืœื™ืฃ ืื•ืชื•. ื•ืื ื”ืขื•ื‘ื“/ืชื”ืœื™ืš ื”ืกืชื™ื™ื ื‘ื”ืฆืœื—ื”, ืื ื• ืžื—ื–ื™ืจื™ื ืื•ืชื• ืœืžืื’ืจ ื”ืขื•ื‘ื“ื™ื ื”ื–ืžื™ื ื™ื ืœื‘ื™ืฆื•ืข ืžืฉื™ืžื•ืช.

RoadRunner: PHP ืœื ื‘ื ื•ื™ ืœืžื•ืช, ืื• ื’ื•ืœื ื’ ืœื”ืฆืœื”

ื›ื“ื™ ืœืื—ืกืŸ ืืช ืžืื’ืจ ื”ืขื•ื‘ื“ื™ื ื”ืคืขื™ืœื™ื, ื”ืฉืชืžืฉื ื• ืขืจื•ืฅ ืžืื•ื—ืกืŸ, ื›ื“ื™ ืœื”ืกื™ืจ ืขื•ื‘ื“ื™ื "ืžืชื™ื" ื‘ืื•ืคืŸ ื‘ืœืชื™ ืฆืคื•ื™ ืžื”ืžืื’ืจ, ื”ื•ืกืคื ื• ืžื ื’ื ื•ืŸ ืœืžืขืงื‘ ืื—ืจ ืฉื’ื™ืื•ืช ื•ืžืฆื‘ื™ ืขื•ื‘ื“ื™ื.

ื›ืชื•ืฆืื” ืžื›ืš, ืงื™ื‘ืœื ื• ืฉืจืช PHP ืขื•ื‘ื“ ื”ืžืกื•ื’ืœ ืœืขื‘ื“ ื›ืœ ื‘ืงืฉื•ืช ื”ืžื•ืฆื’ื•ืช ื‘ืฆื•ืจื” ื‘ื™ื ืืจื™ืช.

ื›ื“ื™ ืฉื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ืชืชื—ื™ืœ ืœืขื‘ื•ื“ ื›ืฉืจืช ืื™ื ื˜ืจื ื˜, ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืœื‘ื—ื•ืจ ืชืงืŸ PHP ืืžื™ืŸ ืฉื™ื™ื™ืฆื’ ื›ืœ ื‘ืงืฉื•ืช HTTP ื ื›ื ืกื•ืช. ื‘ืžืงืจื” ืฉืœื ื•, ืื ื—ื ื• ืคืฉื•ื˜ ืฉื™ื ื•ื™ ืฆื•ืจื” ื‘ืงืฉืช net/http ืžืขื‘ื•ืจ ืœืคื•ืจืžื˜ PSR-7ื›ืš ืฉื”ื•ื ืชื•ืื ืœืจื•ื‘ ืžืกื’ืจื•ืช ื”-PHP ื”ื–ืžื™ื ื•ืช ื›ื™ื•ื.

ืžื›ื™ื•ื•ืŸ ืฉ-PSR-7 ื ื—ืฉื‘ ืœื‘ืœืชื™ ื ื™ืชืŸ ืœืฉื™ื ื•ื™ (ื™ืฉ ืฉื™ื’ื™ื“ื• ืฉื˜ื›ื ื™ืช ื”ื•ื ืœื), ืžืคืชื—ื™ื ืฆืจื™ื›ื™ื ืœื›ืชื•ื‘ ืืคืœื™ืงืฆื™ื•ืช ืฉืœื ืžืชื™ื™ื—ืกื•ืช ืœื‘ืงืฉื” ื›ืืœ ื™ืฉื•ืช ื’ืœื•ื‘ืœื™ืช ื‘ืื•ืคืŸ ืขืงืจื•ื ื™. ื–ื” ืžืชืื™ื ื”ื™ื˜ื‘ ืœืงื•ื ืกืคื˜ ืฉืœ ืชื”ืœื™ื›ื™ PHP ืืจื•ื›ื™ื. ื”ื™ื™ืฉื•ื ื”ืกื•ืคื™ ืฉืœื ื•, ืฉืขื“ื™ื™ืŸ ืœื ืงื™ื‘ืœ ืฉื, ื ืจืื” ื›ืš:

RoadRunner: PHP ืœื ื‘ื ื•ื™ ืœืžื•ืช, ืื• ื’ื•ืœื ื’ ืœื”ืฆืœื”

ื”ื™ื›ืจื•ืช ืขื RoadRunner - ืฉืจืช ื™ื™ืฉื•ืžื™ PHP ื‘ืขืœ ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื

ืžืฉื™ืžืช ื”ื‘ื“ื™ืงื” ื”ืจืืฉื•ื ื” ืฉืœื ื• ื”ื™ื™ืชื” ืงืฆื” ืื—ื•ืจื™ ืฉืœ API, ืฉืคื•ืฆืฅ ืžืขืช ืœืขืช ื‘ืงืฉื•ืช ื‘ืœืชื™ ืฆืคื•ื™ื•ืช (ื”ืจื‘ื” ื™ื•ืชืจ ืžื”ืจื’ื™ืœ). ืœืžืจื•ืช ืฉ-nginx ื”ืกืคื™ืง ื‘ืจื•ื‘ ื”ืžืงืจื™ื, ื ืชืงืœื ื• ื‘ืื•ืคืŸ ืงื‘ื•ืข ื‘-502 ืฉื’ื™ืื•ืช ืžื›ื™ื•ื•ืŸ ืฉืœื ื”ืฆืœื—ื ื• ืœืื–ืŸ ืืช ื”ืžืขืจื›ืช ื‘ืžื”ื™ืจื•ืช ืžืกืคืงืช ืœืขืœื™ื™ื” ื”ืฆืคื•ื™ื” ื‘ืขื•ืžืก.

ื›ื“ื™ ืœื”ื—ืœื™ืฃ ืคืชืจื•ืŸ ื–ื”, ืคืจืกื ื• ืืช ืฉืจืช ื™ื™ืฉื•ืžื™ PHP/Go ื”ืจืืฉื•ืŸ ืฉืœื ื• ื‘ืชื—ื™ืœืช 2018. ื•ืžื™ื“ ืงื™ื‘ืœ ืืคืงื˜ ืžื“ื”ื™ื! ืœื ืจืง ืฉื ืคื˜ืจื ื• ืœื—ืœื•ื˜ื™ืŸ ืžืฉื’ื™ืืช 502, ืืœื ืฉื”ืฆืœื—ื ื• ืœืฆืžืฆื ืืช ืžืกืคืจ ื”ืฉืจืชื™ื ื‘ืฉื ื™ ืฉืœื™ืฉ, ื•ื—ืกื›ื ื• ื”ืจื‘ื” ื›ืกืฃ ื•ื›ื“ื•ืจื™ ื›ืื‘ ืจืืฉ ืœืžื”ื ื“ืกื™ื ื•ืžื ื”ืœื™ ืžื•ืฆืจ.

ืขื“ ืืžืฆืข ื”ืฉื ื”, ืฉื™ืคืจื ื• ืืช ื”ืคืชืจื•ืŸ ืฉืœื ื•, ืคืจืกืžื ื• ืื•ืชื• ื‘-GitHub ืชื—ืช ืจื™ืฉื™ื•ืŸ MIT ื•ืงืจืื ื• ืœื• RoadRunner, ื•ื‘ื›ืš ืžื“ื’ื™ืฉ ืืช ื”ืžื”ื™ืจื•ืช ื•ื”ื™ืขื™ืœื•ืช ื”ืžื“ื”ื™ืžื™ื ืฉืœื•.

ื›ื™ืฆื“ RoadRunner ื™ื›ื•ืœ ืœืฉืคืจ ืืช ืขืจื™ืžืช ื”ืคื™ืชื•ื— ืฉืœืš

ื‘ืงืฉื” RoadRunner ืืคืฉืจื” ืœื ื• ืœื”ืฉืชืžืฉ ื‘-Middleware net/http ื‘ืฆื“ ื”-Go ื›ื“ื™ ืœื‘ืฆืข ืื™ืžื•ืช JWT ืœืคื ื™ ืฉื”ื‘ืงืฉื” ืžื’ื™ืขื” ืœ-PHP, ื›ืžื• ื’ื ืœื˜ืคืœ ื‘-WebSockets ื•ื‘ืžืฆื‘ ืฆื‘ื™ืจื” ื’ืœื•ื‘ืœื™ ื‘-Prometheus.

ื”ื•ื“ื•ืช ืœ-RPC ื”ืžื•ื‘ื ื”, ืืชื” ื™ื›ื•ืœ ืœืคืชื•ื— ืืช ื”-API ืฉืœ ื›ืœ ืกืคืจื™ื•ืช Go ืขื‘ื•ืจ PHP ืžื‘ืœื™ ืœื›ืชื•ื‘ ืขื˜ื™ืคื•ืช ืฉืœ ื”ืจื—ื‘ื•ืช. ื—ืฉื•ื‘ ืžื›ืš, ืขื RoadRunner ืืชื” ื™ื›ื•ืœ ืœืคืจื•ืก ืฉืจืชื™ื ื—ื“ืฉื™ื ืฉืื™ื ื HTTP. ื“ื•ื’ืžืื•ืช ื›ื•ืœืœื•ืช ื”ืคืขืœืช ืžื˜ืคืœื™ื ื‘-PHP AWS ืœืžื‘ื“ื”, ื™ืฆื™ืจืช ืฉื•ื‘ืจื™ ืชื•ืจ ืืžื™ื ื™ื, ื•ืืคื™ืœื• ื”ื•ืกืคื” ื’ืจ"ืค ืœื™ื™ืฉื•ืžื™ื ืฉืœื ื•.

ื‘ืขื–ืจืช ืงื”ื™ืœื•ืช PHP ื•-Go, ืฉื™ืคืจื ื• ืืช ื™ืฆื™ื‘ื•ืช ื”ืคืชืจื•ืŸ, ื”ื’ื“ืœื ื• ืืช ื‘ื™ืฆื•ืขื™ ื”ืืคืœื™ืงืฆื™ื” ืขื“ ืคื™ 40 ื‘ื—ืœืง ืžื”ื‘ื“ื™ืงื•ืช, ืฉื™ืคืจื ื• ื›ืœื™ ืื™ืชื•ืจ ื‘ืื’ื™ื, ื”ื˜ืžืขื ื• ืื™ื ื˜ื’ืจืฆื™ื” ืขื ืžืกื’ืจืช Symfony ื•ื”ื•ืกืคื ื• ืชืžื™ื›ื” ื‘-HTTPS, HTTP/2, ืชื•ืกืคื™ื, ื•-PSR-17.

ืžืกืงื ื”

ื™ืฉ ืื ืฉื™ื ืฉืขื“ื™ื™ืŸ ืœื›ื•ื“ื™ื ื‘ืจืขื™ื•ืŸ ื”ืžื™ื•ืฉืŸ ืฉืœ PHP ื›ืฉืคื” ืื™ื˜ื™ืช ื•ืžืกื•ืจื‘ืœืช ืฉืžืชืื™ืžื” ืจืง ืœื›ืชื™ื‘ืช ืชื•ืกืคื™ื ืœื•ื•ืจื“ืคืจืก. ืื ืฉื™ื ืืœื” ืขืฉื•ื™ื™ื ืืคื™ืœื• ืœื•ืžืจ ืฉืœ-PHP ื™ืฉ ืžื’ื‘ืœื” ื›ื–ื•: ื›ืืฉืจ ื”ืืคืœื™ืงืฆื™ื” ื ื”ื™ื™ืช ื’ื“ื•ืœื” ืžืกืคื™ืง, ืืชื” ืฆืจื™ืš ืœื‘ื—ื•ืจ ืฉืคื” "ื‘ื•ื’ืจืช" ื™ื•ืชืจ ื•ืœืฉื›ืชื‘ ืืช ื‘ืกื™ืก ื”ืงื•ื“ ืฉื ืฆื‘ืจ ื‘ืžืฉืš ืฉื ื™ื ืจื‘ื•ืช.

ืขืœ ื›ืœ ื–ื” ืื ื™ ืจื•ืฆื” ืœืขื ื•ืช: ืชื—ืฉื•ื‘ ืฉื•ื‘. ืื ื• ืžืืžื™ื ื™ื ืฉืจืง ืืชื” ืžื’ื“ื™ืจ ืžื’ื‘ืœื•ืช ืœ-PHP. ืืชื” ื™ื›ื•ืœ ืœื”ืขื‘ื™ืจ ืืช ื›ืœ ื—ื™ื™ืš ื‘ืžืขื‘ืจ ืžืฉืคื” ืื—ืช ืœืื—ืจืช, ื‘ื ื™ืกื™ื•ืŸ ืœืžืฆื•ื ืืช ื”ื”ืชืืžื” ื”ืžื•ืฉืœืžืช ืœืฆืจื›ื™ื ืฉืœืš, ืื• ืฉืืชื” ื™ื›ื•ืœ ืœื”ืชื—ื™ืœ ืœื—ืฉื•ื‘ ืขืœ ืฉืคื•ืช ื›ื›ืœื™ื. ื”ืคื’ืžื™ื ื›ื‘ื™ื›ื•ืœ ืฉืœ ืฉืคื” ื›ืžื• PHP ืขืฉื•ื™ื™ื ืœื”ื™ื•ืช ืœืžืขืฉื” ื”ืกื™ื‘ื” ืœื”ืฆืœื—ืชื”. ื•ืื ืชืฉืœื‘ ืืช ื–ื” ืขื ืฉืคื” ืื—ืจืช ื›ืžื• Go, ืื– ืชื™ืฆื•ืจ ืžื•ืฆืจื™ื ื”ืจื‘ื” ื™ื•ืชืจ ื—ื–ืงื™ื ืžืืฉืจ ืื ื”ื™ื™ืช ืžื•ื’ื‘ืœ ืœืฉื™ืžื•ืฉ ื‘ื›ืœ ืฉืคื” ืื—ืช.

ืœืื—ืจ ืฉืขื‘ื“ื ื• ืขื ื—ื‘ื•ืจื” ืฉืœ Go ื•-PHP, ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื•ืžืจ ืฉืื ื—ื ื• ืื•ื”ื‘ื™ื ืื•ืชื. ืื ื—ื ื• ืœื ืžืชื›ื ื ื™ื ืœื”ืงืจื™ื‘ ืื—ื“ ืœืžืขืŸ ื”ืฉื ื™ - ืœื”ื™ืคืš, ื ื—ืคืฉ ื“ืจื›ื™ื ืœืงื‘ืœ ืขื•ื“ ื™ื•ืชืจ ืขืจืš ืžื”ืžื—ืกื ื™ืช ื”ื›ืคื•ืœื” ื”ื–ื•.

UPD: ืื ื• ืžื‘ืจื›ื™ื ืืช ื”ื™ื•ืฆืจ ืฉืœ RoadRunner ื•ืืช ื”ืžื—ื‘ืจ ื”ืžืฉื•ืชืฃ ืฉืœ ื”ืžืืžืจ ื”ืžืงื•ืจื™ - ืœืื›ืกื™ืก

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”