【问题标题】:Use Google Cloud Functions to speed up GAE app使用 Google Cloud Functions 加速 GAE 应用程序
【发布时间】:2018-12-31 00:02:07
【问题描述】:

我有一个 GAE 标准 Python 应用程序,可以进行一些相当的计算处理。我需要在 60 秒的请求时间限制内完成处理,理想情况下我希望更快地完成处理以获得更好的用户体验。

将工作拆分到多个线程似乎不是一个好的解决方案,因为线程可能会在同一个 CPU 上运行,因此不会提高速度。

我想知道是否可以以与线程类似的方式使用 Google Cloud Functions (GCF)。例如,如果我创建一个 GCF 来进行处理,将我的工作分成 10 个块,并并行进行 10 次 GCF 调用,我能否期望以 10 倍的速度获得结果? (除了延迟和 GCF 启动成本)

【问题讨论】:

    标签: google-app-engine google-cloud-functions


    【解决方案1】:

    每个函数调用都在其自己的服务器实例中运行,一个函数将扩展到 1000 个实例以并行处理并发请求。所以是的,如果您愿意为每个服务器实例分配第一个请求时支付冷启动成本,您就可以这样做。

    【讨论】:

    • pricing page for GCF,好像没有冷启动成本。您是指延迟成本还是价格成本?
    • 是的,这是罚款,不是罚款。
    【解决方案2】:

    如果您能够通过单独的(外部)请求将工作负载分成更小的块,您将通过单独的(外部)请求并行启动,我怀疑您会通过使用 GAE 本身获得更好的性能(和成本)(也许在单独的服务中)而不是 CF:

    • GAE 标准环境 instances 可以有更高的 CPU 速度 - B8 实例有 4.8 GHz,最大 CF CPU speed 是 2.4 GHz
    • 您可以更好地控制 GAE 扩展配置和启动时间损失
    • 我怀疑 GAE 上的网络延迟至少会相同,如果不是更好的话 - 不会使用其他产品基础设施(虽然不确定)
    • GAE 成本可能会更小,因为您按实例小时数(无论实例处理多少请求)而不是按请求/调用付费

    【讨论】:

    • 有趣的想法,但 GCF 对我来说似乎是一个更好的解决方案。使用服务:(1)即使使用一分钟,您也需要支付 15 分钟的费用,(2)在 1 分钟内启动 10 个服务实例(并行执行),我相信我会付费2.5 小时,以及 (3) 额外的服务总是要花钱的,我认为我的 GCF 使用量会在免费配额范围内。
    • 在技术方面,我怀疑网络延迟和启动时间对于我的用例来说已经足够相似了。因为我试图在 60 秒内完成某件事,所以额外的半秒启动成本或网络延迟并不重要。并行的好处应该让我在 10 秒左右完成。
    • 请注意,我并不是建议您重新设计您现有的 GAE 服务,而是采用与您的 CF 完全相同的方式处理请求的新服务。
    • 丹,是的,这是我的理解,尽管我认为我的 cmets 适用于此。
    最近更新 更多