# #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. Так же, как и возникла проблема… Кажется, он исчез (не произошло за последние пару часов). Так что, я думаю, вы были правы насчет того, что это проблема с обслуживанием (предположительно исправлена). ^^