golang roadrunner中文文档(一)基础介绍

2021年5月24日14:34:05

golang roadrunner中文文档(一)基础介绍

golang roadrunner中文文档(二)PHP Workers

golang roadrunner中文文档(三)HTTPS 和 HTTP/2

golang roadrunner中文文档(四)app服务器

golang roadrunner中文文档(五)集成到其他服务 docker

 

官方文档:https://roadrunner.dev/docs/php-worker

目录

RoadRunner v1.0 的文档可在此处获得

  • 介绍
    • 它是什么?
    • 特征
    • 安装
    • 配置参考
    • 执照
  • PHP Workers
    • Workers
    • 环境
    • 开发者模式
    • 错误处理
    • 重启
    • 流程主管
    • RPC 到应用服务器
    • 注意事项
    • 调试
  • HTTP 和 HTTP/2
    • HTTP 和 HTTP/2
    • 静态内容
    • 标题
    • Golang 中间件
  • 应用服务器
    • CLI 命令
    • 日志记录
    • 自动重装
    • 生产用途
    • 编写 RR systemd 单元文件
    • Prometheus Metrics
    • 健康检查
    • 搭建服务器
    • RPC
    • 编写插件
    • 服务插件
  • 工作流引擎
    • 关于 Temporal.IO
    • 工人
  • 集成 V1
    • Migration from V1 to V2
    • CakePHP
    • Laravel
    • Slim
    • Spiral Framework
    • Symfony Framework
    • Symlex Framework
    • Ubiquity Framework
    • Zend Expressive
    • Yii2 and Yii3
    • Phalcon3 and Phalcon4
    • Mezzio
    • Chubbyphp Framework
    • All Composer Libraries
  • Docker
    • Ports and Containers
    • Available Images

 

基础介绍

它是什么?

RoadRunner 是用 Golang 编写的 PHP 应用程序的基础架构级框架。它以worker的形式运行您的应用程序。

高朗

在 Golang 端 RoadRunner 在goroutine上运行你的 PHP 应用程序, 并在多个 worker 之间平衡传入的有效负载。

基础图

可以从 HTTP 请求、AWS Lambda、队列或任何其他方式接收数据。

PHP

RoadRunner 在传入请求之间保持 PHP worker 处于活动状态。这意味着您可以完全消除引导加载时间(例如框架初始化)并大大加快繁重的应用程序。

基础图

由于 worker 位于常驻内存中,因此所有打开的资源将保持打开以供下一个请求使用。使用 Goridge RPC,您可以快速将一些复杂的计算卸载到应用服务器。例如,安排后台 PHP job。

关于RoadRunner

最新稳定版本 GoDoc 构建状态 去报告卡 审查员代码质量 编码病毒

RoadRunner 是一个开源(MIT 许可)、高性能 PHP 应用程序服务器、负载均衡器和进程管理器。它支持作为服务运行,能够在每个项目的基础上扩展其功能。RoadRunner 包括 PSR-7 兼容的 HTTP 服务器。

特征:

  • 生产就绪
  • 符合 PCI DSS
  • PSR-7 HTTP 服务器(文件上传、错误处理、静态文件、热重载、中间件、事件监听器)
  • HTTPS 和 HTTP/2 支持(包括 HTTP/2 Push、H2C)
  • 一个完全可定制的服务器,FastCGI 支持
  • 灵活的环境配置
  • 无外部 PHP 依赖(需要 64 位版本),嵌入式(基于Goridge
  • 负载平衡器、流程管理器和任务管道
  • 集成指标(Prometheus)
  • Temporal.io 的工作流引擎
  • 在 TCP、UNIX 套接字和标准管道上工作
  • 自动更换Worker 和安全的 PHP 进程销毁
  • Worker 创建/分配/销毁超时
  • 每个Worker 的最大工作量
  • Worker 生命周期管理(控制器)
    • maxMemory(优雅停止)
    • TTL(优雅停止)
    • idleTTL(优雅停止)
    • execTTL (brute, max_execution_time)
  • 有效负载上下文和正文
  • 协议、工作者和作业级错误管理(包括 PHP 错误)
  • 开发模式
  • 与 Symfony、Laravel、Slim、CakePHP、Zend Expressive 的集成
  • Spiral应用服务器
  • 文件更改时自动重新加载
  • 适用于 Windows(Windows 10 支持的 Unix 套接字 (AF_UNIX))

执照:

麻省理工学院许可证 (MIT)。请参阅LICENSE以获取更多信息。通过 SpiralScout。

安装

获取最新 RoadRunner 版本的最简单方法是使用预构建的发行版二进制文件之一,这些文件可用于 OSX、Linux、FreeBSD 和 Windows。使用这些二进制文件的说明位于 GitHub版本页面 上

通过 Composer 安装

您还可以使用 Composer 软件包附带的命令自动安装 RoadRunner,运行:

$ composer require spiral/roadrunner
$ ./vendor/bin/rr get

服务器二进制文件将在您的项目的根目录中可用。

PHP 的扩展php-curl并且php-zip需要自动下载 RoadRunner。

建造 RoadRunner

RoadRunner 可以在 Linux、OSX、Windows 和其他 64 位环境上编译,因为唯一的要求是Go 1.13+

要获取所有需要的依赖项:

$ go mod download

构建:

$ make

去测试:

$ make test

配置

每个 RoadRunner 插件都需要正确配置。默认情况下,此类配置会合并到一个文件中,该文件必须位于项目的根目录中。每个服务配置都位于指定部分下。配置文件必须命名为.rr.{format}格式所在的位置ymljson以及其他支持的spf13/viper.

配置参考

这是启用所有 RoadRunner 功能的完整配置参考。

rpc:
  # TCP address:port for listening.
  #
  # Default: "tcp://127.0.0.1:6001"
  listen: tcp://127.0.0.1:6001

# Application server settings (docs: https://roadrunner.dev/docs/php-worker)
server:
  # Worker starting command, with any required arguments.
  #
  # This option is required.
  command: "php psr-worker.php"

  # User name (not UID) for the worker processes. An empty value means to use the RR process user.
  #
  # Default: ""
  user: ""

  # Group name (not GID) for the worker processes. An empty value means to use the RR process user.
  #
  # Default: ""
  group: ""

  # Environment variables for the worker processes.
  #
  # Default: <empty map>
  env:
    - SOME_KEY: "SOME_VALUE"
    - SOME_KEY2: "SOME_VALUE2"

  # Worker relay can be: "pipes", TCP (eg.: tcp://127.0.0.1:6001), or socket (eg.: unix:///var/run/rr.sock).
  #
  # Default: "pipes"
  relay: pipes

  # Timeout for relay connection establishing (only for socket and TCP port relay).
  #
  # Default: 60s
  relay_timeout: 60s

# Logging settings (docs: https://roadrunner.dev/docs/beep-beep-logging)
logs:
  # Logging mode can be "development" or "production". Do not forget to change this value for production environment.
  #
  # Development mode (which makes DPanicLevel logs panic), uses a console encoder, writes to standard error, and
  # disables sampling. Stacktraces are automatically included on logs of WarnLevel and above.
  #
  # Default: "development"
  mode: development

  # Logging level can be "panic", "error", "warn", "info", "debug".
  #
  # Default: "debug"
  level: debug

  # Encoding format can be "console" or "json" (last is preferred for production usage).
  #
  # Default: "console"
  encoding: console

  # Output can be file (eg.: "/var/log/rr_errors.log"), "stderr" or "stdout".
  #
  # Default: "stderr"
  output: stderr

  # Errors only output can be file (eg.: "/var/log/rr_errors.log"), "stderr" or "stdout".
  #
  # Default: "stderr"
  err_output: stderr

  # You can configure each plugin log messages individually (key is plugin name, and value is logging options in same
  # format as above).
  #
  # Default: <empty map>
  channels:
    http:
      mode: development
      level: panic
      encoding: console
      output: stdout
      err_output: stderr
    server:
      mode: production
      level: info
      encoding: json
      output: stdout
      err_output: stdout
    rpc:
      mode: production
      level: debug
      encoding: console
      output: stderr
      err_output: stdout

# Workflow and activity mesh service.
#
# Drop this section for temporal feature disabling.
temporal:
  # Address of temporal server.
  #
  # Default: "127.0.0.1:7233"
  address: 127.0.0.1:7233

  # Activities pool settings.
  activities:
    # How many worker processes will be started. Zero (or nothing) means the number of logical CPUs.
    #
    # Default: 0
    num_workers: 0

    # Maximal count of worker executions. Zero (or nothing) means no limit.
    #
    # Default: 0
    max_jobs: 64

    # Timeout for worker allocation. Zero means no limit.
    #
    # Default: 60s
    allocate_timeout: 60s

    # Timeout for worker destroying before process killing. Zero means no limit.
    #
    # Default: 60s
    destroy_timeout: 60s

    # Supervisor is used to control http workers (previous name was "limit", docs:
    # https://roadrunner.dev/docs/php-limit). "Soft" limits will not interrupt current request processing. "Hard"
    # limit on the contrary - interrupts the execution of the request.
    supervisor:
      # How often to check the state of the workers.
      #
      # Default: 1s
      watch_tick: 1s

      # Maximum time worker is allowed to live (soft limit). Zero means no limit.
      #
      # Default: 0s
      ttl: 0s

      # How long worker can spend in IDLE mode after first using (soft limit). Zero means no limit.
      #
      # Default: 0s
      idle_ttl: 10s

      # Maximal worker memory usage in megabytes (soft limit). Zero means no limit.
      #
      # Default: 0
      max_worker_memory: 128

      # Maximal job lifetime (hard limit). Zero means no limit.
      #
      # Default: 0s
      exec_ttl: 60s

  # Internal temporal communication protocol, can be "proto" or "json".
  #
  # Default: "proto"
  codec: proto

  # Debugging level (only for "json" codec). Set 0 for nothing, 1 for "normal", and 2 for colorized messages.
  #
  # Default: ?
  debug_level: 2

# HTTP plugin settings.
http:
  # Host and port to listen on (eg.: `127.0.0.1:8080`).
  #
  # This option is required.
  address: 127.0.0.1:8080

  # Maximal incoming request size in megabytes. Zero means no limit.
  #
  # Default: 0
  max_request_size: 256

  # Middlewares for the http plugin, order is important. Allowed values is: "headers", "static", "gzip".
  #
  # Default value: []
  middleware: ["headers", "static", "gzip"]

  # Allow incoming requests only from the following subnets (https://en.wikipedia.org/wiki/Reserved_IP_addresses).
  #
  # Default: ["10.0.0.0/8", "127.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16",  "::1/128", "fc00::/7", "fe80::/10"]
  trusted_subnets: [
      "10.0.0.0/8",
      "127.0.0.0/8",
      "172.16.0.0/12",
      "192.168.0.0/16",
      "::1/128",
      "fc00::/7",
      "fe80::/10",
  ]

  # File uploading settings.
  uploads:
    # Directory for file uploads. Empty value means to use $TEMP based on your OS.
    #
    # Default: ""
    dir: "/tmp"

    # Deny files with the following extensions to upload.
    #
    # Default: [".php", ".exe", ".bat"]
    forbid: [".php", ".exe", ".bat", ".sh"]

  # Settings for "headers" middleware (docs: https://roadrunner.dev/docs/http-headers).
  headers:
    # Allows to control CORS headers. Additional headers "Vary: Origin", "Vary: Access-Control-Request-Method",
    # "Vary: Access-Control-Request-Headers" will be added to the server responses. Drop this section for this
    # feature disabling.
    cors:
      # Controls "Access-Control-Allow-Origin" header value (docs: https://mzl.la/2OgD4Qf).
      #
      # Default: ""
      allowed_origin: "*"

      # Controls "Access-Control-Allow-Headers" header value (docs: https://mzl.la/2OzDVvk).
      #
      # Default: ""
      allowed_headers: "*"

      # Controls "Access-Control-Allow-Methods" header value (docs: https://mzl.la/3lbwyXf).
      #
      # Default: ""
      allowed_methods: "GET,POST,PUT,DELETE"

      # Controls "Access-Control-Allow-Credentials" header value (docs: https://mzl.la/3ekJGaY).
      #
      # Default: false
      allow_credentials: true

      # Controls "Access-Control-Expose-Headers" header value (docs: https://mzl.la/3qAqgkF).
      #
      # Default: ""
      exposed_headers: "Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma"

      # Controls "Access-Control-Max-Age" header value in seconds (docs: https://mzl.la/2PCSdvt).
      #
      # Default: 0
      max_age: 600

    # Automatically add headers to every request passed to PHP.
    #
    # Default: <empty map>
    request:
      input: "custom-header"

    # Automatically add headers to every response.
    #
    # Default: <empty map>
    response:
      X-Powered-By: "RoadRunner"

  # Settings for "static" middleware (docs: https://roadrunner.dev/docs/http-static).
  static:
    # Path to the directory with static assets.
    #
    # This option is required.
    dir: "/path/to/directory"

    # File extensions to forbid.
    #
    # Default: []
    forbid: [".htaccess"]

    # Automatically add headers to every request.
    #
    # Default: <empty map>
    request:
      input: "custom-header"

    # Automatically add headers to every response.
    #
    # Default: <empty map>
    response:
      X-Powered-By: "RoadRunner"

  # Workers pool settings.
  pool:
    # How many worker processes will be started. Zero (or nothing) means the number of logical CPUs.
    #
    # Default: 0
    num_workers: 0

    # Maximal count of worker executions. Zero (or nothing) means no limit.
    #
    # Default: 0
    max_jobs: 64

    # Timeout for worker allocation. Zero means no limit.
    #
    # Default: 60s
    allocate_timeout: 60s

    # Timeout for worker destroying before process killing. Zero means no limit.
    #
    # Default: 60s
    destroy_timeout: 60s

    # Supervisor is used to control http workers (previous name was "limit", docs:
    # https://roadrunner.dev/docs/php-limit). "Soft" limits will not interrupt current request processing. "Hard"
    # limit on the contrary - interrupts the execution of the request.
    supervisor:
      # How often to check the state of the workers.
      #
      # Default: 1s
      watch_tick: 1s

      # Maximum time worker is allowed to live (soft limit). Zero means no limit.
      #
      # Default: 0s
      ttl: 0s

      # How long worker can spend in IDLE mode after first using (soft limit). Zero means no limit.
      #
      # Default: 0s
      idle_ttl: 10s

      # Maximal worker memory usage in megabytes (soft limit). Zero means no limit.
      #
      # Default: 0
      max_worker_memory: 128

      # Maximal job lifetime (hard limit). Zero means no limit.
      #
      # Default: 0s
      exec_ttl: 60s

  # SSL (Secure Sockets Layer) settings (docs: https://roadrunner.dev/docs/http-https).
  ssl:
    # Host and port to listen on (eg.: `127.0.0.1:443`).
    #
    # Default: ":443"
    address: "127.0.0.1:443"

    # Automatic redirect from http:// to https:// schema.
    #
    # Default: false
    redirect: true

    # Path to the cert file. This option is required for SSL working.
    #
    # This option is required.
    cert: /ssl/server.crt

    # Path to the cert key file.
    #
    # This option is required.
    key: /ssl/server.key

    # Path to the root certificate authority file.
    #
    # This option is optional.
    root_ca: /ssl/root.crt

  # FastCGI frontend support.
  fcgi:
    # FastCGI connection DSN. Supported TCP and Unix sockets. An empty value disables this.
    #
    # Default: ""
    address: tcp://0.0.0.0:7921

  # HTTP/2 settings.
  http2:
    # HTTP/2 over non-encrypted TCP connection using H2C.
    #
    # Default: false
    h2c: false

    # Maximal concurrent streams count.
    #
    # Default: 128
    max_concurrent_streams: 128

# Application metrics in Prometheus format (docs: https://roadrunner.dev/docs/beep-beep-metrics). Drop this section
# for this feature disabling.
metrics:
  # Prometheus client address (path /metrics added automatically).
  #
  # Default: "127.0.0.1:2112"
  address: "127.0.0.1:2112"

  # Application-specific metrics (published using an RPC connection to the server).
  collect:
    app_metric:
      type: histogram
      help: "Custom application metric"
      labels: ["type"]
      buckets: [0.1, 0.2, 0.3, 1.0]
      # Objectives defines the quantile rank estimates with their respective absolute error (for summary only).
      objectives:
        - 1.4: 2.3
        - 2.0: 1.4

# Health check endpoint (docs: https://roadrunner.dev/docs/beep-beep-health). If response code is 200 - it means at
# least one worker ready to serve requests. 500 - there are no workers ready to service requests.
# Drop this section for this feature disabling.
status:
  # Host and port to listen on (eg.: `127.0.0.1:2114`). Use the following URL: http://127.0.0.1:2114/health?plugin=http
  # Multiple plugins must be separated using "&" - http://127.0.0.1:2114/health?plugin=http&plugin=rpc where "http" and
  # "rpc" are active (connected) plugins.
  #
  # This option is required.
  address: 127.0.0.1:2114

  # Response status code if a requested plugin not ready to handle requests
  # Valid for both /health and /ready endpoints
  #
  # Default: 503
  unavailable_status_code: 503

# Automatically detect PHP file changes and reload connected services (docs:
# https://roadrunner.dev/docs/beep-beep-reload). Drop this section for this feature disabling.
reload:
  # Sync interval.
  #
  # Default: "1s"
  interval: 1s

  # Global patterns to sync.
  #
  # Default: [".php"]
  patterns: [".php"]

  # List of included for sync services (this is a map, where key name is a plugin name).
  #
  # Default: <empty map>
  services:
    http:
      # Directories to sync. If recursive is set to true, recursive sync will be applied only to the directories in
      # "dirs" section. Dot (.) means "current working directory".
      #
      # Default: []
      dirs: ["."]

      # Recursive search for file patterns to add.
      #
      # Default: false
      recursive: true

      # Ignored folders.
      #
      # Default: []
      ignore: ["vendor"]

      # Service specific file pattens to sync.
      #
      # Default: []
      patterns: [".php", ".go", ".md"]

# RoadRunner internal container configuration (docs: https://github.com/spiral/endure).
endure:
  # How long to wait for stopping.
  #
  # Default: 30s
  grace_period: 30s

  # Print graph in the graphviz format to the stdout (paste here to visualize https://dreampuf.github.io)
  #
  # Default: false
  print_graph: false

  # Logging level. Possible values: "debug", "info", "warning", "error", "panic", "fatal".
  #
  # Default: "error"
  log_level: error

最低配置

您不需要启用每个插件来使 RoadRunner 工作。给定的配置只启用必要的插件来使 HTTP 端点工作:

rpc:
  listen: tcp://127.0.0.1:6001

server:
  command: "php tests/psr-worker-bench.php"

http:
  address: "0.0.0.0:8080"
  pool:
    num_workers: 4   

控制台标志

您可以使用-o标志覆盖任何配置值

rr serve -o http.address=:80 -o http.workers.pool.numWorkers=1

这些值将与.rr文件合并

环境变量

RoadRunner 将使用对环境变量的引用替换一些配置选项:

http:
  pool.num_workers: ${NUM_WORKERS}

posted on 2021-06-08 12:49  zh7314  阅读(306)  评论(0编辑  收藏  举报