在documentation中,关于GAE Flexible如何处理请求的内容说:“一个实例可以同时处理多个请求”,但我不知道这到底意味着什么。
假设我的应用程序每60秒可以处理一个请求。
在开始处理初始请求后,另一个请求(或3个)会在30秒后发生(因此第一个请求已完成一半),由同一个实例处理,还是会触发自动缩放并进一步旋转实例来处理这些新请求?这种情况假设第一个请求的CPU利用率仍低于扩展CPU利用率阈值。
我担心,由于我的实例需要60秒才能处理一个请求,并且一次将接收多个请求,因此即使有足够的处理能力来处理其他请求,我也会效率低下地触发自动缩放在同一实例上。这是怎么运作的?理想情况下,我希望能够在不超过CPU使用率阈值的情况下对我的处理进行多线程处理并接受同一实例上的其他请求。
与标准环境不同,Flexible环境中并发请求的文档稀缺,因此我想确定一下。
答案 0 :(得分:2)
也许“数量的工人”是您要寻找的配置设置:
https://cloud.google.com/appengine/docs/flexible/python/runtime#recommended_gunicorn_configuration
Gunicorn使用工作人员来处理请求。默认情况下,Gunicorn使用同步工作者。该工作程序类与所有Web应用程序兼容,但是每个工作程序一次只能处理一个请求。默认情况下,gunicorn仅使用这些工人之一。这通常会导致您的实例未得到充分利用,并增加了高负载下应用程序的延迟。
听起来您已经知道可以指定cpu利用率阈值:
https://cloud.google.com/appengine/docs/flexible/python/reference/app-yaml#automatic_scaling
如果您愿意,也可以使用除金枪鱼以外的其他东西。这是他们使用Honcho的示例之一:
https://github.com/GoogleCloudPlatform/getting-started-python/blob/master/6-pubsub/app.yaml