Вышел RoadRunner 3
Рады сообщить, что мы выпустили RoadRunner 3.
RoadRunner 3 - последняя мажорная версия в обозримом времени с супер стабильным API. К этому релизу мы закрыли бэклог предыдущих версий RoadRunner и вернули понятную схему версионирования: избавились от календарных версий и вернулись к SemVer. RoadRunner 3 продолжит получать исправления ошибок и обновления безопасности, однако основные силы команды теперь направлены на развитие Rapira.
Ниже описано, что изменилось в сервере и PHP-пакетах и как обновиться.
Главные изменения
Полный список есть в заметках к релизу. Основное:
- Плагины в стандартной сборке. Добавлены драйвер очередей NSQ, HTTP rate limiting, сжатие Zstd и реестр protobuf (Protoreg). TCP-плагин удалён.
- HTTP. Поддержка PROXY protocol v1 и v2 с явным списком доверенных прокси. Middleware
rate_limiterвозвращает429сRetry-After. Вstaticпоявились настройки кешей и командаrr reset static. - gRPC. Server reflection через Protoreg и детали
google.rpc.Statusв логах ошибок. - Jobs. Именованные пулы воркеров: пайплайн можно привязать к отдельному пулу PHP-воркеров. AMQP поддерживает именованные подключения к разным брокерам. Kafka умеет читать выбранные партиции.
- Lock. Новый бэкенд Redis для блокировок между несколькими экземплярами RoadRunner.
- Logger. Логгер переведён на Go
log/slog, запись в вывод стала неблокирующей. - Unix-сокеты. Для слушателей и relay воркеров можно задать права, владельца и группу.
- Status.
/livezи/readyzработают как алиасы/healthи/ready.
Ломающие изменения
Пошаговый список - в руководстве по обновлению с v2025 на v3. Самое заметное:
| Область | Что изменилось |
|---|---|
| HTTP middleware | Запрос проходит http.middleware слева направо. Чтобы сохранить прежний порядок, разверните список. |
| HTTP/2 | Cleartext HTTP/2 работает только через prior knowledge. Upgrade: h2c больше не поддерживается. |
| AMQP | Настройки брокера переносятся в именованные подключения, config.version удалён. |
| Logger | file_logger_options и встроенная ротация удалены. Используйте output и внешний инструмент ротации. При переполнении очереди новые записи отбрасываются. |
| Трейсинг | Нативный экспортер Zipkin удалён. Используйте OTLP. |
| RPC | Goridge v4 не поддерживает MessagePack. Доступны JSON, protobuf, Gob и raw. |
| Jobs | Заголовок pool зарезервирован для маршрутизации в именованный пул. pipeline_size по умолчанию теперь 100000. |
| NATS | При остановке пайплайна стрим по умолчанию сохраняется. |
| Centrifuge | Метод centrifuge.RateLimit удалён. |
envfile | Корневой envfile загружается без experimental-режима. Указанный файл должен существовать. |
server.on_init.env | Значения переопределяют унаследованные переменные окружения. |
| TCP-плагин | Не поддерживается в RoadRunner 3. |
В корне .rr.yaml по-прежнему указывается version: "3". Для сборки из исходников нужен Go 1.27 или новее. Авторам Go-плагинов нужно перейти на api-go/v6, api-plugins/v6, pool/v2, goridge/v4 и *slog.Logger. Сборщик Velox использует новую конфигурацию модулей, а удалённый сервер сборки и цели Windows из него убраны. Готовые бинарники для Windows в релизе есть.
PHP-пакеты
Вместе с сервером обновились и PHP-пакеты. Основное:
- Минимальная версия PHP: 8.2.
- Новое имя вендора
roadrunner/*для всех пакетов (вместоspiral/*иroadrunner-php/*). - Неймспейсы классов не изменились ради обратной совместимости.
- Каждый новый пакет объявляет
replaceстарого имени сself.version. Исключение — метапакет, о нём ниже. - Метапакет
spiral/roadrunnerтеперь называетсяroadrunner/roadrunner. Пакетыroadrunner/*требуютroadrunner/roadrunner ^3.0. Переименование пакета оградило нас от нескольких проблем:- Календарные версии 2023.x–2025.x, не соответствующие SemVer, постоянно всплывали как стабильные последние версии. CalVer остался в
spiral/roadrunner. - Advisory CVE-2025-22871 отмечена как уязвимость для
spiral/roadrunner < 2025.1.0, что блокировало установку RoadRunner 3 через Composer. С новым именем этого бремени нет.
- Календарные версии 2023.x–2025.x, не соответствующие SemVer, постоянно всплывали как стабильные последние версии. CalVer остался в
- Все пакеты требуют RoadRunner 3. Работа старых версий RoadRunner с новыми пакетами не гарантируется.
- TCP-плагин выпилен из RoadRunner 3. Приложениям с TCP-плагином рекомендуется остаться на RoadRunner v2025. Это не касается транспорта
tcp://для RPC и relay воркеров: он работает как раньше.
Полировка:
- Тесты переписаны на Testo.
- Показатели Code Coverage, Mutation Testing и Static Analysis улучшены.
- RoadRunner CLI 3.0.0 скачивает бинарники через DLoad.
Для миграции замените имена и версии в composer.json.
Ещё стабильнее
RoadRunner и раньше давал самую надёжную интеграцию с PHP: что может быть стабильнее STDIN/STDOUT? Но даже здесь в версии 3 мы нашли, что улучшить: потребление памяти стало ровнее, а производительность ещё немного выросла.

Однако если вам нужна максимальная производительность HTTP- или gRPC-эндпоинтов, возможно, пришло время присмотреться к Rapira.
