Облачная функция - получение содержимого файла более 10 МБ - PullRequest
0 голосов
/ 11 мая 2019

На странице квот функции Google Cloud Function: https://cloud.google.com/functions/quotas указано, что максимальный объем данных, отправляемых функцией HTTP в ответ HTTP, составляет 10 МБ. У меня есть файлы размером 100 МБ в Google Storage Bucket, которые я хочу передать из облачной функции в мое приложение. Из-за аспектов безопасности нашей архитектуры мое приложение не может читать напрямую из Storage Bucket.

Пример кода Go в облачной функции:

func MyFn(w http.ResponseWriter, r *http.Request) {

    var appendedBytes []byte
    for {
        decryptedFileBuffer, err := fh.GetNextDecryptedPage()
        if err != nil {
            break
        }
        appendedBytes = append(appendedBytes, decryptedFileBuffer...)
    }
    w.Write(appendedBytes)
}

Если я пытаюсь получить файлы размером более 10 МБ с помощью облачной функции, я получаю следующие ошибки:

Ошибка: неправильный ответ функции. Вызов функции был прерываться.

Ошибка: не удалось обработать запрос

Как я могу получить файлы размером более 10 МБ из облачной функции?

1 Ответ

2 голосов
/ 11 мая 2019

Когда мы смотрим на страницу квот, мы видим нет против того, может ли квота быть увеличена. Новый игрок в городе - Google Cloud Run ... см. здесь . Это предоставляет возможности, очень похожие на Cloud Functions, но использует Kubernetes в качестве среды размещения функций. Это квота допуск составляет 32 МБ ... но это тоже меньше, чем нужно, и также помечено как нет для увеличения.

Мне сразу приходит в голову мысль об удобстве торговли (простая облачная функция) для гибкости и запуска собственных вычислительных ресурсов в GCP. Например, запуск Compute Engines, App Engines или кластера Kubernetes, где содержащееся приложение отправляет ответы через веб-сервер, является идеальным предложением и не ограничен в производительности. Вам нужно будет выполнить расчеты по выставлению счетов, чтобы определить различия в расходах, поскольку показатели будут другими, но с технической точки зрения игра кардинально меняется. Облачные функции / возможности облачного запуска предназначены главным образом для поддержки очень коротких микросервисов, и я предполагаю, что передача 100 МБ напрямую не считается микросервисом. Это также может быть не так эффективно с точки зрения затрат, как можно подумать. Насколько я понимаю, облачные функции оплачиваются за единицу времени. Передача 100 МБ, скорее всего, будет медленной задержкой и может оказаться не столь экономически эффективной по сравнению с постоянно работающими вычислениями, как мы можем подумать.

...