Для Laravel вышел пакет Laravel Octane который призван подружить Laravel c Swoole и RoadRunner. Мы уже какое-то время используем RoadRunner вместо php-fpm и поделимся своим опытом использования, какие у этого есть плюсы.
RoadRunner – это высокопроизводительный сервер приложения для PHP с открытым исходным кодом написанный на Go. Основное отличие от php-fpm состоит в том, что RoadRunner взаимодействует с долгоживущими php процессами, в отличии от php-fpm, который создает и убивает новый php процесс при каждом запросе.
Плюсы долгоживущего процесса:
- Не тратится время на booting
- Не тратится время на создание подключения к БД
- Возможность использования in-memory кэша прямо в процессе
Минус такого подхода состоит в том, что он не подходит для всех PHP приложений, т.к. зачастую при написании кода учитывается, что PHP процесс умрет после запроса. Таким образом, нужно уметь следить за утечками памяти, аккуратно работать с глобальным состоянием. Поэтому legacy проекты, скорее всего, на RoadRunner’е на заведутся.
Однако у RoadRunner’а есть и другие полезные функции, например, обратка статики, сжимание ответа, балансировка. Данные функции в типичной связке падают на nginx. А при использовании RoadRunner’а PHP приложение можно поднять вообще без него (nginx’а).
Так же RoadRunner довольно легко расширяем. Можно использовать его компоненты для собственного application сервера и получить возможность, например, обработки каких-то запросов прямо на Go, работать с websocket’ами.
Сам по себе RoadRunner не новая разработка, ему уже пара лет. Однако при официальной поддержке в виде Laravel Octane можно быть уверенным, что фреймворк готов к работе с ним.
Мы провели небольшой тест на одном реальном проекте, где сравнили скорость php-fpm и roadrunner. Результаты получились следующими:
php-fpm:
plain text: 1150 RPS
single query: 530 RPS
roadrunner:
plain text: 2200 RPS
single query: 1600 RPS
plain text -- запрос отдающий константный JSON
single query -- запрос отдающий результат одного запроса к БД в формате JSON
Виден существенный прирост в скорости, который обусловлен отсутствием времени на booting и использованием постоянного подключения к БД.