Облачные функции Google + конечные точки через ESPv2: проблема с тайм-аутом - PullRequest
2 голосов
/ 04 мая 2020

У меня есть различные облачные функции, которые доступны через конечные точки Google для облачных функций. Я следовал более или менее этому руководству: https://cloud.google.com/endpoints/docs/openapi/get-started-cloud-functions. Это устанавливает экземпляр ESPv2 в Google Cloud Run. Пока это работает.

Проблемы возникают с одной долго работающей облачной функцией. Если запрос выполняется более чем на прибл. 30 секунд, это прекращается. Затем API возвращает код ошибки 504.

Журналы облачного запуска показывают следующую запись:

Запрос был прерван, поскольку достиг максимального времени ожидания запроса. Чтобы изменить это ограничение, см. https://cloud.google.com/run/docs/configuring/request-timeout

В указанной документации объясняется, как настроить тайм-аут службы облачного запуска. Там у меня уже было гораздо более высокое время ожидания:

spec:
  timeoutSeconds: 900

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

Документация по поиску и устранению неисправностей не помогает. Сначала я думаю, что это только для ESPv1 (и я не могу найти что-то подобное явно для v2), и в нем вообще не упоминается ответ 504.

Возможно ли, что мне нужно настроить сервер Envoy напрямую? Как бы я это сделал? Что-то еще мне не хватает для настройки тайм-аутов?

Ответы [ 2 ]

2 голосов
/ 04 мая 2020

Я думаю, что это не проблема в Cloud Run (где максимальное время ожидания составляет 900 с, а не 300 (по умолчанию для Cloud Run, а 600 - максимальное для PubSub)).

Таким образом, у Cloud Endpoint есть тайм-аут. но это задокументировано в 15, а не в 30, странно ... Таким образом, вы можете переопределить его с помощью параметра крайнего срока в вашем определении x-google-backend

0 голосов
/ 04 мая 2020

Вы попадаете в облачный запуск максимум через 300 секунд. Если вам нужен более высокий тайм-аут (600 с), вы можете использовать облачный запуск на Anthos. (Который стоит дорого, если это все функции, которые вам нужны).

Для желаемого тайм-аута на 900 с самый простой способ - это разверните свой контейнер в вычислительном экземпляре (это может быть сделано во время запуска и требует совсем немного усилий).

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

Если у вас уже есть кластер k8s, вы можете развернуть эту функцию облачного запуска с помощью knative и настроить как knative, так и Ваш сервис me sh (istio) Тайм-аут. Имейте в виду, что вы рискуете DoS / Do $ злоумышленниками.

...