我有一个GAE标准的Python应用程序,可以进行一些相当计算的处理。我需要在 60 秒的请求时间限制内完成处理,理想情况下,我希望更快地完成处理以获得更好的用户体验。
将工作拆分到多个线程似乎不是一个好的解决方案,因为线程可能会在同一个 CPU 上运行,因此不会加快速度。
我想知道Google Cloud Functions(GCF)是否可以以与线程类似的方式使用。 例如,如果我创建一个 GCF 来执行处理,将我的工作分成 10 个块,并行进行 10 个 GCF 调用,我是否可以期望获得结果的速度提高 10 倍? (除了延迟和GCF启动成本)
每个函数调用在其自己的服务器实例中运行,一个函数将扩展到 1000 个实例以并行处理并发请求。 所以是的,如果你愿意支付每个服务器实例的冷启动成本,因为它是为它的第一个请求分配的,你可以这样做。
如果您能够通过单独的(外部)请求将工作负载拆分为较小的块,然后并行启动,我怀疑通过使用 GAE 本身(可能在单独的服务中)而不是 CF 可以获得更好的性能(和成本):
- GAE 标准环境实例可以具有更高的 CPU 速度 - B8 实例具有 4.8 GHz,最大 CF CPU 速度为 2.4 GHz
- 您可以更好地控制 GAE 扩展配置和启动时间惩罚
- 我怀疑网络延迟在 GAE 上至少是相同的,如果不是更好的话 - 不会转到另一个产品基础设施(虽然不确定)
- GAE 成本可能会更小,因为您按实例小时数付费(无论实例处理多少请求),而不是按请求/调用付费