Google App Engine - включает ли часы экземпляров время загрузки / выгрузки по HTTP-клиенту на сервер?
У меня есть приложение, размещенное на платформе 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 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) мс, б) cpu_ms или с) время, необходимое для выполнения запроса на стороне клиента?
Обратите внимание, что HTTP-клиент использует FileEntity при загрузке данных, поэтому я предполагаю, что данные передаются клиентом на сервер в одной части.
2 ответа
Входящие запросы буферизируются инфраструктурой App Engine, и запрос передается экземпляру вашего приложения только после получения всего запроса. Аналогично, исходящие запросы буферизуются, и вашему приложению не нужно ждать, пока пользователь закончит загрузку ответа. В результате время загрузки и выгрузки не оплачивается вашим приложением.
Чтобы понять числа в журнале, посмотрите на разбивку журнала, чуть более читабельно здесь.
Ни один из представленных вами вариантов (abc) не оплачивается напрямую. Раньше 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, так что это может быть воспринято как авторитетный ответ.