RoadRunner — это высокопроизводительный сервер приложений PHP, балансировщик нагрузки и менеджер процессов.
RoadRunner написан на языке Go, он прост в установке, по принципу действия заменяет собой PHP-FPM.
Поддерживает xDebug и его аналоги, а также инструменты профилирования и мониторинга, такие как Datadog и New Relic.
Подробнее в документации RoadRunner.
Для правильной работы приложения, запущенного при помощи этой технологии, оно должно быть разработано с поддержкой асинхронного режима.
В асинхронном режиме переиспользуются загруженные конфигурации фреймворка, классы, инициализированные сервисы, кешированные данные, что значительно ускоряет работу.
Но вместе с этим есть характерные особенности, такие как необходимость больше следить за утечками памяти и устранять блокирующие операции, также многие из привычных сторонних библиотек не поддерживают асинхронный режим.
Хранение состояния (state) в логических частях приложения становится нежелательным, особенно, если оно связано с запросом.
Установка ресурсов сервера RoadRunner производится из официального репозитория: github.com/roadrunner-server/roadrunner.
Под RoadRunner необходимо будет изменить файл /public/index.php, чтобы фреймворк HLEB2 выполнялся в цикле.
Базовый рабочий пример:
Для RoadRunner также нужно создать конфигурационный файл .rr.yaml в корневой директории проекта (предполагается, что скомпилированный файл сервера c названием rr находится там же).
Пример минимальной рабочей конфигурации в .rr.yaml:
version: '3' server: command: 'php ./public/index.php' http: address: :8088 middleware: - gzip - static static: dir: public forbid: - .php - .htaccess pool: num_workers: 6 max_jobs: 64 debug: false supervisor: max_worker_memory: 5 metrics: address: '127.0.0.1:2113'
В данной конфигурации RoadRunner работа одного процесса (воркера) ограничена по выставленному максимуму допустимой памяти в настройках: http.pool.supervisor.max_worker_memory в мегабайтах. Поэтому, если процесс превысил этот лимит, RoadRunner его правильно завершает и приступает к следующему.
Сервер RoadRunner запускается консольной командой:
$./rr serve
Согласно конфигурации, приложение будет доступно по адресу:
http://localhost:8088
Метрики работы сервера в формате Prometheus:
http://localhost:2113