首页 文章

测量Google App Engine中的任务队列成本

提问于
浏览
0

我通过检查 x-appengine-estimated-cpm-us-dollars Headers 来衡量GAE请求的成本 . 这很好用,与 x-appengine-resource-usagex-traceurl 结合使用,我甚至可以获得更详细的信息 .

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

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

1 回答

  • 1

    这太过分了 . 有一个工具,您可以下载谷歌应用程序引擎日志并将其转换为sqlite . http://code.google.com/p/google-app-engine-samples/source/browse/trunk/logparser/logparser.py

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

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

    • 因此,您只需在原始请求中记录生成ID即可

    • 将id传递给任务 .

    • 在任务请求中再次记录收到的ID .

    • 通过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)
    

    EDIT1

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

    # 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用于任务请求 . 您只需将它们组合在一起即可获得总成本 .

相关问题