【问题标题】:Measuring Task Queue Costs in Google App Engine在 Google App Engine 中测量任务队列成本
【发布时间】:2012-12-11 14:42:40
【问题描述】:

我通过检查 x-appengine-estimated-cpm-us-dollars 标头来衡量对 GAE 的请求的成本。这很有效,并与 x-appengine-resource-usagex-traceurl我什至可以得到更详细的信息。

但是,我的应用程序的很大一部分是在任务队列的上下文中运行的。因此,队列消耗了很大一部分实例小时成本。每次在请求之外执行代码时,其成本都不包含在 x-appengine-estimated-cpm-us-dollars 标头中。

我正在寻找一种方法来衡量每个请求所消耗的全部成本。 IE。请求本身产生的成本此请求添加的任务的成本。

【问题讨论】:

  • 如果您在 appengine.appspot.com 中查看日志,它会列出所有请求并告诉您每个请求的 cpm 美元。所以你可以把普通请求和任务请求的cpm加在一起。
  • 谢谢!这对于手动测试是可以的。但是我怎样才能以编程方式获取这些信息。例如。有没有我可以点击的 URL 来访问它?此外,我如何将这些任务的成本与原始请求相关联?我不想手动测试成本,而是想自动衡量成本,看看它们如何随时间变化。

标签: java python google-app-engine task-queue measurement


【解决方案1】:

这是一个矫枉过正。有一个工具可以下载 google app engine log 并将它们转换为 sqlite。 http://code.google.com/p/google-app-engine-samples/source/browse/trunk/logparser/logparser.py

使用此工具,任务请求和普通请求的 cpm usd 将全部一起下载。您可以将每日日志存储到单独的 sqlite 文件中,并根据需要进行尽可能多的分析。

在将任务成本与原始请求相关联方面。使用此工具下载的日志数据包括logging 模块的完整输出。

  1. 因此您可以简单地在原始请求中记录生成 ID
  2. 将 ID 传递给任务。
  3. 在任务请求中再次记录收到的 ID。
  4. 通过 id 找到正常和任务请求对。

例如:

# in org request
a_id = genereate_a_random_id() 
logging.info(a_id) # the id will be included 

taskqueue.add(url='/path_to_task', params={'id': a_id})


# in task request
a_id = self.request.get('id')
logging.info(a_id)

编辑1

我认为还有另一种可能的方法来估算正常请求+任务请求的成本。 诀窍是将异步任务更改为同步(假设成本相同)。 我没有尝试过,但是尝试起来要容易得多。

# in org request, add a variable to identify debug
debug = self.request.get('DEBUG')

if debug:
    self.redirect('/path_to_task')
else:
    taskqueue.add(url='/path_to_task')

因此,在使用 DEBUG 参数测试正常请求时。它将首先处理正常请求,然后为正常请求返回 x-appengine-estimated-cpm-us-dollars。稍后它会将您的测试客户端重定向到相关任务请求(任务请求也可以作为正常请求通过 url 客户端访问和触发)并为任务请求返回 x-appengine-estimated-cpm-us-dollars。您只需将它们相加即可得出总成本。

【讨论】:

  • 谢谢!我同意解析日志是一种解决方案。但是,如果 appstats 包含对后台工作的引用(例如提交任务的名称),则可以简化此操作。对 *.appspot.com/appstats/stats?time=123&type=json 的每次调用都将包括对任务队列 API 的调用,例如 taskqueue.BulkAdd。因此,也许更强大的解决方案是将其更改为包含任务名称 taskqueue.BulkAdd[task1,task2]。这样就可以通过点击另一个带有提交任务名称的 appstats URL 来检索后台工作成本。我还没有找到关于此的功能请求。
  • 谢谢,这是个好主意!通过这种方式,我们可以测量确切的成本,因为一切都是同步执行的。不幸的是,该应用程序在调试与生产期间的行为会有所不同。例如,在调试中,与 prod 相比,应用程序的响应速度要慢得多。但鉴于 GAE 目前提供的功能,这可能是最好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多