Google App Engine用于长时间运行但CPU低的任务,或长时间轮询



App Engine非常适合快速处理请求,无需外部API调用数据库或缓存或第三方资源,但我们发现引入任何类型的"长时间运行"组件或外部延迟(例如在后台异步运行的HTTP POST操作中,可能需要一两秒钟来处理一些更激烈的数据库查询)…从客户端的用户体验角度来看,这是完全不可见的,因为它是异步的,但对App Engine来说成本很高,因为它是长时间运行的)……"实例小时数"的增加大大增加了成本。

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

这几乎就像一个"长投票",响应可能是开放的,但什么也不做。

是否有办法在应用引擎上做到这一点,而不只是支付疯狂的费用,例如小时,或者我们会更好地移动到计算引擎或EC2?它是根据CPU负载自动扩展,还是仅仅基于打开的和可能不活跃的请求总数?—threadsafe确实启用

实际上有两种方法可以做到这一点(首先考虑)。

使用任务队列!

如果工作不需要与请求完全在同一时间,这正是App Engine中[任务队列]的作用。它们允许您将作业放到队列中,并让另一个模块接收该工作。它们很好,因为你可以分别扩展前端和后端进程。

如果不工作....

灵活使用App Engine

App Engine Flexible只是运行GCE实例。成本结构是完全不同的,因为您始终有一个VM在后台运行,为您的请求服务。

希望这对你有帮助!

你真正担心的是App Engine如何扩展你的实例。因为你的许多请求需要很少的资源,你的应用程序可能能够在一个实例上处理比正常情况下更多的并发请求。你可以在这里查看形状缩放的参数。特别感兴趣的:

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

这里有一个危险,一个实例可能被非长轮询请求填满,从而变得负担过重。为了防止这种情况,你可以将长轮询请求隔离到它们自己的服务中,并将其缩放参数与应用的其他部分分开设置。

最新更新