Google App Engine - включает ли часы экземпляров время загрузки / выгрузки клиентом HTTP на сервер? - PullRequest
1 голос
/ 27 марта 2012

У меня есть приложение, размещенное на платформе Google App Engine. Приложение в основном требует интенсивного ввода-вывода и включает в себя большое количество операций загрузки и выгрузки на сервер механизма приложений с помощью HTTP-клиента.

Мой вопрос: из чего состоит час экземпляра в этом случае? Включает ли это общее время, необходимое клиенту HTTP для загрузки данных запроса? Или вычисление часа экземпляра начинается, когда загружаются все данные запроса и начинается обработка запроса?

Пример результатов из приложения:

  • HTTP-клиент отправил запрос на загрузку на сервер механизма приложений, размер данных запроса 1,1 МБ

    Время, необходимое для выполнения запроса на стороне клиента - 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 экземпляр =

  • 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 экземпляр =

Какая из этих цифр влияет на использование часа экземпляра - это a) мс, b) cpu_ms или c) время, необходимое для выполнения запроса на стороне клиента?

Обратите внимание, что HTTP-клиент использует FileEntity при загрузке данных, поэтому я предполагаю, что данные передаются клиентом на сервер в виде одной части.

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

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

2 голосов
/ 27 марта 2012

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

Ни один из представленных вами вариантов (a. B. C.) Не оплачивается напрямую. Раньше GAE считала время процессора как единицу стоимости, но это изменилось в ноябре 2011 года. Теперь вы платите за время безотказной работы экземпляра, даже если экземпляр не обрабатывает никаких запросов. Экземпляры перестают оплачиваться через 15 минут бездействия .

(Это не означает, что GAE фактически закрывает экземпляры после того, как они прекращают выставлять счета за них - см. График «Экземпляры» на панели инструментов.)

Сколько экземпляров работает, зависит от настроек производительности вашего приложения .

Поскольку ваше приложение интенсивно использует ввод-вывод, оно поможет включить параллельные запросы ( Java , Python 2.7 ). Таким образом, экземпляр может выполнять несколько параллельных запросов, которые в основном ожидают ввода-вывода - в нашем приложении я вижу около 15-20 запросов, обслуживаемых параллельно в одном экземпляре.

Обновление:

Вот что первая ссылка говорит о 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. 

Обратите внимание, что Ник Джонсон - инженер в команде GAE, так что это можно принять как авторитетный ответ.

...