roadrunner

🀯 High-performance PHP application server, process manager written in Go and powered with plugins

MIT License

Downloads
5.5M
Stars
7.7K
Committers
58

Bot releases are hidden (Show)

roadrunner - v2.10.0-rc.5

Published by rustatian over 2 years ago

roadrunner - v2.10.0-rc.4

Published by rustatian over 2 years ago

🩹 Fixes:

  • πŸ› Fix: Service plugin: EPIPE on stdout/err writes. BUG, (thanks, @Grokon)
roadrunner - v2.10.0-rc.3

Published by rustatian over 2 years ago

🩹 Fixes:

  • πŸ› Fix: HTTP plugin: incorrect parent span propogation.
roadrunner - v2.10.0-rc.2

Published by rustatian over 2 years ago

roadrunner - v2.10.0-rc.1

Published by rustatian over 2 years ago

πŸ‘€ New:

  • ✏️ RoadRunner-Temporal plugin now supports local activities. Here is the brief overview: link.
  • ✏️ Add Debian amd64 releases.
  • ✏️ Add signed releases. Starting from the v2.10.0, every released binary can be checked with a provided *.asc key. For example:
$ gpg --verify rr.asc

The openPGP key can be verified here: keyserver

  • ✏️ All proto api for the Go programming language located here: link. To use it, just import the latest stable version go.buf.build/protocolbuffers/go/roadrunner-server/api latest.
  • ✏️ Service plugin now supports auto-reload. It can be added to the reload plugin targets and on change, it'll reload all underlying processes.
  • ✏️ AutoAck jobs option. For the messages (jobs), which are acceptable to lose. Or which execution can lead to a worker's stop (for example - OOM).
  • ✏️ [BETA] OpenTelemetry support. Starting from now, the new_relic middleware is deprecated, it'll receive only dependency updates and will be removed from the RR bundle in the v2.12.0.
    OpenTelemetry plugin supports the following exporters:
    1. OTLP (open telemetry protocol): datadog, new relic.
    2. zipkin
    3. stdout
      All these exporters can send their data via http or grpc clients.

Configuration sample (stdout exporter):

http:
  address: 127.0.0.1:43239
  max_request_size: 1024
  middleware: [gzip, otel]
  pool:
    num_workers: 2
    max_jobs: 0
    allocate_timeout: 60s
    destroy_timeout: 60s

otel:
  insecure: false
  compress: true
  exporter: stdout
  service_name: rr_test
  service_version: 1.0.0

New Relic exporter via http client: link

http:
    address: 127.0.0.1:43239
    max_request_size: 1024
    middleware: [gzip, otel]
    pool:
        num_workers: 2
        max_jobs: 0
        allocate_timeout: 60s
        destroy_timeout: 60s
otel:
  insecure: false
  compress: true
  client: http
  exporter: stdout
  custom_url: ""
  service_name: rr_test
  service_version: 1.0.0
  endpoint: otlp.eu01.nr-data.net:4318
  headers:
    - api-key: xxx # your api key here

PHP worker can access tracing data via w3c headers.

🧹 Chore:

  • πŸ§‘β€πŸ­: All spaces and new-lines from the Service plugin output will be automatically trimmed. CHORE, (thanks, @OO00O0O)
roadrunner - v2.9.4

Published by rustatian over 2 years ago

🩹 Fixes:

  • πŸ› Fix: HTTP plugin: request max body size incorrectly parsed. BUG, (thanks, @Opekunov)
roadrunner - v2.9.3

Published by rustatian over 2 years ago

πŸ‘€ New:

  • ✏️: --silent flag. This flag will hide the startup message and ./rr reset output.

🩹 Fixes:

  • πŸ› Fix: AMQP driver didn't reconnect on timeouts, which led to stopping consuming messages w/o a proper notification. BUG, (thanks @hustlahusky)
  • πŸ› Fix: reset command (./rr reset) gets stuck when using output redirects. BUG, (thanks @maximal)

🧹 Chore:

  • πŸ—οΈ HTTP plugin: better looking error message on wrong status code. ISSUE, (thanks @gam6itko)
roadrunner - v2.9.2

Published by rustatian over 2 years ago

🩹 Fixes:

  • πŸ› Fix: incorrect -w flag behavior (set working dir). BUG, (thanks @rauanmayemir)
  • πŸ› Fix: incorrect process statistic (number of processes) for the service plugin.
roadrunner - v2.10.0-alpha.1

Published by rustatian over 2 years ago

πŸ‘€ New:

  • ✏️ [ALPHA] HTTP response streaming. Available only in the alfa builds.

Worker sample:

<?php

use Nyholm\Psr7\Factory\Psr17Factory;
use Nyholm\Psr7\Response;
use Nyholm\Psr7\Stream;
use Spiral\RoadRunner;

ini_set('display_errors', 'stderr');
require __DIR__ . "/vendor/autoload.php";

$worker = RoadRunner\Worker::create();
$psr7 = new RoadRunner\Http\PSR7Worker(
    $worker,
    new Psr17Factory(),
    new Psr17Factory(),
    new Psr17Factory()
);

$psr7->chunk_size = 10 * 10 * 1024;
$filename = 'file.tmp'; // big file or response

while ($req = $psr7->waitRequest()) {
    try {
        $fp = \fopen($filename, 'rb');
        \flock($fp, LOCK_SH);
        $resp = (new Response())->withBody(Stream::create($fp));
        $psr7->respond($resp);
    } catch (\Throwable $e) {
        $psr7->getWorker()->error((string)$e);
    }

Known issues:

  1. RR will not notify a worker if HTTP connection was interrupted. RR will read all responses from the worker and drop them. That will be fixed in the stable streaming release.
  2. Sometimes RR may miss the immediate error from the worker and send a 0 payload with 200 status. This is related only to the HTTP response.
  • ✏️ [BETA] Local activities support link.
roadrunner - v2.9.1

Published by rustatian over 2 years ago

⚠️ Important info. trusted_subnets HTTP option will work only when proxy_ip_parser was added to the list of the middleware.

🩹 Fixes:

  • πŸ› Fix: incorrect usage of the ExecWithTTL SDK method which leads to skipping the exec_ttl supervisor option BUG (thanks @Baiquette)

πŸ‘€ New:

  • ✏️ Add proxy_ip_parser HTTP middleware responsible for parsing X-Forwarded-For, Forwarded, True-Client-IP and X-Real-Ip.
roadrunner - v2.9.0

Published by rustatian over 2 years ago


πŸ‡ΊπŸ‡¦πŸ‡ΊπŸ‡¦πŸ‡ΊπŸ‡¦ StandWithUkraine πŸ‡ΊπŸ‡¦πŸ‡ΊπŸ‡¦πŸ‡ΊπŸ‡¦


πŸ‘€ New:

  • ✏️ API: add service proto api to manage services, FR (thanks @butschster). Documentation is here: link.
  • ✏️ Grafana dashboard PATH. Exposed metrics:
  1. General:
    1. Uptime (seconds).
    2. Memory used by RR (MB).
    3. Number of active goroutines.
  2. HTTP:
    1. Number of workers by its state (ready, working, invalid).
    2. Total RSS memory used by workers.
    3. Memory used by each worker individually (with PID).
    4. Latency (ms).
    5. Requests queue size.
    6. Requests per minute.
  3. JOBS:
    1. Number of workers by its state (ready, working, invalid).
    2. Total RSS memory used by workers.
    3. Memory used by each worker individually (with PID).
    4. Successfully processed jobs (rate, 5m).
    5. Failed jobs (rate, 5m).

🩹 Fixes:

  • πŸ› Fix: Goroutines leak in the amqp plugin when destroying pipelines.

🧹 Chore:

  • πŸ§‘β€πŸ­ Update all dependencies to the most recent versions.
roadrunner - v2.8.8

Published by rustatian over 2 years ago

🩹 Fixes:

  • πŸ› Fix: Chdir (if the user sets the -w flag) before searching for the configuration.

πŸ“¦ Packages:

  • πŸ“¦ Update SQS and Go deps to the most recent versions.
roadrunner - v2.8.7

Published by rustatian over 2 years ago

🩹 Fixes:

  • πŸ› Fix: Websocket access validator requests don't send cookies BUG, (@steffendietz)
roadrunner - v2.9.0-alpha.1

Published by rustatian over 2 years ago

Reason for This PR

  • Minor release cycle.

- ⚠️ Please, share your feedback about streaming here: https://github.com/roadrunner-server/roadrunner/discussions/1070

Description of Changes

πŸ‘€ New:

  • ✏️ [ALPHA] HTTP response streaming. Starting from the v2.9.0, RR is capable of streaming responses.
    To turn on that feature, please, add the following lines to the configuration:
experimental:
    response_streams: true

Worker sample:

<?php

use Nyholm\Psr7\Factory\Psr17Factory;
use Nyholm\Psr7\Response;
use Nyholm\Psr7\Stream;
use Spiral\RoadRunner;

ini_set('display_errors', 'stderr');
require __DIR__ . "/vendor/autoload.php";

$worker = RoadRunner\Worker::create();
$psr7 = new RoadRunner\Http\PSR7Worker(
    $worker,
    new Psr17Factory(),
    new Psr17Factory(),
    new Psr17Factory()
);

$psr7->chunkSize = 10 * 10 * 1024;
$filename = 'file.tmp'; // big file or response

while ($req = $psr7->waitRequest()) {
    try {
        $fp = \fopen($filename, 'rb');
        \flock($fp, LOCK_SH);
        $resp = (new Response())->withBody(Stream::create($fp));
        $psr7->respond($resp);
    } catch (\Throwable $e) {
        $psr7->getWorker()->error((string)$e);
    }
}

Known issues:

  1. RR will not notify a worker if the HTTP connection is interrupted, and RR will read all responses from the worker and drop them off. That will be fixed in the stable streaming release.
  2. Sometimes, RR may miss the immediate error from the worker and send a 0 payload with 200 status. This is related only to the HTTP response.
  • ✏️ API: add service proto API to manage services, FR (reporter @butschster)

🧹 Chore:

  • πŸ§‘β€πŸ­ Update all dependencies to the most recent versions.
roadrunner - v2.8.5

Published by rustatian over 2 years ago

🧹 Chore:

  • πŸ§‘β€πŸ­ Update all dependencies to the most recent versions.

🩹 Fixes:

  • πŸ› Fix: Incorrect pointer assign to read the configuration BUG
roadrunner - v2.8.4

Published by rustatian over 2 years ago

v2.8.4 (17.03.2022)

πŸ‘€ New:

  • Go update to version 1.18

🧹 Chore:

  • πŸ§‘β€πŸ­ Update all dependencies to the most recent versions.

🩹 Fixes:

  • πŸ› Fix: No longer able to set environment variables for service BUG, (reporter @andrei-dascalu)
roadrunner - v2.8.3

Published by rustatian over 2 years ago

πŸ‘€ New:

  • ✏️ Better env variables parser. Now RR is able to parse the sentences like: "mysql://${MYSQL_USER}:${MYSQL_PASSWORD}@${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}?serverVersion=5.7" and get all environment variables. FR, (reporter @Tony-Sol)

🧹 Chore:

  • πŸ§‘β€πŸ­ Update all dependencies to the most recent versions.
  • πŸ§‘β€πŸ­ Remove configuration plugin from the root.go and other files. Used only in the serve where it should be.

🩹 Fixes:

  • πŸ› Fix: call of the kv.TTL for the Redis drivers returns non RFC3339 time format BUG, (reporter @antikirra)
  • πŸ› Fix: rr workers command doesn't work for the service plugin BUG, (reporter @OO00O0O)
roadrunner - v2.8.2

Published by rustatian over 2 years ago

🧹 Chore:

  • Docker: migrate to the trivy action instead of grype PR, (contributor: @tarampampam)

🩹 Fixes:

  • πŸ› Fix: CONFIG: version can't be passed as inline option: BUG, (reporter @nunomaduro)
roadrunner - v2.8.1

Published by rustatian over 2 years ago

🩹 Fixes:

  • πŸ› Fix: HTTP: incorrect middleware chain order BUG, (reporter @nitrogenium)
http:
  middleware: ["static", "gzip"]

Middleware executed from the right to left, i.e. first will be gzip and then static.

πŸ‘€ New:

  • ✏️ HTTP: Properly parse Forwarder header, RFC, FR (reporter @digitalkaoz)
  • ✏️ TEMPORAL: Add rr_activities_pool_queue_size and rr_workflows_pool_queue_size metrics. These metrics shows the number of activities/workflows waiting for the worker BUG, (reporter @Zylius)
  • ✏️ API: Queuer interface for the workers pool to show the number of requests waiting for the worker. Implemented in SDK.
roadrunner - v2.8.0

Published by rustatian over 2 years ago

⚠️ For the RR v2.8.0 your .rr.yaml configuration version should be 2.7.

Update your config and add version: '2.7' at the top.

πŸ‘€ New:

  • ✏️ Timeout for the SQS create/get queue operations (30seconds) FR (reporter @sergey-telpuk)
  • ✏️ New workers pool option -> command:
http: 
    address: 127.0.0.1:8080
    max_request_size: 256
    middleware: ["headers", "gzip"]
    trusted_subnets: []
 
    # Workers pool settings.     
    pool:           
        command: "php app.php" <---- NEW

This option overrides the server's command with the new one. The new command will inherit all server options. It can be used in any plugin (jobs, grpc, tcp, http, etc) using the workers' pool (http used here as a sample). No need to update your config. By default server command will be used as in the previous RR versions. Note, you can't leave the server command option empty. If you want to override the command in every plugin you use, put a placeholder in the server.command.

  • ✏️ Add Rr_newrelic_ignore header support. Now you can send the Rr_newrelic_ignore:true header, and RR will ignore such transactions. RR will send no data to the newrelic server. FR (reporter @arku31)
  • ✏️ Add support for the SQS FIFO queues FR (reporter @paulermo)
  • ✏️ Add support for the gRPC Healthcheck protocol v1 in the grpc plugin. Doc, FR (reporter @porozhnyy)