#database #google-app-engine #backup #cloud #storage
#База данных #google-app-engine #резервное копирование #облако #Хранение
Вопрос:
У меня есть приложение AppEngine, которое в настоящее время содержит около 15 ГБ данных, и мне кажется, что нецелесообразно использовать текущие инструменты массового загрузки AppEngine для резервного копирования наборов данных такого размера. Поэтому я начинаю изучать другие способы резервного копирования, и мне было бы интересно услышать о практических решениях, которые люди могли использовать для резервного копирования своих данных AppEngine.
Кроме того, я начинаю думать, что облачное хранилище Google может быть хорошим выбором. Мне любопытно узнать, есть ли у кого-нибудь опыт использования облачного хранилища Google в качестве резервной копии своих данных AppEngine, и каков был их опыт, и есть ли какие-либо указания или вещи, о которых я должен знать, прежде чем идти по этому пути.
Независимо от того, какое решение я получу в итоге, я бы хотел, чтобы решение для резервного копирования соответствовало следующим требованиям:
1) Достаточно быстрое резервное копирование и достаточно быстрое восстановление (т. Е. если на мой веб-сайт попадает серьезная ошибка / удаление данных / вредоносная атака, я не хочу отключать его на несколько дней при восстановлении базы данных — под быстрым я подразумеваю часы, а не дни).
2) Отдельное местоположение и учетная запись из моих данных AppEngine — ie. Я не хочу, чтобы кто-то, имеющий доступ администратора к моим данным AppEngine, обязательно имел доступ на запись / удаление к хранилищу резервных данных — например, если моя учетная запись AppEngine взломана хакером или если недовольный сотрудник решит удалить все мои данные, я хотел бы иметь резервные копии, которые отделены от учетных записей администратора AppEngine.
Подводя итог, учитывая, что извлечение данных из облака кажется медленным / болезненным, я хотел бы создать облачное решение для резервного копирования, которое имитирует роль, которую выполняли бы резервные копии на магнитной ленте в прошлом — если бы у меня была резервная лента, никто другой не мог бы изменять содержимое этой ленты — но поскольку я не могу получить ленту, могу ли я хранить защищенную копию своих данных где-нибудь, к которой есть доступ только у меня?
С уважением, Александр
Ответ №1:
Здесь есть несколько вариантов, хотя ни один из них (в настоящее время) не является тем, что вы ищете.
С последним выпуском версии 1.5.5 SDK мы теперь поддерживаем прямое взаимодействие с хранилищем Google — вы можете увидеть, как это делается, здесь. С помощью этого вы можете записывать данные в хранилище Google, но, насколько мне известно, нет способа записать файл, который приложение затем не сможет удалить.
Для фактического сбора данных вы могли бы использовать App Engine mapreduce API. Он имеет встроенную поддержку записи в blobstore App Engine; запись в хранилище Google потребует от вас реализации собственного средства записи в настоящее время.
Другой вариант, как предлагает Вольф, — использовать инструмент администратора хранилища данных для резервного копирования данных в другое приложение. Приложив немного дополнительных усилий, вы могли бы изменить заглушку remote_api, чтобы запретить удаление целевого (резервного) приложения.
Одна вещь, которую вы обязательно должны сделать, несмотря ни на что, — это включить двухфакторную аутентификацию для вашей учетной записи Google; это значительно усложняет для кого-либо получение контроля над вашей учетной записью, даже если они узнают ваш пароль.
Ответ №2:
Bulkloader, вероятно, является одним из самых быстрых способов резервного копирования / восстановления ваших данных.
Проблема с AppEngine в том, что вам приходится все делать через views. Итак, у вас есть ограничения, которые есть у представлений… в результате для быстрого резервного копирования / восстановления все равно приходится использовать те же API, что и для остальной части вашего приложения. Таким образом, bulkloader (возможно, с несколькими модификациями), безусловно, является вашим лучшим вариантом здесь.
Возможно, хотя… (еще не пробовали), вы можете использовать нового администратора хранилища данных для копирования данных в другое приложение. Тот, который контролируете только вы. Таким образом, вы можете скопировать ее обратно из другого приложения, когда это необходимо.
Комментарии:
1. Есть ли у вас какие-либо показатели скорости массового загрузчика для резервного копирования больших наборов данных? По моему опыту, для резервного копирования 15 ГБ данных потребуется много дней.
2. @AlexanderMarquardt: по моему опыту. Если вы предоставите ей достаточное количество потоков, вы сможете загрузить ~ 1 ГБ за 30 минут, но загрузчик имеет тенденцию к сбою с таким количеством данных и потоков. Поэтому я не думаю, что есть хорошее решение, доступное из коробки.