我有一个低/偶发负载应用程序,启动新实例(大约10秒)导致的延迟远远超过处理我的请求所需的时间,通常在不到500毫秒内完成。
因此,为了避免因新实例的产生(“加载请求”)而导致的延迟峰值,我做了以下两个设置:
结算已激活。但是,GAE仍会启动新实例,从而导致无法接受的延迟。这是为什么?
在日志中我可以看到我的请求总是在不到500毫秒内返回;请求无法排队到15秒。
我该怎么办?任何帮助非常感谢。
更新:我的解决方案是设置一个每5分钟发出一次请求的cron作业,以便始终运行动态实例。事实证明(参见下面的答案),空闲实例保留用于疯狂的负载峰值,而不是我99%的时间内的低负载情况。
答案 0 :(得分:3)
正如@koma所说,app-engine将创建一个动态实例以保持空闲实例的数量不变,但不仅会创建一个新实例,而且还会立即使用它而不是使用空闲实例。如果你有一堆闲置实例,应用程序引擎实际上仍然会更喜欢启动动态的,即使单个请求进来,并且将“保存”空闲的,以防疯狂的流量高峰。
这是非常反直觉的,因为您希望它使用已经闲置的实例来处理请求并为未来的请求启动动态请求,但这不是它的工作方式。
答案 1 :(得分:0)
如果设置min idle instances = 1,它肯定会在第一次请求时生成另一个实例....因为不再有任何空闲实例(它正忙于处理第一个请求!)。 并且由于启动了一个新实例,它也可以处理一些请求而不再处于空闲状态?