Почему в Google App Engine всегда 11 секунд задержки приходят только для первых запросов? - PullRequest
0 голосов
/ 01 сентября 2018

Я развертываю мое Nodejs пример приложения в Google App Engine Flexible env, и когда я использую URL-адрес движка Google App Engine, который имеет форму appspot.com, чтобы попасть в мой API, требуется около 11 секунд, чтобы отправить ответ от моего mobile data, но другие API отправляют ответ в миллисекундах.

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

Редактировать - Я обнаружил, что

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

Вот почему я проверил в своих журналах, что readiness проверка выполняется иногда около 1 sec а иногда около 200 ms

enter image description here

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

Редактировать 2

Я также попытался установить min_num_instances: 2, чтобы после загрузки по крайней мере мои 2 экземпляра снова не загрузились, но дело в том, что задержка снова такая же.

Редактировать 3

runtime: nodejs
#vm: true
env: flex

automatic_scaling:
  min_num_instances: 2
  max_num_instances: 3

Редактировать 4

Я замечаю странное поведение, когда я использую это приложение Packet Capture для захвата трафика, тогда все запросы https (если я не включаю SSL-прокси) и все запросы Http выполняются в milisecs, тогда как без использования этого приложения все запросы Http / Https занимают 11-16 секунд задержки.

Не знаю как, но есть ли здесь какая-нибудь проблема с сертификатом?

Редактировать 5

Ниже я подключил Network Profiler, где задержка наступает через 15 секунд

enter image description here

Пожалуйста, помогите

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

В прошлый раз, когда я проверял, я помню, что мне нужно было поставить обработчик запросов на разогрев , чтобы Google знал, что экземпляр запущен и может использоваться для ответа на вызовы. Имейте в виду, что код должен находиться ТОЧНО под конечной точкой, указанной в обработчике в файле yaml. (Не впервые кто-то забудет об этом)

Вот документы https://cloud.google.com/appengine/docs/standard/python/configuring-warmup-requests это специфично для Python, но вы также можете проверить другие языки, такие как Go, Java и другие, в документах.

Если проблема зависит от клиента (каждый раз, когда новый клиент порождает и делает вызов, он получает задержку), то, скорее всего, это проблема либо самого клиентского приложения, либо инициализации, регистрации или разрешения DNS.

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

0 голосов
/ 24 сентября 2018

Проблема теперь решена, это происходило из-за поставщика сетевых услуг, который является Bharti Airtel, их поиск DNS занимал время, чтобы определить имя хоста. После явного использования альтернативного DNS, такого как Google 8.8.8.8, проблема была полностью решена. Возможно, это проблема совместимости Airtel с Google Cloud.

0 голосов
/ 04 сентября 2018

Зависит от того, какой App Engine вы используете и как настраиваете масштабирование. Всегда есть время загрузки, если у вас нет готового экземпляра для обработки запроса. Но если у вас есть проверка готовности, чтобы убедиться, что ваш экземпляр готов (и не был запущен при запросе), проблем не должно быть.

Можете ли вы найти запрос на загрузку или любой другой медленный запрос в ваших журналах? Если нет, то это скорее всего проблема с приложением. Если возможно, вместо вызова этого API в вашем приложении, сделайте это из двух приложений (одно уже открыто, другое нет). Таким образом, вы делаете звонки из обоих приложений, и если вы заметили, что уже открытое приложение получает ответ быстрее, чем другое, это означает, что это проблема самого приложения. App Engine не может определить, является ли ваше приложение предварительно открытым, поэтому любая разница будет на стороне клиента.

=== Дополнительная информация ===

В ваших логах вообще нет задержки. Запрос поступил в Google и был обработан в течение нескольких миллисекунд. Я уверен, что есть что-то на стороне приложения. Может быть, ваше приложение создает URL-адрес запроса (первый запрос) из другого источника, что приводит к задержке? App Engine не знает, открыто ли ваше приложение или нет, и отправляет ли он первый запрос после открытия, оно не может действовать по-другому, основываясь на нем. Пока ваш экземпляр App Engine готов и доступен, он будет обрабатывать ваш запрос одинаково, независимо от того, будет ли это ваш первый запрос после открытия приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...