Как устранить проблемы с высокой задержкой при работе в GCP Cloud Run Облачный SQL

# #.net-core #google-cloud-run

Вопрос:

У меня есть веб-приложение, написанное на ASP. НЕТТО 6.x. В настоящее время я только заканчиваю перенос проекта с AWS в Google Cloud, но я замечаю, что задержка в целом выше, а обработка некоторых более сложных операций на моем сервере занимает значительно больше времени по сравнению с запуском на t2-small экземпляре AWS.

Мой сервер api приложений работает в docker, развернут в Google Cloud Run, 4 vCPU и 2 ГБ памяти (экземпляры gen2).

Он подключается к mysql 8.0 базе данных CloudSQL, которая работает на db-g1-small 1,7 ГБ памяти, 1 vCPU.

У меня также есть балансировщик нагрузки перед облачным приложением для поддержки моего пользовательского домена HTTPS.

Однако почти все запросы к моему серверу занимают 500 мс TTFB в chrome (время до первого байта ответа) даже для тривиальных запросов к базе данных 1 мс.

Для справки, копирование всей рабочей базы данных на мой локальный компьютер и запуск сервера локально, один и тот же TTFB запроса составляет около 50 мс.

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

Вот что я пытался исключить из некоторых причин:

  • Я попытался обойти балансировщик нагрузки и напрямую подключиться к экземпляру Cloud run. Не возымело никакого эффекта.
  • Я увеличил облачный запуск до максимальных настроек процессора и значительно увеличил объем оперативной памяти, чем требуется моему приложению, но это не возымело никакого эффекта. Я также попытался сделать процессор «всегда включенным».
  • Я попытался увеличить тип экземпляра в облачном SQL, чтобы иметь больше vCPU и оперативной памяти, но это также не возымело никакого эффекта.
  • Я попытался запустить приложение локально, но подключился к облачной базе данных SQL. Запросы обрабатываются примерно за 600 мс.
  • Вызов конечной точки, которая не запрашивает облачный SQL, также имеет задержку не менее 300 мс. Для справки, это занимает около 19 мс при локальном запуске.
  • Согласно тестам скорости, мой интернет-пинг составляет 23 мс.
  • Показатели облачного запуска не показывают значительного использования процессора или памяти, поэтому это похоже на проблему с сетью

Основываясь на приведенной выше информации, похоже, что большая часть задержки «300 мс» просто выполняется / обрабатывается в облаке. еще 200 мс, если задействован запрос. Учитывая, что более сложные запросы, по-видимому, имеют непропорционально большую задержку, похоже, что причиной является просто слабая мощность процессора в одном потоке при запуске Google cloud.

Нормально ли, что тривиальный HTTP — запрос занимает минимум 300 мс при запуске в облаке? Как я могу устранить эту проблему и/или устранить ее?

Комментарии:

1. Я бы сказал, что что-то не так в вашем контейнере или в вашем приложении. Замените контейнер чем-нибудь статичным, например, для обслуживания HTML-страницы, вы получите быстрые ответы. Я бы также исследовал регион, но 99% — это что-то неправильное в вашем контейнере. Поэкспериментируйте с действительно базовым контейнером из . ЧИСТАЯ экосистема, так как у меня есть предчувствие, что что-то в вашей . Экосистема NET медленно загружается в ваш контейнер.

2. Поделитесь примером используемого вами контейнера hello world, используйте gist или ссылку на github для быстрого обмена. Мы можем попробовать, чтобы проверить, является ли контейнер «медленным внутри».

3. Я попытался создать новую облачную службу запуска с контейнером «привет» по умолчанию, и задержка составляет около 100 мс, что примерно соответствует моему пингу в Монреаль. Я собираюсь попробовать изменить свое базовое изображение на alpine, чтобы посмотреть, поможет ли это вообще. Похоже, виноват мой код, но я все еще не понимаю, как он работает на GCP намного медленнее, чем на моем локальном компьютере.

4. Когда вы тестируете локально, тестируйте с контейнером, а не непосредственно с кодом, чтобы иметь возможность сравнивать сопоставимые вещи. Кроме того, имейте в виду, что ваш процессор может работать до 4 ГГц (в зависимости от возраста и мощности вашей машины). В облаке это больше 2 или 2,4 ГГц, коэффициент 1,5 или 2 приемлем.

5. @Брэд, я могу постоянно видеть 50 мс, так что есть место для улучшения контейнера. i.imgur.com/MoShogV.png Я отношусь к этому скептически . Сетевая среда может достичь этого, но в Linux и любой другой библиотеке даже PHP, такой как мой образ, возможен.