Skip to content

🤯 High-performance PHP application server, load-balancer and process manager written in Golang

License

Notifications You must be signed in to change notification settings

rizkiheryandi/roadrunner

 
 

Repository files navigation

RoadRunner

Total alerts

RoadRunner is an open-source (MIT licensed) high-performance PHP application server, load balancer, and process manager. It supports running as a service with the ability to extend its functionality on a per-project basis.

RoadRunner includes PSR-7/PSR-17 compatible HTTP and HTTP/2 server and can be used to replace classic Nginx+FPM setup with much greater performance and flexibility.

Official Website | Documentation | Release schedule

Features:

  • Production-ready
  • PCI DSS compliant
  • PSR-7 HTTP server (file uploads, error handling, static files, hot reload, middlewares, event listeners)
  • HTTPS and HTTP/2 support (including HTTP/2 Push, H2C)
  • A Fully customizable server, FastCGI support
  • Flexible environment configuration
  • No external PHP dependencies (64bit version required), drop-in (based on Goridge)
  • Load balancer, process manager and task pipeline
  • Integrated metrics (Prometheus)
  • Workflow engine by Temporal.io
  • Works over TCP, UNIX sockets and standard pipes
  • Automatic worker replacement and safe PHP process destruction
  • Worker create/allocate/destroy timeouts
  • Max jobs per worker
  • Worker lifecycle management (controller)
    • maxMemory (graceful stop)
    • TTL (graceful stop)
    • idleTTL (graceful stop)
    • execTTL (brute, max_execution_time)
  • Payload context and body
  • Protocol, worker and job level error management (including PHP errors)
  • Development Mode
  • Integrations with Symfony, Laravel, Slim, CakePHP, Zend Expressive
  • Application server for Spiral
  • Included in Laravel Octane
  • Automatic reloading on file changes
  • Works on Windows (Unix sockets (AF_UNIX) supported on Windows 10)

Installation:

To get the roadrunner binary file you can use our docker image: spiralscout/roadrunner:2.X.X (more information about image and tags can be found here) or use the GitHub package: ghcr.io/roadrunner-server/roadrunner:2.X.X

  • Docker:
FROM ghcr.io/roadrunner-server/roadrunner:2.X.X AS roadrunner
FROM php:8.1-cli

COPY --from=roadrunner /usr/bin/rr /usr/local/bin/rr

# USE THE RR
  • CLI
$ composer require spiral/roadrunner:v2.0 nyholm/psr7
$ ./vendor/bin/rr get-binary

Configuration can be located in .rr.yaml file (full sample):

version: '2.7'

rpc:
  listen: tcp:https://127.0.0.1:6001

server:
  command: "php worker.php"

http:
  address: "0.0.0.0:8080"

logs:
  level: error

Read more in Documentation.

Example Worker:

<?php

use Spiral\RoadRunner;
use Nyholm\Psr7;

include "vendor/autoload.php";

$worker = RoadRunner\Worker::create();
$psrFactory = new Psr7\Factory\Psr17Factory();

$worker = new RoadRunner\Http\PSR7Worker($worker, $psrFactory, $psrFactory, $psrFactory);

while ($req = $worker->waitRequest()) {
    try {
        $rsp = new Psr7\Response();
        $rsp->getBody()->write('Hello world!');

        $worker->respond($rsp);
    } catch (\Throwable $e) {
        $worker->getWorker()->error((string)$e);
    }
}

Available Plugins:

Plugin Description Latest tag Go version
Provides HTTP, HTTPS, FCGI transports. Extensible with middleware.
HTTP middleware supports constant custom headers and CORS.
HTTP middleware supports Accept-Encoding: GZIP.
HTTP middleware serves static files.
HTTP middleware handles X-Sendfile headers.
HTTP middleware supports NewRelic distributed traces and custom attributes.
HTTP middleware supports RFC7234 cache.
Provides queues support for the RR2 via different drivers
Provides AMQP (0-9-1) protocol support via RabbitMQ
Provides beanstalkd queue support
Provides support for the BoltDB key/value store. Used in the Jobs and KV
SQS driver for the jobs
NATS jobs driver
Provides key-value support for the RR2 via different drivers
Memcached driver for the kv
Memory driver for the jobs, kv, broadcast
Redis driver for the kv, broadcast
Provides configuration parsing support to the all plugins
Provides GRPC support
Provides statistic grabbing capabilities (workers,jobs stat)
Provides broadcasting capabilities to the RR2 via different drivers
Central logger plugin. Implemented via Uber.zap logger, but supports other loggers.
Provides support for the metrics via Prometheus
Reloads workers on the file changes. Use only for the development
Provides support for the ./rr reset command. Reloads workers pools
Provides support for the RPC across all plugins. Collects RPC() interface{} methods and exposes them via RPC
Provides support for the command. Prepare PHP processes
Provides support for the external scripts, binaries which might be started like a service (behaves similar to the systemd services)
Provides support for the health and readiness checks
Provides support for the broadcasting events via websockets
Provides support for the raw TCP payloads and TCP connections
File server to handle static files

Run:

To run application server:

$ ./rr serve

License:

The MIT License (MIT). Please see LICENSE for more information. Maintained by Spiral Scout.

Contributors

Thanks to all the people who already contributed!

About

🤯 High-performance PHP application server, load-balancer and process manager written in Golang

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 90.6%
  • Dockerfile 4.9%
  • Makefile 4.5%