Измерение затрат на очередь задач в Google App Engine

Я измеряю стоимость запросов к GAE, проверяя заголовок x-appengine-estimated-cpm-us-dollars. Это прекрасно работает, а в сочетании с x-appengine-resource-usage и x-traceurl я даже могу получить более подробную информацию.

Однако большая часть моего приложения выполняется в контексте очередей задач. Таким образом, огромная часть затрат на инстанс-час приходится на очереди. Каждый раз, когда код выполняется вне запроса, его стоимость не включается в заголовок x-appengine-estimated-cpm-us-dollars.

Я ищу способ измерить полные затраты, потребляемые каждым запросом. т.е. затраты, сгенерированные самим запросом, и стоимость задач, добавленных этим запросом.


person Ingo    schedule 11.12.2012    source источник
comment
если вы проверите журнал на appengine.appspot.com, он перечислит все запросы, а также сообщит вам цену за тысячу показов в долларах США для каждого запроса. Таким образом, вы можете просто добавить cpm обычного запроса и запроса задачи вместе.   -  person lucemia    schedule 11.12.2012
comment
Спасибо! Это нормально для ручного тестирования. Но как я могу получить эту информацию программно. Например. есть ли URL-адрес, по которому я могу получить доступ к этому? Кроме того, как я могу связать стоимость этих задач с первоначальным запросом? Вместо того, чтобы вручную тестировать затраты, я хочу автоматически измерять затраты, чтобы увидеть, как они меняются с течением времени.   -  person Ingo    schedule 11.12.2012


Ответы (1)


Это перебор. Существует инструмент, с помощью которого вы можете загрузить журнал движка приложений Google и преобразовать их в sqlite. http://code.google.com/p/google-app-engine-samples/source/browse/trunk/logparser/logparser.py

С помощью этого инструмента cpm usd как для запроса задачи, так и для обычного запроса будут загружены вместе. Вы можете хранить ежедневный журнал в отдельном файле sqlite и выполнять столько анализа, сколько хотите.

С точки зрения соотнесения стоимости задачи с первоначальным запросом. Данные журнала, загруженные с помощью этого инструмента, включают в себя полный вывод модуля logging.

  1. Таким образом, вы можете просто зарегистрировать идентификатор генерации в исходном запросе.
  2. передать идентификатор в задачу.
  3. повторная регистрация полученного идентификатора в запросе задачи.
  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 для запроса задачи. Вы можете просто сложить их вместе, чтобы получить общую стоимость.

person lucemia    schedule 11.12.2012
comment
Спасибо! Я согласен, что разбор логов - это решение. Однако, если бы appstats включал ссылки на фоновую работу (например, названия отправленных задач), это можно было бы упростить. Каждый вызов *.appspot.com/appstats/stats?time=123&type=json будет включать вызовы API очереди задач, например taskqueue.BulkAdd. Поэтому, возможно, более эффективным решением было бы изменить это, включив имя задачи taskqueue.BulkAdd[task1,task2]. Так что затраты на фоновую работу можно получить, нажав на другой URL-адрес appstats с именами отправленных задач. Я еще не нашел запрос функции на это. - person Ingo; 11.12.2012
comment
Спасибо, это отличная идея! Таким образом, мы могли бы измерить точные затраты, поскольку все выполняется синхронно. К сожалению, тогда приложение будет вести себя по-разному во время отладки по сравнению с прод. Например, в режиме отладки приложение будет реагировать намного медленнее, чем в prod. Но, учитывая функциональность, предоставляемую GAE на сегодняшний день, это, пожалуй, лучшее решение. - person Ingo; 12.12.2012