【问题标题】:Google App Engine - does instance hours include upload / download time by HTTP client to server?Google App Engine - 实例时间是否包括 HTTP 客户端到服务器的上传/下载时间?
【发布时间】:2012-03-27 12:35:52
【问题描述】:

我有一个托管在 Google App Engine 平台上的应用程序。该应用程序主要是 I/O 密集型的,并且涉及到通过 HTTP 客户端到应用引擎服务器的大量上传和下载操作。

我的问题是:在这种情况下,实例时间包括什么?是否包括 HTTP 客户端上传请求数据的总时间?还是在上传整个请求数据并开始处理请求时开始计算实例小时数?

应用程序的示例结果:

  • HTTP 客户端向应用引擎服务器发送上传请求,请求数据大小为 1.1 MB

    在客户端完成请求所需的时间 - 78311 毫秒

    对应的服务器日志条目:

- - [时间] "POST / HTTP/1.1" 200 127 - "Apache-HttpClient/UNAVAILABLE (java 1.4)" "" ms=3952 cpu_ms=1529 api_cpu_ms=283 cpm_usd=0.154248 instance=

  • HTTP 客户端向应用引擎服务器发送下载请求。

    在客户端完成请求所需的时间 - 8632 毫秒

    对应的服务器日志条目:

- - [时间] "POST / HTTP/1.1" 200 297910 - "Apache-HttpClient/UNAVAILABLE (java 1.4)" "" ms=909 cpu_ms=612 api_cpu_ms=43 cpm_usd=0.050377 instance=

这些数字中的哪些有助于实例小时利用率 - 是 a) ms、b) cpu_ms 还是 c) 在客户端完成请求所花费的时间?

请注意,HTTP 客户端在上传数据时使用 FileEntity,因此我假设客户端将数据一次性发送到服务器。

【问题讨论】:

    标签: google-app-engine instance


    【解决方案1】:

    传入的请求由 App Engine 基础架构进行缓冲,并且只有在收到整个请求后才会将请求传递给您的应用实例。同样,传出请求也会被缓冲,您的应用不必等待用户完成下载响应。因此,上传和下载时间不会计入您的应用。

    【讨论】:

      【解决方案2】:

      要了解日志中的数字,请查看log breakdownhere 更易读。

      您提供的所有选项 (a. b. c.) 均未直接计费。过去 GAE 将 CPU 时间视为一个成本单位,但 2011 年 11 月发生了变化。现在您为实例的正常运行时间付费,即使实例没有处理任何请求。实例停止计费after 15 min of inactivity

      (这并不意味着 GAE 在实例停止计费后实际上会关闭它们 - 请参阅仪表板中的“实例”图表。)

      启动的实例数量取决于您应用的performance settings

      由于您的应用是 IO 密集型应用,因此有助于启用并发请求(JavaPython 2.7)。这样,实例可以运行多个主要等待 IO 的并行请求 - 在我们的应用程序中,我看到一个实例上并行处理大约 15-20 个请求。

      更新:

      这是first link 所说的关于ms=xyz 日志条目的内容:

      This is the actual time (hence 'wallclock' time) taken to return a response to 
      the user, not including the time it took for the user to send their request or 
      the time it takes to send the response back - that is, just the time spent 
      processing by your app. 
      

      请注意,Nick Johnson 是 GAE 团队的工程师,因此可以将其视为权威答案。

      【讨论】:

      • 如果提供的内容通过缓存代理,则客户端请求持续时间和服务器请求持续时间绝对有可能不同。实际上,App Engine 前面有一个缓存代理,如果您设置缓存标头(Cache-Control),它将缓存内容:kyle-jensen.com/proxy-caching-on-google-appengine
      • 要查看缓存的请求,请参阅 GAE 仪表板中的“请求类型”图表
      • 我的问题与包含客户端将数据上传/下载到应用引擎服务器所花费的时间有关。此时间是否包含在实例小时计算中?实例何时附加到请求 - 是在整个请求数据上传到服务器之后,还是在服务器端收到请求标头后立即生成?
      • 请求是动态的,所以我不确定缓存代理是否能帮助我减少实例小时使用量。
      • 所以,这只是请求处理时间。但这不会帮助您降低成本。什么是并行请求。
      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-18
      • 1970-01-01
      • 2011-06-14
      • 2013-10-14
      • 2011-05-09
      • 1970-01-01
      相关资源
      最近更新 更多