【发布时间】:2010-08-11 22:07:18
【问题描述】:
最近有不少情况下,应用引擎似乎运行缓慢。在某种程度上,这对于他们的云平台架构是可以理解的。我不是在谈论新的服务器实例——只是对暖服务器的请求。我也只是指 CPU,而不是数据存储 API,但我也对此感到疑惑。
似乎在这些缓慢的时期内,我的请求收到了更多黄色警告 - 说我正在使用大量 CPU。当然,在此期间它们需要更长的时间才能完成。让我担心的是,在这些缓慢的时期,我的 计费 CPU 似乎上升了。
所以要明确一点 - 当应用引擎速度很快时,请求可能会在 100 毫秒内完成。在较慢的时间内,同一请求可能需要超过 1 秒的时间。相同的 URI、相同的缓存、相同的处理路径、相同的数据存储、相同的索引 - 更多的 CPU。据我了解,黄色警告是指可计费的 CPU 使用率,当应用引擎速度较慢时还会出现更多警告。
这似乎设置了一个奇怪的情况,当应用引擎性能更差时,我的应用运行成本更高。这意味着谷歌平台表现越差,谷歌赚的钱就越多(直到它失败或客户离开的地步)。也许我的情况完全错了,它不会那样工作 - 但如果它确实那样工作,那么作为客户,那里的压力和平衡都是错误的。这并没有暗示谷歌有任何不当行为——只是这两件事之间的关系似乎不正确。
Google 的算法似乎是这样的——“如果我给 CPU 一个处理工作并启动我的手表,然后在工作返回时停止它,我会得到可计费的 CPU 数字。”即它根本不测量 CPU 工作。当然,该时间应该除以并发执行的处理作业的数量加上一些额外的时间来覆盖额外的上下文切换。我确信这些东西很难衡量——也许这就是原因。
我想您可能会争辩说,当应用引擎需求量很大时您支付更多费用是公平的,但这使得预算几乎不可能 - 您无法生成像“100 个用户每天花费我 1 美元”这样的统计数据,因为那可能会因多种原因而发生变化——包括应用引擎加入的客户数量超过了基础设施实际处理的数量。如果谷歌超额订阅应用程序引擎,那么所有客户都会支付更多费用 - 这是另一种听起来不正确的关系。当然,Google 的成本应该会下降,因为他们会吸引更多的客户,而这些客户会使用更多的资源 - 基于规模经济。
我是否应该期望我的应用程序中的两个相同请求每次运行时花费大致相同的金额 - 无论应用程序引擎实际完成它们需要多少时间?我是否误解了这是如何工作的?如果我没有,我是否有理由长期不担心它?是否有一些文件可以使这种情况更清楚?干杯,
科林
【问题讨论】:
-
对我来说似乎是一个公平的问题。我可以报告说我看到了同样的事情,尽管性能范围要广得多。他们确实尝试通过关闭数据存储时间计费来弥补这一点,但最近又重新启用了。
-
Google 应该测量 CPU 时间而不是挂钟时间。也许这对他们的基础设施来说很难做到。
-
同意 - Greg 的回答下方的 cmets 中有一些建议似乎代表了该问题的合理解决方案。
-
不可能有正确的答案,除了谷歌,谁知道实际发生了什么。但我会说,如果他们真的错过了这么大的一点,那真是一个愚蠢的错误。可能是应用程序缓存和 ALSO 模块缓存的情况。他们可能会不时卸载模块(尤其是像他们自己版本的 python 中的 django 那样很重),这会导致上述时间范围的变化。
-
一般情况下,当这种情况发生时,所有请求的返回速度会更慢(挂钟时间),这表明应用引擎的负载增加,而不是特定请求执行了额外的工作不定期的。在这种所有请求的一般响应时间较长的情况下,它对应于大多数请求的 CPU 成本增加。这不是一个偶然的请求,而是一个反复出现的模式。我同意谷歌的某个人很可能能够阐明这个问题。