Google App Engine - слишком медленное и дорогое резервное копирование и восстановление? - PullRequest
10 голосов
/ 24 февраля 2012

После работы над несколькими приложениями GAE, некоторые из которых используются для производства, я пришел к выводу, что на этой платформе резервное копирование производственных данных выполняется достаточно медленно и достаточно дорого, чтобы мы могли перейти на какую-то другую облачную среду. стек технологий.

В одном из наших производственных приложений у нас есть около миллиона объектов со средним размером на 1 КБ. Таким образом, общий объем данных составляет около ГБ, что не должно иметь большого значения, верно? Вот вывод инструмента массового загрузчика после извлечения сущностей из движка приложения с параметрами по умолчанию:

[INFO] 948212 объектов (608342497 байт), переданных в 47722,7 секунд

Это почти 13 часов. Поэтому, если бы мы захотели настроить систему почасового резервного копирования для наших производственных данных, это было бы гораздо более невозможным с текущим набором инструментов GAE.

Стоимость - другая история. Я попытался с помощью администратора хранилища данных скопировать объекты в другое приложение, которое, как мне показалось, мы могли бы использовать для резервного копирования. Сначала я установил бюджет в 2 доллара в день, который быстро составил около 5000 объектов, а затем увеличил бюджет до 10 долларов в день, который снова истощился, не приближаясь к тиражированию миллиона объектов.

Я, очевидно, не собираюсь тратить 100 долларов каждый раз, когда мне нужно сделать резервную копию моих данных объемом 1 ГБ, и при этом я не хочу ждать часами (или даже днями) только для того, чтобы мои данные были скопированы. Так что либо я ничего не знаю, либо Google App Engine в настоящее время является просто непрактичным способом написания масштабируемых приложений производственного качества значимого размера, которые можно легко архивировать и восстанавливать.

Существует ли быстрый и экономичный способ резервного копирования данных из приложения GAE?

Ответы [ 4 ]

5 голосов
/ 04 декабря 2012

Держу пари, что вы уже нашли решение Yasser, но для всех, кто попал сюда из Google, вот обновленный ответ:

Опция резервного копирования в администраторе appstore была обновлена ​​для поддержки как хранилища данных, так и облачного хранилища. Он также использует mapreduce для резервного копирования, что значительно облегчает запрос в системе.

2 голосов
/ 24 февраля 2012

В соответствии с GAE Billing Doc , вы должны платить за следующее:

Datastore:

1 query = 2 read operations
1 Mio entity queries = 2 Mio read operations
100k read operations = $0.07

Cost: 1M entities queried = $0.14 

Bandwith:

Price: $0.12 / Gb  
Cost: 1Gb data with 50% overhead (network + metadata) = 1.5Gb x $0.12 = $0.18

Внутренние экземпляры:

Price: $0.08/h smallest instance
Cost: 1h = $0.08

Общая стоимость: $0.40

Кажется, что загрузчик очень неэффективен. Вы могли бы пересмотреть написание своего собственного резервного кода. Это должно быть легко, если у вас есть только один вид сущностей без отношений.

2 голосов
/ 24 февраля 2012

Я бы сказал, что большая часть ваших затрат связана с записью данных в другое приложение, а не с чтением данных из вашего приложения. В зависимости от вашей модели данных стоимость записи объекта в хранилище данных может легко превысить стоимость его чтения в 100 раз.

Поскольку резервные копии в любом случае редко восстанавливаются, я бы посоветовал вам хранить их в Blobstore. Выберите объекты, которые вы собираетесь сделать резервную копию, в байтовые потоки, разделите поток на куски по 1 МБ каждый и запишите их все в хранилище BLOB-объектов .

Запись данных в хранилище BLOB-объектов все еще стоит ваших операций записи в хранилище данных, но на основании этого ответа StackOverflow представляется, что с вас взимается только 12 операций записи за хранение сущности хранилища BLOB-объектов. Если предположить, что размер каждой выбранной сущности составляет ~ 2 КБ, а каждая сущность требует 100 операций записи на одно хранилище в хранилище данных, то это дает ~ 99,97% экономии затрат на запись.

1 голос
/ 24 февраля 2012

Это очень хороший вопрос.Я искал эту проблему и думаю, что облачное хранилище Google ( экспериментальное ) лучше подойдет для резервного копирования данных, потому что по следующим причинам я взял их с сайта Google, чтобы помочь вам получить некоторую информацию.

Google App Engine предоставляет более простой способ чтения и записи в объекты Google Cloud Storage, что позволяет приложениям создавать и обслуживать объекты данных.Эти объекты хранятся в корзинах в облачном хранилище, но могут быть дополнительно доступны приложениям Google App Engine через API облачного хранилища Google.Вы можете взаимодействовать с API облачного хранилища Google, используя интерфейс RESTful или через Python API облачного хранилища Google для приложений Google App Engine, которые обсуждаются в этом документе.

О ценах:
Свободная квота: 5 ГБ хранилища (отлично подходит для вашего случая)
Платная квота: первая 0 - 1 ТБ $ 0,085 / ГБ / месяц

Представляем Google Cloud Storage

...