RoadRunner 3 wydany
Z przyjemnością ogłaszamy wydanie RoadRunnera 3.
RoadRunner 3 to ostatnia wersja major w dającej się przewidzieć przyszłości, z bardzo stabilnym API. Przy okazji tego wydania zamknęliśmy backlog z poprzednich wersji RoadRunnera i wróciliśmy do czytelnego schematu wersjonowania: zrezygnowaliśmy z wersji kalendarzowych na rzecz SemVer. RoadRunner 3 nadal będzie dostawał poprawki błędów i łatki bezpieczeństwa, ale zespół skupia się teraz przede wszystkim na rozwoju Rapiry.
Poniżej opisujemy, co zmieniło się w serwerze i pakietach PHP oraz jak przeprowadzić aktualizację.
Najważniejsze zmiany
Pełną listę znajdziesz w release notes. W skrócie:
- Pluginy w standardowym buildzie. Doszły driver kolejek NSQ, rate limiting dla HTTP, kompresja Zstd i rejestr protobuf (Protoreg). Plugin TCP został usunięty.
- HTTP. Obsługa PROXY protocol v1 i v2 z jawną listą zaufanych proxy. Middleware
rate_limiterzwraca429z nagłówkiemRetry-After. Wstaticpojawiły się ustawienia cache'owania oraz komendarr reset static. - gRPC. Server reflection przez Protoreg oraz szczegóły
google.rpc.Statusw logach błędów. - Jobs. Nazwane pule workerów: pipeline można przypisać do osobnej puli workerów PHP. AMQP obsługuje nazwane połączenia z różnymi brokerami. Kafka potrafi czytać tylko z wybranych partycji.
- Lock. Nowy backend Redis do blokad współdzielonych przez kilka instancji RoadRunnera.
- Logger. Logger korzysta teraz z
log/slogz biblioteki standardowej Go, a zapis na wyjście nie blokuje. - Sockety uniksowe. Dla listenerów i relay workerów można ustawić uprawnienia, właściciela i grupę.
- Status.
/livezi/readyzdziałają jako aliasy/healthi/ready.
Breaking changes
Pełną listę kroków znajdziesz w przewodniku migracji z v2025 do v3. Najbardziej odczuwalne zmiany:
| Obszar | Co się zmieniło |
|---|---|
| HTTP middleware | Żądanie przechodzi przez http.middleware od lewej do prawej. Jeśli chcesz zachować dotychczasową kolejność, odwróć listę. |
| HTTP/2 | Cleartext HTTP/2 działa wyłącznie w trybie prior knowledge. Upgrade: h2c nie jest już obsługiwany. |
| AMQP | Ustawienia brokera trafiają do nazwanych połączeń, a config.version usunięto. |
| Logger | Usunięto file_logger_options i wbudowaną rotację. Użyj output i zewnętrznego narzędzia do rotacji logów. Gdy kolejka się zapełni, nowe wpisy są odrzucane. |
| Tracing | Usunięto natywny eksporter Zipkin. Użyj OTLP. |
| RPC | Goridge v4 nie obsługuje MessagePack. Do wyboru są JSON, protobuf, Gob i raw. |
| Jobs | Nagłówek pool jest zarezerwowany do kierowania zadań do nazwanej puli. Domyślna wartość pipeline_size to teraz 100000. |
| NATS | Po zatrzymaniu pipeline'u stream jest domyślnie zachowywany. |
| Centrifuge | Usunięto metodę centrifuge.RateLimit. |
envfile | envfile z najwyższego poziomu konfiguracji ładuje się bez trybu experimental. Wskazany plik musi istnieć. |
server.on_init.env | Te wartości nadpisują odziedziczone zmienne środowiskowe. |
| Plugin TCP | RoadRunner 3 go nie obsługuje. |
Na najwyższym poziomie .rr.yaml nadal podajesz version: "3". Do budowania ze źródeł potrzebujesz Go 1.27 lub nowszego. Autorzy pluginów w Go muszą przejść na api-go/v6, api-plugins/v6, pool/v2, goridge/v4 i *slog.Logger. Velox, czyli narzędzie do budowania RoadRunnera, korzysta z nowego formatu konfiguracji modułów; usunięto z niego zdalny serwer buildów i targety dla Windowsa. Gotowe binarki dla Windowsa nadal są dostępne w wydaniu.
Pakiety PHP
Razem z serwerem zaktualizowaliśmy pakiety PHP. Najważniejsze zmiany:
- Minimalna wersja PHP to 8.2.
- Wszystkie pakiety mają nowy vendor
roadrunner/*(zamiastspiral/*iroadrunner-php/*). - Przestrzenie nazw klas pozostały bez zmian, żeby zachować kompatybilność wsteczną.
- Każdy nowy pakiet deklaruje
replacedla starej nazwy zself.version. Wyjątkiem jest metapakiet - piszemy o nim niżej. - Metapakiet
spiral/roadrunnernazywa się terazroadrunner/roadrunner. Pakietyroadrunner/*wymagająroadrunner/roadrunner ^3.0. Zmiana nazwy pozwoliła nam pozbyć się kilku problemów:- Wersje kalendarzowe 2023.x–2025.x, niezgodne z SemVer, uparcie wyświetlały się jako najnowsze stabilne wydania. CalVer zostaje w
spiral/roadrunner. - Security advisory CVE-2025-22871 oznacza jako podatne wersje
spiral/roadrunner < 2025.1.0, przez co Composer blokował instalację RoadRunnera 3. Nowa nazwa nie niesie tego bagażu.
- Wersje kalendarzowe 2023.x–2025.x, niezgodne z SemVer, uparcie wyświetlały się jako najnowsze stabilne wydania. CalVer zostaje w
- Wszystkie pakiety wymagają RoadRunnera 3. Nie gwarantujemy, że starsze wersje RoadRunnera będą działać z nowymi pakietami.
- Plugin TCP wyleciał z RoadRunnera 3. Jeśli Twoja aplikacja korzysta z pluginu TCP, zalecamy pozostać na RoadRunnerze v2025. Nie dotyczy to transportu
tcp://dla RPC i relay workerów - działa tak samo jak wcześniej.
Drobniejsze usprawnienia:
- Testy przepisaliśmy na Testo.
- Poprawiliśmy wyniki Code Coverage, Mutation Testing i Static Analysis.
- RoadRunner CLI 3.0.0 pobiera binarki za pomocą DLoad.
Aby przeprowadzić migrację, podmień nazwy i wersje pakietów w composer.json.
Jeszcze stabilniej
RoadRunner już wcześniej zapewniał najbardziej niezawodną integrację z PHP – bo co może być stabilniejsze niż STDIN/STDOUT? Mimo to w wersji 3 znaleźliśmy jeszcze coś do poprawienia: zużycie pamięci jest teraz bardziej równomierne, a wydajność znów nieco wzrosła.

Jeśli jednak potrzebujesz maksymalnej wydajności endpointów HTTP lub gRPC, być może nadszedł czas, by przyjrzeć się Rapirze.
