Первоначальные запросы к хранилищу данных и облачным задачам имеют большую задержку, это нормально? - PullRequest
0 голосов
/ 31 октября 2019

Сервис службы моего приложения написан на Go. У меня есть код, который подключается к облачному хранилищу данных еще до того, как сервер прослушивает порт. Существует один запрос Projection, который занимает около 500 мсек, читая только 4 объекта. Возможно ли, чтобы первое взаимодействие с хранилищем данных имело большую задержку, поскольку необходимо установить соединение? В любом случае можно уменьшить задержку соединения с хранилищем данных? Кроме того, есть ли какая-либо разница в выполнении этого вызова базы данных перед прослушиванием порта по сравнению с выполнением его в запросе на разогрев (это автоматически масштабируемый экземпляр).

Подобно высокой начальной задержке для Cloud Datastore, я вижу аналогичноешаблон для облачных задач. Первоначальное создание задачи может достигать 500 мс, но даже последующие могут быть в любом месте от 200 до 400 мс. Это у нас - центральное. На самом деле я рассматривал вопрос о переносе обновления базы данных в фоновую задачу, но в целом я вижу, что задержка создания задачи будет более или менее такой же, как при выполнении транзакции для чтения и обновления данных, не приносящей никакой чистой выгоды.

Наконец, время запуска экземпляра обычно составляет от 2,5 до 3 секунд, при этом основной вызов вызывается примерно через 2 секунды. Время запуска моего приложения - вышеупомянутая стоимость запроса проекта 500 мс и ничего больше. Таким образом, независимо от того, насколько я оптимизирую запуск своего приложения, я должен допустить дополнительную задержку около 2 секунд?

Обратите внимание, что нагрузка на систему очень мала, поэтому эти проблемы не могут быть из-за большого объема.

Обновление: файлы развертывания, запрошенные Мигелем (это для тестовой среды, исследующей характеристики производительности. Развертывание Prod будет более щедрым для экземпляров)

приложение по умолчанию:

service: default
runtime: go112
instance_class: F1
automatic_scaling:
  min_instances: 0
  max_instances: 1
  min_idle_instances: 1
  max_idle_instances: 1
  min_pending_latency: 200ms
  max_pending_latency: 500ms
  max_concurrent_requests: 10
  target_cpu_utilization: 0.9
  target_throughput_utilization: 0.9
inbound_services:
- warmup

Бэкэнд-приложение:

service: backend-services
runtime: go112
instance_class: B1
basic_scaling:
  idle_timeout: 1m
  max_instances: 1

1 Ответ

1 голос
/ 04 ноября 2019

200-500 мс для инициализации клиента кажется разумным, поскольку устанавливается удаленное соединение. Кроме того, холодный запуск в течение 1-2 секунд для App Engine также кажется нормальным.

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

Я бы также порекомендовал посмотреть режим, в котором вы запускаете свое хранилище данных (native vs datastore). При использовании режима хранилища данных увеличивается задержка, для получения дополнительной информации см. Рекомендации по работе с облачным хранилищем данных .

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