Skip to content
RoadRunner 3

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_limiter zwraca 429 z nagłówkiem Retry-After. W static pojawiły się ustawienia cache'owania oraz komenda rr reset static.
  • gRPC. Server reflection przez Protoreg oraz szczegóły google.rpc.Status w 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/slog z 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. /livez i /readyz działają jako aliasy /health i /ready.

Breaking changes ​

Pełną listę kroków znajdziesz w przewodniku migracji z v2025 do v3. Najbardziej odczuwalne zmiany:

ObszarCo się zmieniło
HTTP middlewareŻądanie przechodzi przez http.middleware od lewej do prawej. Jeśli chcesz zachować dotychczasową kolejność, odwróć listę.
HTTP/2Cleartext HTTP/2 działa wyłącznie w trybie prior knowledge. Upgrade: h2c nie jest już obsługiwany.
AMQPUstawienia brokera trafiają do nazwanych połączeń, a config.version usunięto.
LoggerUsunię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.
TracingUsunięto natywny eksporter Zipkin. Użyj OTLP.
RPCGoridge v4 nie obsługuje MessagePack. Do wyboru są JSON, protobuf, Gob i raw.
JobsNagłówek pool jest zarezerwowany do kierowania zadań do nazwanej puli. Domyślna wartość pipeline_size to teraz 100000.
NATSPo zatrzymaniu pipeline'u stream jest domyślnie zachowywany.
CentrifugeUsunięto metodę centrifuge.RateLimit.
envfileenvfile z najwyższego poziomu konfiguracji ładuje się bez trybu experimental. Wskazany plik musi istnieć.
server.on_init.envTe wartości nadpisują odziedziczone zmienne środowiskowe.
Plugin TCPRoadRunner 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/* (zamiast spiral/* i roadrunner-php/*).
  • Przestrzenie nazw klas pozostały bez zmian, żeby zachować kompatybilność wsteczną.
  • Każdy nowy pakiet deklaruje replace dla starej nazwy z self.version. Wyjątkiem jest metapakiet - piszemy o nim niżej.
  • Metapakiet spiral/roadrunner nazywa się teraz roadrunner/roadrunner. Pakiety roadrunner/* 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.
  • 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.
Stara nazwaNowa nazwaStatus
spiral/roadrunnerroadrunner/roadrunnerWersja
spiral/roadrunner-workerroadrunner/workerWersja Psalm Pokrycie MSI
spiral/roadrunner-httproadrunner/httpWersja Psalm Pokrycie MSI
spiral/roadrunner-grpcroadrunner/grpcWersja Psalm Pokrycie MSI
spiral/roadrunner-jobsroadrunner/jobsWersja Psalm Pokrycie MSI
spiral/roadrunner-kvroadrunner/kvWersja Psalm Pokrycie MSI
spiral/roadrunner-metricsroadrunner/metricsWersja Psalm Pokrycie MSI
spiral/roadrunner-servicesroadrunner/servicesWersja Psalm Pokrycie MSI
spiral/goridgeroadrunner/goridgeWersja Psalm Pokrycie MSI
spiral/roadrunner-cliroadrunner/cliWersja Psalm Pokrycie MSI
roadrunner-php/app-loggerroadrunner/app-loggerWersja Psalm Pokrycie MSI
roadrunner-php/centrifugoroadrunner/centrifugoWersja Psalm Pokrycie MSI
roadrunner-php/lockroadrunner/lockWersja Psalm Pokrycie MSI
roadrunner-php/symfony-lock-driverroadrunner/symfony-lock-driverWersja Psalm Pokrycie MSI
roadrunner-php/version-checkerroadrunner/version-checkerWersja Psalm Pokrycie MSI
roadrunner-php/roadrunner-api-dtoroadrunner/api-dtoWersja

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.

Zużycie pamięci RoadRunnera v2025, RoadRunnera v3 i dispatchera Rapiry przy rosnącym obciążeniu

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

Zaktualizowano: