Миграция из файлов AppEngine в облачное хранилище

Вчера API файлов имел необъявленное время простоя (ApiTemporaryUnavailableError), которое длилось несколько часов.

Теперь мы думаем о замене API файлов (теперь устаревшего) на облачное хранилище (GCS), но по-прежнему продолжаем использовать API хранилища BLOB-объектов для других операций (таких как загрузка или скачивание файлов). Мы также будем хранить существующие файлы, записанные с помощью файлового API, в blobstore.

Основная проблема заключается в том, что наше приложение позже использует BlobInfo (для определения типов mime, имен файлов, списков BLOB-объектов). Но в документации сказано, что файлы, написанные на GCS и вставленные через blobstore.create_gs_key в blobstore, не имеют BlobInfo.

Каковы возможные решения?

  • Напишите арбитр хранилища (который использует метаданные BlobInfo или GCS)
  • Сохраняйте собственную таблицу данных BlobInfo в дополнение к таблице Google.
  • Преобразование всей базы кода из хранилища BLOB-объектов в GCS (и перенос существующих BLOB-объектов в GCS).
  • Забудьте об AppEngine и запустите наше автономное приложение (см. ниже) на Compute Engine или EC2.
  • ???

Примечание. У нас также есть автономная версия нашего приложения (которое работает локально), в котором используется частная реализация частей API AppEngine (мы не используем сервер разработки), который используется нашим приложением. Таким образом, каждый фрагмент кода нуждается в локальной реализации.


person Ruediger Jungbeck    schedule 01.10.2014    source источник
comment
это определенно не ответ, но я думаю, стоит отметить, что файловый API резервируется. Это не значит, что он не вернется, но ваш старый код должен работать некоторое время :)   -  person Patrice    schedule 02.10.2014
comment
Если вы решите продолжать использовать AppEngine, перспективным решением будет рефакторинг кода в GCS и миграция существующих BLOB-объектов в GCS (например, простой mapreduce, который будет выполнять итерацию по всем объектам, считывать BLOB-объекты и записывать их в GCS).   -  person Nikita Uchaev    schedule 02.10.2014


Ответы (1)


Я написал суть использования GCS. Посмотрите здесь: https://gist.github.com/voscausa/9541133 Здесь показано, как для установки и использования приложения GCS в среде разработки и развертывания.

person voscausa    schedule 01.10.2014
comment
Я уже понял, как писать в GCS. Моя проблема в том, что наше приложение использует BlobInfo. Вы получаете BlobInfo для файлов GCS? - person Ruediger Jungbeck; 02.10.2014
comment
GCS имеет функциональный интерфейс, а не класс, подобный BlobInfo. Но вы можете написать свой собственный класс BlobInfo, который использует эти функции для корзины по умолчанию. Я не ожидаю больших трудностей для тех, кого вы упомянули: типы пантомимы, имена файлов и блоб списка. Это то, что вы имеете в виду под арбитром хранения? - person voscausa; 02.10.2014
comment
В настоящее время у нас есть данные в blobstore (ссылка в другой части базы данных через blobkey). Так что либо мы перемещаем их в GCS и обновляем ссылки), либо нам нужен код, который обрабатывает blobstore и GCS (это то, что я имел в виду под арбитром) - person Ruediger Jungbeck; 02.10.2014