Rserve 的内置 HTTP 服务器中的速率限制?

Rate limiting in the built-in HTTP server of Rserve?

我正在查看 Rserve (1.8.5) 的内置 HTTP 服务器,从 [=32= 修改 .http.request() 后]FastRWeb。更新后的请求函数没问题,但问题是,每当 # 并发请求很高时,some/most 其中的请求会抛出以下错误。

WARNING: fork() failed in fork_http(): Cannot allocate memory

WARNING: fork() failed in Rserve_prepare_child(): Cannot allocate memory

这是因为剩余的可用内存不足,因此有必要以某种方式限制 # 个请求。

我尝试了几个客户端层 (1) Python 的 requests + hug 库,(2) Python 的 pyRserve + hug 库,其中 # 工作进程由 # CPUs。我还尝试在 single/multiple 容器设置 (3) (4).

中使用 Nginx 进行反向代理

在所有情况下,与仅使用内置 HTTP 服务器的 Rserve 的设置相比,我观察到一些开销(~ 300 - 450 毫秒)。

我想按原样使用它是最有效的选择,但我担心它一直在尝试分叉并且 returns 出错。 (除了会很快抛出错误外,使用 CPU 利用率或平均响应时间等典型指标进行自动缩放也不容易。)

任何人都可以告知是否有一种方法可以强制执行速率限制 with/without 依赖于另一种不会牺牲性能的工具?

我的Rserve配置大致如下

http.port 8000
socket /var/rserve/socket
sockmod 0666
control disable

还有一个简化的nginx.conf.

worker_processes auto;

events {
    worker_connections 1024;
}

http {
    upstream backend {
        server 127.0.0.1:8000;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
        }
    }
}

我被 Locust(负载测试工具)误导了,它显示了使用内置 HTTP 服务器设置 Rserve 的缓存输出。

手动调查显示 Rserve + Nginx returns 略有改进的结果。