2013-02-26 5 views
2

При выполнении нагрузочных тестов против моего приложения я вижу очень последовательное время отклика. Когда на GAE существует постоянный уровень нагрузки, среднее время отклика становится все меньше и меньше. Но я хочу иметь такую ​​же согласованность в других приложениях, которые получают гораздо меньше запросов в секунду. В этих случаях мне не нужно поддерживать более ~ 3 запросов в секунду.Достижение согласованного времени отклика в GAE?

Reading the docs заставляет меня думать, что увеличение числа минимальных случаев простоя должен привести к более последовательному времени отклика. Но даже тогда клиенты все равно будут видеть более высокие времена отклика, каждый раз, когда планировщик GAE считает, что требуется больше экземпляров. Я ищу установку, где пользователи не видят эти начальные медленные запросы.

Когда я увеличиваю количество минимальных экземпляров idle до 1, я хочу, чтобы GAE использовал только один экземпляр-резидент. По мере увеличения нагрузки он должен воспитывать и разминать новые (динамические) экземпляры. Only once they are warmed up, GAE должен отправлять запросы на них. Но, судя по ответам, кажется, что запросы клиентов поступают в динамические экземпляры по мере их появления. В результате эти запросы занимают много времени (до 30 секунд).

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

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

Спасибо!

ответ

1

Некоторые общие мысли:

  • 30 секунд запуска времени для случаев, кажется, очень много. Мы выполняем много инициализации (включая базы данных), и у нас есть около 5 секунд накладных расходов.
  • Warmup-Requests не гарантируется. Если все экземпляры заняты, и планировщик полагает, что запрос будет отвечать быстрее, если он начнет новый экземпляр вместо того, чтобы ставить его в очередь на занятом, он сделает это без, тратя время на разминку-запрос
  • I не думайте, что это проблема холодного кода-пути (хотя я не знаю hotspot java в деталях), возможно, это (mem-) кеш, который необходимо заполнить первым
  • Я не знаю, что вы означает «неполный код разминки»; просто проверьте свои журналы для запросов на/_ah/warmup - если есть какие-либо, запросы на разминку включены и работают.
  • Увеличение количества неиспользуемых экземпляров за пределами метки с 1 экземпляром, вероятно, здесь не поможет.

К сожалению, нет никаких общих приемов, чтобы избежать этого, но вы можете попробовать

  • отсрочки инициализации коды (делаете только абсолютный необходимый минимум накладных расходов экземпляра запуска)
  • запустите бэкэнд, сохраняя (mem-) кеш горячим

Если вы не против затрат (и не нуждаетесь в автоматическом масштабировании для вашего приложения с низким объемом), вы можете даже получить все запросы, обслуживаемые всегда -обороны

+0

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

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