7

Официальная документация по appengine говорит, что если мы установим свойство threadafe в true в app.yaml, тогда appengine будет выполнять одновременные запросы сервера.Параллельные запросы в Appengine Python

Официальная ссылка: https://developers.google.com/appengine/docs/python/python27/newin27#Concurrent_Requests

  • Означает ли это приложение будет работать быстрее (чем 2,5), если мы имеем THREADSAFE свойство верно? Официальная документация/блог говорит так, но я ищу опыт реального мира.

  • На высоком уровне, как это работает внутри страны? Будет ли наше приложение инициализировано и будет появляться новое для каждого запроса?

ответ

10

У вас по-прежнему есть только один поток для запроса - вы не можете появиться.

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

ли это поможет вам или нет, зависит от вашего приложения и трафика:

  1. Во-первых, вычислить входящий запрос в секунду/среднее время ожидания. Если это хорошо под одним, потокобезопасность не будет иметь большого значения в любом случае.
  2. Изучите ваше приложение, чтобы узнать, сколько времени он проводит, ожидая API (например, хранилище данных или выборка URL-адреса). Если это большая доля, то threadsafe поможет сохранить счет вашего экземпляра. Если нет, это не поможет.

Простым правилом является коммутатор threadsafe on, если ваше приложение не очень интенсивно обрабатывается (мало ожиданий API).

+0

отличные ans! Один вопрос, я чувствую req/ms x ms/req ~ = число активных экземпляров. Есть ли какая-либо ссылка, чтобы описать более подробную информацию для этой оценки? – lucemia

4
  1. Это не означает, что ваше приложение будет быстрее, запрос по-прежнему подается из одного потока.
  2. Когда приложение является потокобезопасным, каждый экземпляр теперь может генерировать несколько потоков, каждый поток будет обслуживать запрос, прикрепленный к безопасному потоку, где каждый экземпляр имеет один поток, обслуживающий запросы.
+0

Мое приложение является потокобезопасным (без общего состояния), должен ли я создавать несколько потоков для повышения производительности? Есть ли какой-нибудь пример для appengine? – 18bytes

3

Python 2.5 все еще немного быстрее, по запросу, чем Python 2.7. Частично это связано с тем, насколько зрелым является каждый. App Engine использует различные механизмы для поддержки каждого из них. Победой с Python 2.7 является ее способность поддерживать параллельные запросы, а не разворачивать новые экземпляры со скоростью, требуемой Python 2.5 для обработки всплесков нагрузки.

Вопрос «как это работает на внутреннем уровне» - это вопрос, на который вы, вероятно, не собираетесь получить ответ, но есть разговоры из прошлогоднего ввода-вывода Google, которые подсказывают, что мы делаем и почему. Найдите youtube.com для «приложения движка».

0

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

После продолжительного ухудшения производительности мы попытались переключить наше приложение (Python) обратно в режим NON-threadsafe и были очень удивлены, увидев, что наша производительность улучшилась примерно на 10 раз. Таким образом, мы оставили это. Наша команда поддержки GAE не смогла объяснить, как это может быть.В прошлый раз, когда мы были профилированы, мы были полностью привязаны к хранилищу данных и теоретически должны были получать много усилий от многопоточности.

Так что из нашего опыта ... не только не предполагайте, что потокобезопасность будет быстрее, это может быть МНОГО медленнее. Если кто-то знает, как это может быть, поделитесь.

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