Простое приложение HelloWorld на cloudrun (или knative) кажется слишком медленным - PullRequest
0 голосов
/ 29 мая 2019

Я развернул пример приложения HelloWorld на Google Cloud Run, который в основном равен k-native, и каждый вызов API в лучшем случае занимает 1,4 секунды, сквозным способом.Это должно быть так?

Пример приложения: https://cloud.google.com/run/docs/quickstarts/build-and-deploy

Я развернул то же самое приложение на своем локальном хосте как докер-контейнер, и это занимает около 22 мс, от начала до конца.end.

То же приложение в моем кластере GKE занимает около 150 мс, сквозное.

import os

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    target = os.environ.get('TARGET', 'World')
    return 'Hello {}!\n'.format(target)

if __name__ == "__main__":
    app.run(debug=True,host='0.0.0.0',port=int(os.environ.get('PORT', 8080)))

Я немного знаком с FaaS и ожидаю, что вызовы APIполучить быстрее, как я вызывал их в ряд.(как при холодном старте по сравнению с горячим стартом)

Но независимо от того, сколько раз я выполняю команду, она не опускается ниже 1,4 секунды.

Я думаю, что сетевое расстояние недоминирующий фактор здесь.Время прохождения туда-обратно через ping до конечной точки API составляет всего 50 мс, более или менее

Поэтому у меня следующие вопросы:

  1. Это потенциально непреднамеренная ошибка?Это техническая проблема, которая будет решена в конце концов?Или, может, в этом нет ничего плохого, это просто SLA в k-native?

  2. Если с Google Cloud Run и / или k-native нет ничего плохого, то что является доминирующим фактором, требующим много времени длямой вызов API?Я хотел бы изучить механизм.


Дополнительные сведения:

  • Где я нахожусь: Сеул / Азия
  • Регион для моего приложения Cloud Run: us-central1
  • тип подключения к Интернету, который я тестирую: Бизнес, Проводной
  • Размер изображения контейнера приложения: 343,3 МБ
  • расположение корзины, которую использует Реестр контейнеров: gcr.io

WebPageTest из Сеула / Азия (время прогрева):

  • Тип содержимого: текст /html
  • Начало запроса: 0,44 с
  • Поиск DNS: 249 мс
  • Начальное подключение: 59 мс
  • Переговор SSL: 106 мс
  • Время до первого байта: 961 мс
  • Загрузка контента: 2 мс

WebPageTest из Чикаго / США (время прогрева):

  • Тип содержимого: текст / html
  • Начало запроса: 0,171 с
  • Поиск DNS: 41 мс
  • Начальное подключение: 29 мс
  • Переговоры SSL: 57 мс
  • Время доПервый байт: 61 мс
  • Загрузка контента: 3 мс

ОТВЕТ Steren, менеджер по продукту Cloud Run

Мы обнаружили высокий уровеньзадержка при вызове сервисов Cloud Run из определенных регионов мира.К сожалению, Сеул, кажется, один из них.

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

[Обновление: у этого человека есть проблема с сетью в его области.Я проверил его конечную точку из Сиэтла без проблем.Подробности в комментариях ниже.]

Я работал с Cloud Run постоянно в течение последних нескольких месяцев.Я развернул несколько производственных приложений и десятки тестовых сервисов.Я в Сиэтле, Cloud Run в нас-центральном1.Я никогда не замечал задержки.На самом деле, я впечатлен скоростью запуска контейнера.

Для одного из моих сервисов я вижу время холодного запуска до первого байта 485 мс.Следующий вызов 266мс, 360мс.Мой контейнер проверяет сертификаты SSL (2) в Интернете.Время отклика очень хорошее.

Для другой службы, которая является веб-сайтом PHP, время первого байта при холодном запуске составляет 312 мс, затем 94 мс, 112 мс.

Какие могут быть факторы, которые отличаютсядля вас?

  1. Насколько велика картинка вашего контейнера?Проверьте реестр контейнера на размер.Мои контейнеры меньше 100 МБ.Чем больше контейнер, тем дольше время холодного запуска.
  2. Где находится корзина, которую использует Реестр контейнеров?Вы хотите, чтобы ведро было в нас-центральном1 или по крайней мере в США.Это скоро изменится, когда будут объявлены новые регионы Cloud Run.
  3. Какой тип интернет-соединения вы тестируете?Домашний или Бизнес.Беспроводное или Ethernet соединение?Где в мире вы тестируете?Запустите временный экземпляр Compute Engine, повторите тесты в Cloud Run и сравните.Это удалит вашего провайдера из уравнения.

Увеличьте объем памяти, выделенной для контейнера.Влияет ли это на производительность?Python / Flask не требует много памяти, мои контейнеры обычно 128 МБ и 256 МБ.Изображения контейнеров загружаются в память, поэтому, если у вас раздутый контейнер, у вас может остаться достаточно памяти, что снижает производительность.

Что показывают журналы Stackdriver?Вы можете видеть запуск контейнера, запросы и завершение контейнера.

0 голосов
/ 04 июня 2019

(менеджер продукта Cloud Run здесь)

Мы обнаружили высокую задержку при вызове сервисов Cloud Run из некоторых регионов мира.К сожалению, Сеул, похоже, является одним из них.

Мы явно укажем это как Известная проблема , и мы работаем над ее устранением до Общей доступности.Не стесняйтесь открывать новый выпуск в нашем трекере общественного выпуска

...