2015-02-18 4 views
0

Нам нужно создать веб-сервис, который должен всегда отвечать в пределах 100 мс. Мы планируем использовать memcache как нашу систему хранения, чтобы избежать латентности от Google Cloud SQL или DataStore.App Engine и медленное время отклика

Является ли хорошей идеей использовать App Engine с Python или это слишком медленно?

ответ

1

Datastore обычно занимает от низкого до середины десятков миллисекунд, а получение memcache обычно составляет от одного до двух миллисекунд. Итак, если это все, что вы собираетесь использовать и игнорируете собственное время HTTP-запроса, вы можете туда добраться.

Однако App Engine иногда делает запрос на загрузку, когда ему нужно масштабировать и показывает следующее сообщение:

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

.

Что такое запрос на загрузку?

Некоторые запросы выполняются медленнее, потому что App Engine необходимо создать новую виртуальную машину Java (JVM) для обслуживания запроса. Такого рода запрос - - запрос на загрузку. Во время запроса на загрузку ваша заявка подвергается инициализации (например, загрузка классов, компиляция JIT и т. Д.) , что заставляет запрос занимать больше времени.

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

Вы можете найти эти типы запросов в журналах запроса путем фильтрации на loading_request = 1

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

+1

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

+0

У меня были хорошие результаты с Python и Java с точки зрения задержки, но найти латентность загрузки на Java может быть проблематичным. Вы _may_ find Go дают более низкую задержку, чем Python, за счет менее зрелого API. Возможно, вам захочется прототипировать что-то и использовать [Cloud Trace] (https://cloud.google.com/tools/cloud-trace), чтобы увидеть разбивку RPC (например, Memcache, Datastore). – tx802

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