【问题标题】:Does App Engine Flexible for Python support concurrent requests?App Engine Flexible for Python 是否支持并发请求?
【发布时间】:2018-12-09 14:20:13
【问题描述】:

来自documentation 关于 GAE Flexible 处理请求的方式,它说“一个实例可以同时处理多个请求”,但我不知道这到底是什么意思。

假设我的应用程序可以每 60 秒处理一个请求。

在开始处理初始请求后,是否会在 30 秒后发生另一个(或 3 个)请求(即第一个请求完成一半),由同一实例处理,还是会触发自动缩放并启动更多处理这些新请求的实例?这种情况假设第一个请求的 CPU 利用率仍低于扩展 CPU 利用率阈值。

我担心,因为我的实例需要 60 秒来处理一个请求,而且我将一次接收多个请求,所以即使有足够的处理能力来处理额外的请求,我也会低效地触发自动缩放在同一个实例上。这是它的工作原理吗?理想情况下,我希望能够对我的处理进行多线程处理并在同一实例上接受其他请求,同时仍低于 CPU 利用率阈值。

与标准环境不同,灵活环境的并发请求文档很少,所以我想确定一下。

【问题讨论】:

    标签: google-app-engine google-cloud-platform


    【解决方案1】:

    也许“工人数量”是您正在寻找的配置设置:

    https://cloud.google.com/appengine/docs/flexible/python/runtime#recommended_gunicorn_configuration

    Gunicorn 使用 worker 来处理请求。默认情况下,Gunicorn 使用同步工作者。这个worker类兼容所有的web应用,但是每个worker一次只能处理一个请求。默认情况下,gunicorn 只使用其中一个工人。这通常会导致您的实例未得到充分利用,并增加高负载下的应用程序的延迟。

    而且听起来你已经看到可以指定cpu利用率阈值了:

    https://cloud.google.com/appengine/docs/flexible/python/reference/app-yaml#automatic_scaling

    如果您愿意,也可以使用 gunicorn 以外的其他东西。这是他们使用 Honcho 代替的示例之一:

    https://github.com/GoogleCloudPlatform/getting-started-python/blob/master/6-pubsub/app.yaml

    【讨论】:

    • 有趣,谢谢指出!我什至没有考虑框架配置。因此,根据文档,我似乎可以增加工作人员数量以更正确地利用实例,例如具有 3 个工作人员的 1 个实例一次可以接受和处理 3 个请求,因此可以有效地使用实例资源。然后,我只需要扩展 CPU 使用率,因为如果每个工作人员都在处理请求,我应该处于/接近我的 CPU 阈值,并且不需要指定延迟扩展参数。这是正确的吗?
    • 我不确定使用 100% 的工作人员是否一定与使用 100% 的 CPU 相同(即,如果您为每个实例指定 3 个工作人员,但您的实例大小能够处理 6 个工作人员)。我认为这是您必须不断微调直到它以您想要的方式运行的那些事情之一。通过部署到不同的项目 id 来设置沙箱,然后使用本地 python 终端一次用 1000 个 http 请求对其进行修复,看看它是如何响应的。
    猜你喜欢
    • 2014-08-05
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 2020-01-25
    • 1970-01-01
    • 2014-11-27
    相关资源
    最近更新 更多