Google Cloud Run работает очень медленно по сравнению с локальной машиной - PullRequest
2 голосов
/ 11 апреля 2020

У нас есть небольшой скрипт, который очищает веб-страницу (~ 17 записей) и записывает их в коллекцию Firestore. Для этого мы развернули сервис в Google Cloud Run.

Выполнение этого кода занимает ~ 5 секунд при локальном тестировании с использованием Docker Контейнерное изображение. То же изображение при развертывании в Cloud Run занимает более 1 минуты.

Даже простая команда «Удалить все документы в коллекции», которая занимает 2-3 секунды локально, занимает более 10 секунд при развертывании в Cloud Run.

Мы знаем о Cold Start, поэтому мы протестировали производительность Cloud Run на третьем, четвертом и пятом последующих запусках, но все еще довольно медленно.

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

Ожидается ли это? Являются ли отдельные экземпляры Cloud Run действительно такими слабыми? Можем ли мы сделать что-нибудь, чтобы сделать это быстрее?

Проблема с этой медлительностью заключается в том, что если мы запустим наш код для большого количества записей, Cloud Run в конечном итоге истечет (не говоря уже о стоимости Cloud Run в секунду). )

1 Ответ

1 голос
/ 11 апреля 2020

Отправка ответа на мой собственный вопрос, так как мы много экспериментировали с этим и обнаружили проблемы в нашей собственной реализации.

В нашем случае причиной супер медленной производительности были асинхронные c вызовы без обещаний или обратные вызовы.

То, что мы изначально пропустили, было в этом разделе: Как избежать фоновых операций

Наш код не ожидал завершения операции asyn c и отвечал на запрос сразу. Затем операция asyn c перешла в фоновую активность и навсегда перешла к окончанию sh.


Отвечая на комментарии, опубликованные или похожие вопросы, которые могут возникнуть: 1. Мы не пробовали экспериментировать с локально, настроив виртуальную машину с той же конфигурацией, потому что мы выяснили причину раньше.

Мы ничего не пишем в файловой системе (пока), а операции - это простые вызовы. Но это хороший вопрос, и мы будем помнить об этом, когда будем хранить / записывать данные
...