Хранилище Firebase возвращает 503 и пустой ответ при загрузке общедоступного URL-адреса из облачного запуска

# #python #firebase-storage #google-cloud-run

Вопрос:

У меня есть облачный контейнер, который извлекает CSV-файл из общедоступного URL-адреса хранилища Firebase. Выборка выполняется с requests помощью модуля Python (т. е.: requests.get() ).

Иногда, по-видимому, случайным образом, я получаю код состояния 503, и ответ имеет нулевую длину:

 {
  'X-GUploader-UploadID': 'XXX...',
  'Date': 'Tue, 19 Oct 2021 12:26:39 GMT',
  'Expires': 'Tue, 19 Oct 2021 12:26:39 GMT',
  'Cache-Control': 'private, max-age=0',
  'Content-Length': '0',
  'Server': 'UploadServer',
  'Content-Type': 'text/html; charset=UTF-8',
  'Alt-Svc': 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000'
}
 

Без повторной загрузки файла и просто повторной попытки через пару минут тот же запрос может привести к ожидаемому непустому ответу (с кодом состояния 200).:

 {
  'X-GUploader-UploadID': 'XXX...',
  'Expires': 'Tue, 19 Oct 2021 12:49:05 GMT',
  'Date': 'Tue, 19 Oct 2021 12:49:05 GMT',
  'Cache-Control': 'private, max-age=0',
  'Last-Modified': 'Wed, 04 Aug 2021 06:49:35 GMT',
  'ETag': '"9b6916..."',
  'x-goog-generation': '16280...',
  'x-goog-metageneration': '1',
  'x-goog-stored-content-encoding': 'identity',
  'x-goog-stored-content-length': '51666',
  'x-goog-meta-firebaseStorageDownloadTokens': '1954069b-...',
  'Content-Type': 'application/vnd.ms-excel',
  'Content-Disposition': "inline; filename*=utf-8''csvdata",
  'x-goog-hash': 'crc32c=1LcP6Q==, md5=m1kWwxGuzZXeO4ZuA0NT5A==',
  'x-goog-storage-class': 'STANDARD',
  'Accept-Ranges': 'bytes',
  'Content-Length': '51666',
  'Vary': 'Origin',
  'Server': 'UploadServer',
  'Alt-Svc': 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"'
}
 

Не удается воспроизвести с помощью запроса с моего компьютера (т. е. файл всегда загружается правильно). Похоже, это происходит только при запуске в облаке.

Есть какие-нибудь идеи о том, что может происходить?

Комментарии:

1. Каково значение состояния HTTP, возвращаемое в примере с пустой длиной содержимого?

2. @JohnHanley Я только что обновил заголовок и описание вопроса, чтобы отметить код статуса 503.

Ответ №1:

Состояние HTTP 503 облачного хранилища означает, что в Облачном хранилище произошла внутренняя ошибка. Обычно это означает, что вы можете повторить попытку позже (например, подождать десять секунд), и запрос будет выполнен успешно при условии, что исходный запрос действителен.

Рекомендуемое решение-повторить попытку с использованием усеченного экспоненциального отката.

Ссылка: 503 — Услуга недоступна

[ОБНОВЛЕНИЕ — см. Комментарии ниже]

Если один экземпляр работает правильно, а другой идентичный экземпляр постоянно выходит из строя, то у вас проблема со службой. Вам нужно будет открыть обращение в службу поддержки в Google Cloud. Соберите свои журналы, чтобы четко указать, что вы прокомментировали, чтобы Google знал, что диагностировать.

Комментарии:

1. Экземпляр Cloud Run запускает сервер Flask, который работает в течение нескольких минут или даже дольше, если он активен. Похоже, что один и тот же экземпляр продолжает отказывать со статусом 503, пока не умрет (т. Е. Кажется, что ожидание пары секунд или даже больше не помогает). Имеет ли это для вас какой-то смысл?

2. @Peque — Найдите журналы, которые показывают, что один и тот же экземпляр получает 503. Это покажет время для каждого запроса. Если ваша служба просто выполняет один запрос за другим, это плохая стратегия повторных попыток.

3. Спасибо, Джон. Я действительно прочитал журналы перед публикацией. Это один и тот же экземпляр, и в своих тестах я убедился, что второй экземпляр не был создан. Реализованы автоматические повторные попытки с задержкой 1, 2, 3 секунды соответственно. Затем я выполнил повторные попытки вручную, которые дали те же результаты, если они были выполнены в одном и том же экземпляре, и даже после ожидания 1 минуты.

4. @Peque — Если один экземпляр работает правильно, а другой идентичный экземпляр постоянно выходит из строя, то у вас проблема со службой. Вам нужно будет открыть обращение в службу поддержки в Google Cloud. Соберите свои журналы, чтобы четко указать, что вы прокомментировали, чтобы Google знал, что диагностировать.

5. Так же, как и возникла проблема… Кажется, он исчез (не произошло за последние пару часов). Так что, я думаю, вы были правы насчет того, что это проблема с обслуживанием (предположительно исправлена). ^^