Google app engine 谷歌应用引擎,用于长时间运行但CPU低的任务,还是长时间轮询?

Google app engine 谷歌应用引擎,用于长时间运行但CPU低的任务,还是长时间轮询?,google-app-engine,google-compute-engine,Google App Engine,Google Compute Engine,App Engine非常适合于快速处理请求,而无需对数据库或缓存或第三方资源进行外部API调用,但我们发现引入任何类型的“更长时间运行”组件或外部延迟(例如,在后台异步运行的HTTP POST操作中,可能需要一两秒钟来处理一些更激烈的数据库查询…从客户端的UX角度来看,完全不可见,这是正常的,因为它是异步的,但由于运行时间长,对应用引擎计费来说代价高昂).“实例时间”复合和驱动成本大幅上升 这种导致费用增加的情况下,请求实际上只是在等待外部资源的响应,并且在空闲期间几乎不需要CPU,这似乎是可以

App Engine非常适合于快速处理请求,而无需对数据库或缓存或第三方资源进行外部API调用,但我们发现引入任何类型的“更长时间运行”组件或外部延迟(例如,在后台异步运行的HTTP POST操作中,可能需要一两秒钟来处理一些更激烈的数据库查询…从客户端的UX角度来看,完全不可见,这是正常的,因为它是异步的,但由于运行时间长,对应用引擎计费来说代价高昂).“实例时间”复合和驱动成本大幅上升

这种导致费用增加的情况下,请求实际上只是在等待外部资源的响应,并且在空闲期间几乎不需要CPU,这似乎是可以避免的,但我不确定使用App Engine是否可以避免

这几乎就像一个“长时间的民意测验”,在那里,答案可能是开放的,但什么也不做


有没有一种方法可以在App Engine上实现这一点,而不必支付疯狂的费用(例如小时),或者我们最好转向Compute Engine或EC2?它是根据CPU负载自动伸缩的,还是仅仅基于总计数中的打开或不活动的请求?-
threadsafe
确实启用了。

存在真正的问题关于这一点,有两种方法(最重要的)

使用任务队列! 如果工作不需要与请求完全同步,这正是App Engine中[task queues]的用途。它们允许您将作业放入队列,并让另一个模块接收工作。它们非常棒,因为您可以分别扩展前端和后端流程

如果那不起作用

灵活使用应用程序引擎 UndertheHood只是在运行GCE实例。成本结构完全不同,因为您始终有一个VM在后台运行,为您的请求提供服务


希望这能有所帮助!

您真正担心的是应用程序引擎如何处理实例。由于您的许多请求需要的资源很少,因此您的应用程序可能能够在单个实例上处理比正常情况更多的并发请求。您可以研究影响缩放的参数。特别有趣的是:

max_concurrent_requests自动缩放实例在计划程序生成新实例之前可以接受的并发请求数(默认值:8,最大值:80)


这里存在一种危险,实例可能会被非长轮询请求填满,并变得负担过重。为了防止这种情况,您可以将长轮询请求隔离到它们自己的实例中,并将其缩放参数与应用程序的其余部分分开设置。

app Engine Flexible可能会工作。我们已经在使用任务队列,但其中一些是精简的gs需要前端响应。