无法扩展 Gunicorn/Flask HelloWorld 超过 125 RPS

Unable to scale Gunicorn/Flask HelloWorld over 125 RPS

我有一个 Flask 应用程序,我无法在本地扩展到超过 125 RPS。这是一个简单的 'hello world' ,如下所示。

我正在使用 Locust.io 负载测试工具。我已将相同的负载测试指向本地 Golang hello world,并且能够达到 1000 的 RPS。恕我直言,这排除了我的 Locust 和 OS 配置作为潜在瓶颈。

我使用 17 个 worker,因为我的机器有 8 个内核((2*CPU)+1 是 Gunicorn 文档推荐的)

根据我的阅读,使用 Gunicorn 的 gevent worker 类型应该可以让我达到 1000 的 RPS,就像使用 Golang 一样。这是一个正确的假设吗?还是我遗漏了一些重要的东西?

缩写代码:

app = Flask(__name__)

@app.route('/')
def hello():
    return 'hello world!'

Gunicorn 会议:

gunicorn -k gevent -w 17  --worker-connections 100000 app:app

Locust 负载测试结果。每个 'user' 每 4 秒获取一次 '/'

此处作者的回答:https://github.com/benoitc/gunicorn/issues/305

又调试了一周,终于搞定了!原来还有一个额外的工人类型,gevent_pywsgi。使用这种工人类型将吞吐量提高了大约 10 倍,达到我认为可以接受的水平。

我的测试显示 sync worker 和 gevent worker 之间的性能没有差异,所以我仍然不确定那里发生了什么,或者 [=12= 的意图是什么] 工人类型是。