2012-03-06 2 views
6

Я столкнулся с этой проблемой уже второй раз, и мне интересно, есть ли какое-либо решение для этого. Я запускаю приложение в Google App Engine, которое полагается на частую связь с веб-сайтом через HTTP JSON RPC. Оказывается, что GAE имеет тенденцию случайным образом отображать сообщение, как это в журналах:GAE Go - «Этот запрос вызвал новый процесс для вашего приложения ...»

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

И сбрасывать все переменные, хранящиеся в ОЗУ без предупреждения. Тот же процесс происходит снова и снова, независимо от того, сколько раз я снова устанавливаю переменные или загружаю новый код в GAE, хотя увеличение номера версии приложения, похоже, решает проблему.

Как получить дополнительную информацию об этом поведении, как его избежать и предотвратить потерю данных моих приложений Golang в Google App Engine?

EDIT:

Переменные, хранящиеся в оперативной памяти небольшие классы строк, байт, BOOLS и указатели. Ничего сложного или большого.

Google App Engine, кажется, «запускает новый процесс» в считанные секунды более тяжелого использования, что не должно быть достаточно долго, чтобы приложение было отключено, поскольку оно не используется. Временной интервал между приложением, загружаемым в GAE, с его набором переменных и созданным новым процессом составляет менее минуты.

+0

Можете ли вы прояснить природу переменных, хранящихся в ОЗУ? Можете ли вы кэшировать эти данные в Memcache? – kristianp

ответ

3

Вы можете прочитать о случаях GAE в их документации здесь, проверьте раздел производительности:

http://code.google.com/appengine/kb/java.html

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

Моя рекомендация для хранения экземпляра GAE жив, либо платить за услугу Always-On или следовать моим рекомендациям для использования хрон здесь:

http://rwyland.blogspot.com/2012/02/keeping-google-app-engine-gae-instances.html

Я использую то, что я называю «простой график» 3, 7, 11 минут работы cron.

+0

Временной интервал между инициализированным приложением и создаваемым процессом составляет менее 1 минуты, поэтому проблема, вероятно, является чем-то отличным от закрытия приложения из-за того, что он не используется некоторое время. – ThePiachu

+2

Всегда вкл. Не помогает, если у вас плохая конструкция, которая рассчитывает сохранить состояние в ОЗУ между запросами. У вас все еще есть десятки экземпляров, запущенных одновременно с масштабированием для обработки большого количества трафика, и они не будут делить состояние. – geoffspear

+0

@ ThePiachu Войдите в сайт appengine и посмотрите свои экземпляры и журнал. Вероятно, вы увидите, что примерно через 5-10 минут бездействия ваш исполняемый экземпляр отключается. GAE - это масштабируемая платформа: если вы ее не используете, зачем тратить ресурсы? – rwyland

12

Вы понимаете, что GAE - это решение для облачного размещения, которое автоматически управляет экземплярами в зависимости от нагрузки? Это основная функция и причина, по которой люди ее используют.

При увеличении нагрузки GAE создает новый экземпляр, который, конечно, пуст.

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

2

Вы должны рассмотреть возможность использования Backends, если вы хотите использовать длинные экземпляры с резидентной памятью.

+0

Бактерии теперь лишены. Любые другие предложения? – Ajai

Смежные вопросы