Google App Engine очень медленно реагирует на загрузку файлов - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть приложение Django, работающее в стандартной среде GAE (Google App Engine).Я загружаю видео через свое приложение в облачные сегменты Google (используя dropzone на внешнем интерфейсе).Размер моих видео большой, поэтому я отправляю свой файл кусками в GAE, а затем воссоздаю и загружаю в GCS.Он работает нормально.

У меня проблемы с запросом на загрузку чанков, занимающих много времени (15 с для загрузки чанка 1 МБ, я удалил обработку чанка и все еще занимает 15 с)

@login_required(login_url="/login/")
@require_http_methods(["POST"])
def upload_chunks(request):
    try:
        file = request.FILES['file']            
        # upload_utils.upload_image_file(file); //Commented it out
        return JsonResponse({"status": True})
    except Exception as e:
        return HttpResponseServerError(str(e))

Каждая загрузка чанка занимает 15 секунд, и все время тратится в TTFB

Every Chunk Upload takes 15 sec

enter image description here

Также при увеличении размера моего чанка, скажем, до 8 МБ, запрос отменяется, так как он занимает более 30 секунд.

Пожалуйста, помогите !!

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Лучший способ загрузить большие файлы в Google Cloud - это сделать это напрямую в Google Cloud Storage .Эту задачу можно выполнить двумя различными способами:

  1. Загрузка параллельных кусков (до 32) и затем составление их в один объект .Используя этот подход, не забудьте удалить временные фрагменты.

  2. При использовании возобновляемых загрузок, автоматически возобновится при прерывании .Вот пример кода загрузки видео с использованием javascript :


0 голосов
/ 07 февраля 2019

Итак, PHP документация предлагает CloudStorageTools::createUploadUrl():

Загрузка файлов пользователем напрямую в Google Cloud Storage быстрее и экономичнее, чем запись в Google Cloud Storage из приложения App Engine, посколькуэто потребляет часы экземпляра и несет стоимость.Более того, запись файла не происходит в запросе к приложению.Поэтому он освобождается от 60-секундного ограничения, которое в противном случае применимо и позволяет загружать очень большие файлы.

https://cloud.google.com/appengine/docs/standard/php/googlestorage/user_upload#createuploadurl_options

Но документы Python Cloudtorage, похоже, не имеют обратнойsection

Тем не менее, старые документы в Blobstore имеют аналогичное имя create_upload_url(), где вы указываете gs_bucket_name:

https://cloud.google.com/appengine/docs/standard/python/refdocs/google.appengine.ext.blobstore.blobstore#google.appengine.ext.blobstore.blobstore.create_upload_url

Так что, возможно, это будет сделано

Больше информации о документах в интернет-магазине:

https://cloud.google.com/appengine/docs/standard/python/tools/webapp/blobstorehandlers#BlobstoreUploadHandler

...