2010-01-12 2 views
5

Я отправил это на GAE для группы Java, но я надеюсь получить ответы на некоторые вопросы здесь быстрее :)Google App экземпляр рециклинг приложения двигателя и время отклика

я решил сделать некоторые давно запустить тесты производительности в моем приложении. I создал небольшое приложение для работы с клиентом каждые 5-30 минут, и я запускаю 3-5 потоков с таким клиентом.

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

Uneven response time between connection to server to first byte sent

Application instances seem to be too aggressively recycled

Getting 'Request was aborted after waiting too long to attempt to service your request.' after application idle

Я использую Springframework, он TKES вокруг 18-20s начать приложение экземпляр, который вызывая время отклика от 1 с (когда запрашивает хиты, выполняемые приложением - очень редко) до 22 секунд, когда создано новое приложение .

Есть ли решение для этого? Я думал о создании самого базового сервлета, выполняющего критические задачи (вызов обслуживающего API) и оставляющий пользовательский интерфейс как есть. Но тогда я потеряю все преимущества Springframework.

Есть ли решение для этого?

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

Любая помощь?

С уважением Konrad

+1

Ваши ссылки на обсуждения в группах Google нарушены. –

+0

Спасибо Адаму! Я исправил ссылки ... – Konrad

ответ

3

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

Это быстрый способ реализовать, но, похоже, идет вразрез с духом платформы. Сделайте свои номера и проверьте, стоит ли это.

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

Я не знаю, если у вас есть какой-либо другой вариант, кроме этого 2.

+0

Привет, спасибо за ваш ответ, но я не думаю, что запуск экземпляра всегда будет использоваться для обслуживания запросов, GAE - своеобразное облачное решение, поэтому ваши запросы могут обслуживаться даже на разных компьютерах. – Konrad

+0

Я подозреваю, что если вы отправляете запросы через регулярные промежутки времени, ваш экземпляр приложения будет храниться на одном сервере. Даже если он был изменен на другой, все, что вам действительно нужно, - это то, что ваше приложение готово, когда реальный запрос поступает от реального пользователя. Просто убедитесь, что вы отправляете запросы достаточно быстро, чтобы ваше приложение всегда было «горячим» и живым. –

+0

Любые идеи, какой интервал должен быть? Я собираюсь попробовать 2 минуты для начала ... – Konrad

0

Это, безусловно, сложный вопрос с AppEngine приложениями. Пуристы расскажут вам, почему ваше приложение занимает так много времени, чтобы начать работу и отступить оттуда. В вашем случае ответ очевиден: вы используете Spring, и ему приходится загружать многие файлы классов и создавать множество объектов.

Прагматичный ответ, если вы можете жить без весны, заключается в том, чтобы убедиться, что экземпляр приложения остается теплым.Вы можете либо пинговать его из внешнего источника достаточно часто, чтобы AppEngine никогда не выгружал его, или вы могли бы использовать задание cron AppEngine, которое выполняется достаточно часто, чтобы поддерживать ваше приложение в памяти.

Я уверен, что Google презирает второй вариант, поскольку это противоречит большинству фундаментальных идей, стоящих за AE, но, тем не менее, это проблема, которую они и мы, разработчики AE) должны учитывать.

Вот related discussion

+1

Привет, спасибо за вашу помощь. Даже если приложение начнется с 3-х - это не будет решением. Я немного разочарован GAE после этого, позор мне, что я не нашел эту проблему до создания моего приложения (к счастью, я думаю, что не будет много работать, чтобы запустить его на обычной инфраструктуре). Надеюсь, что некоторые другие люди прочитают этот тип сообщений, прежде чем приступать к GAE навсегда. Я попытаюсь решить эту проблему, создав базовый сервлет для обслуживания вызовов API, но этот шов будет похож на возврат к CGI и сценарию оболочки: D – Konrad

+0

Konrad, извините, что вы обнаружили это открытие в App Engine в конце цикла разработки , Должно быть очень неприятно.App Engine - это, разумеется, другой вид платформы веб-приложений, чем люди, которых мы обычно привыкли, и есть ошибки, которые не так очевидны или хорошо передаются. Id o Надежда, которая изменится по мере того, как AE созреет и станет более понятной программисту. –

2

Что было бы хорошо, если мы могли бы сериализации DispatcherServlet в кэше, а затем десериализации его из кэша памяти на холодном старте, если она есть. Тогда создание Spring было бы очень коротким.

DispatcherServlet уже отмечен как Serializable, нам просто нужно найти способ сериализации WebApplicationContext объекта, что DispatcherServlet содержит.

+0

Интересно, если DispatcherServlet помечен как Serializable, но содержит атрибуты, которые не могут быть сериализованы. Черт. – pjesi

+0

Вы поняли это? –

1

SDK 1.4.0 имеет эту новую функцию:

  • Теперь разработчики могут активировать запросы на Warmup. Указав обработчик в appengine-web.xml приложения, приложение Двигатель попытается отправить запрос на подогрев , чтобы инициализировать новые экземпляры до того, как пользователь взаимодействует с . Это может уменьшить задержку, которую видит конечный пользователь для инициализации вашего приложения .
Смежные вопросы