Запрос последовательно возвращает 502 через 1 минуту, пока он успешно завершается в контейнере (приложении) - PullRequest
3 голосов
/ 28 мая 2020

В качестве предисловия: я знаю, что HTTP-запрос длительностью более 1 минуты - это плохой дизайн, и я собираюсь изучить Cloud Tasks, но я хочу выяснить, почему возникает эта проблема.

Итак как указано в заголовке, у меня есть простой запрос API к сервису Cloud Run (полностью управляемый), который занимает более 1 минуты, который выполняет некоторые операции с БД, генерирует PDF-файлы и загружает их в GCS. Когда я делаю этот запрос от клиента (браузера), он постоянно возвращает мне ответ 502 через 1 минуту ожидания (предположительно поступающий от балансировщика нагрузки HTTP):

502 Error

Однако, когда я смотрю журналы, запрос успешно завершен (примерно через 4–5 минут):

Request logs

I ' m также получает одну из этих "ошибок" для каждого PDF-файла, который создается и загружается в GCS, но, судя по тому, что я прочитал, это не должно быть проблемой?:

Sandbox errors 1022

Я установил максимальное время ожидания запроса в Cloud Run (15 минут), максимальное количество одновременных запросов на значение по умолчанию 80, объем ЦП и ОЗУ на 2 и 2 ГБ соответственно, а время ожидания на сервере Fastify (node.js) - на 15 минут. также. Кроме того, я просмотрел журналы и не смог обнаружить ошибку, указывающую на то, что экземпляру не хватает памяти или любую другую ошибку примерно в то время, когда я получаю ошибку 502. Наконец, я также последовал совету использовать strace, чтобы более подробно изучить системные вызовы, на случай, если там что-то пойдет не так, но из того, что я увидел, все выглядело нормально.

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

Если вы хотите узнать, почему это происходит, дайте мне знать!

...