Spring MVC на GAE: медленное время загрузки - PullRequest
7 голосов
/ 06 октября 2010

Я недавно развернул приложение Spring MVC в Google App Engine, и время начальной загрузки составляет около 7 секунд. Как только приложение загружено, приложение довольно отзывчиво. Но если приложение простаивает более 1 минуты (трафика на него нет), приложение должно быть перезагружено GAE, что также занимает около 7 секунд. Для приложения уровня PRD это недопустимо. ( Приложение пустое - я даже не использую JPA, Sitemesh, Spring Security и т. Д. Он просто загружает страницу jsp с некоторым текстом. )

Единственная «лучшая практика» для исправления «времени загрузки», которую я видел до сих пор, - это создание задания cron, которое будет попадать по URL каждую минуту, поэтому приложение будет загружено. Очевидно, это ужасное решение.

Итак, вот вопрос: существуют ли "лучшие практики" для Spring по GAE с точки зрения "отзывчивости"? Так как Google и Spring работают над улучшением интеграции между ними, были ли какие-либо новости / прогресс по этой проблеме? Я не могу найти ничего конкретного, поэтому спрашиваю здесь

Обсуждение темы: http://groups.google.com/group/google-appengine-java/browse_thread/thread/80d014fd5abd526f

UPDATE

Существует «тикет» для создания зарезервированных экземпляров, а также логика «разогрева»: http://code.google.com/p/googleappengine/issues/detail?id=2456

Ответы [ 3 ]

2 голосов
/ 23 декабря 2010

Поскольку SDK 1.4.0 , вы можете избежать этой задержки, используя запросы на разогрев .
Запросы Warmup загружают код приложения в новый экземпляр до того, как все активные запросы достигнут этого экземпляра.

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

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

http://googleappengine.blogspot.com/2010/12/happy-holidays-from-app-engine-team-140.html

Always On - для приложений с высоким приоритетомс низким или переменным трафиком, теперь вы можете зарезервировать экземпляры с помощью функции всегда включенного в App Engine.Always On - это премиальная функция стоимостью 9 долларов в месяц, которая резервирует три экземпляра вашего приложения, никогда не отключая их, даже если у приложения нет трафика.Это уменьшает влияние загрузки запросов на приложения с небольшим или переменным объемом трафика.

В сочетании с запросами на разогрев это лучшее решение, если вы планируете использовать GAE.

0 голосов
/ 07 октября 2010

Хорошо, из-за отсутствия ответов я решил пойти с заданием cron (поскольку на данный момент не вижу никакой другой опции)

Вот файл cron.xml, который я использую

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
  <cron>
    <url>/keepalive</url>
    <description>Keep the application alive</description>
    <schedule>every 1 minutes</schedule>
  </cron>
</cronentries>

А вот и контроллер:


package com.xxxxxxxxxxxxx.web;

import org.slf4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;


@Controller
@RequestMapping("/keepalive")
public class KeepAliveController {

    private Logger logger = org.slf4j.LoggerFactory.getLogger(KeepAliveController.class);

    @RequestMapping(method = RequestMethod.GET)
    public void keepAlive() {
        logger.info("I'm alive!");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...