В качестве предисловия: я знаю, что HTTP-запрос длительностью более 1 минуты - это плохой дизайн, и я собираюсь изучить Cloud Tasks, но я хочу выяснить, почему возникает эта проблема.
Итак как указано в заголовке, у меня есть простой запрос API к сервису Cloud Run (полностью управляемый), который занимает более 1 минуты, который выполняет некоторые операции с БД, генерирует PDF-файлы и загружает их в GCS. Когда я делаю этот запрос от клиента (браузера), он постоянно возвращает мне ответ 502 через 1 минуту ожидания (предположительно поступающий от балансировщика нагрузки HTTP):
Однако, когда я смотрю журналы, запрос успешно завершен (примерно через 4–5 минут):
I ' m также получает одну из этих "ошибок" для каждого PDF-файла, который создается и загружается в GCS, но, судя по тому, что я прочитал, это не должно быть проблемой?:
1022
Я установил максимальное время ожидания запроса в Cloud Run (15 минут), максимальное количество одновременных запросов на значение по умолчанию 80, объем ЦП и ОЗУ на 2 и 2 ГБ соответственно, а время ожидания на сервере Fastify (node.js) - на 15 минут. также. Кроме того, я просмотрел журналы и не смог обнаружить ошибку, указывающую на то, что экземпляру не хватает памяти или любую другую ошибку примерно в то время, когда я получаю ошибку 502. Наконец, я также последовал совету использовать strace, чтобы более подробно изучить системные вызовы, на случай, если там что-то пойдет не так, но из того, что я увидел, все выглядело нормально.
В конце концов, мои подозрения заключается в том, что при маршрутизации между контейнером и шлюзом / балансировщиком нагрузки существует какое-то странное состояние гонки, но я почти ничего не знаю о Knative (на котором построен Cloud Run), так что опять же, это просто догадка.
Если вы хотите узнать, почему это происходит, дайте мне знать!