2012-02-24 7 views
10

Después de trabajar en varias aplicaciones GAE, algunas de las cuales se están utilizando para producción, he llegado a la conclusión de que en esta plataforma, realizar copias de seguridad de sus datos de producción es lo suficientemente lento y costoso para que podamos hacer la transición a otra tecnología basada en la nube apilar.Google App Engine: copia de seguridad y restauración prohibitivamente lentas y costosas

En una de nuestras aplicaciones de producción, tenemos alrededor de un millón de entidades con un tamaño promedio por entidad de 1 KB. Entonces, el tamaño total de los datos es alrededor de un GB, lo que no debería ser un gran problema, ¿verdad? Aquí está la salida de la herramienta bulkloader después de ir a buscar las entidades del motor de aplicación con las opciones por defecto:

[INFO] 948212 entidades (608342497 bytes) transferidos en 47722.7 segundos

que es casi 13 horas Entonces, si quisiéramos configurar un sistema de respaldo por hora para nuestros datos de producción, eso sería más que imposible con el conjunto de herramientas GAE actual.

El costo es otra historia. Intenté usar el administrador del almacén de datos para copiar entidades a una aplicación diferente que pensé que podríamos usar para la copia de seguridad. Primero fijé el presupuesto en $ 2 por día, que rápidamente se agotó en alrededor de 5000 entidades, luego aumenté el presupuesto a $ 10 por día, que se agotó nuevamente sin estar cerca de replicar el millón de entidades.

Evidentemente, no tengo la intención de gastar $ 100 cada vez que necesito respaldar mis datos de 1 GB ni tampoco quiero esperar durante horas (o incluso días) solo para que mis datos estén respaldados. Entonces, o no sé algo o Google App Engine es actualmente una forma poco práctica de escribir aplicaciones escalables de calidad de producción de tamaño significativo que se pueden respaldar y restaurar fácilmente.

¿Existe una manera rápida y rentable de hacer una copia de seguridad de sus datos desde una aplicación GAE?

Respuesta

1

Esa es una muy buena pregunta. Estaba buscando este problema y creo que Google Cloud Storage (experimental) será una mejor opción para los datos de copia de seguridad debido a las siguientes razones. Los tomé del sitio de Google para ayudarlo a obtener información.

Google App Engine proporciona una forma más fácil de leer y escribir en objetos de Google Cloud Storage, lo que permite a las aplicaciones crear y servir objetos de datos. Estos objetos se almacenan en cubos en Cloud Storage, pero las aplicaciones de Google App Engine pueden acceder a ellos a través de la API de Google Cloud Storage. Puede interactuar con la API de Google Cloud Storage utilizando la interfaz RESTful o a través de la API de Python de Google Cloud Storage para las aplicaciones de Google App Engine, que se trata en este documento.

Sobre los precios:
cuota libre: 5 GB de almacenamiento (esto es muy bueno para su caso)
cuota pagada: Primera 0 - 1 TB $ 0.085/GB/mes

Introducing Google Cloud Storage

+3

GCS de ninguna manera resuelve el problema de la copia de seguridad de su AppEngine Datastore. Todavía sería necesario consultar toda la base de datos y luego enviarla a GCS. –

+0

Puede usar MapReduce como sugirió Nick Johnson aquí http://stackoverflow.com/questions/7747453/back-up-appengine-database-google-cloud-storage. –

+5

Entonces, ¿GCS es la solución aceptada para el problema del costo, o hay algo más disponible? – Sabuncu

2

Según GAE billing doc, usted debe pagar por el siguiente:

almacén de datos:

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

Cost: 1M entities queried = $0.14 

Banda Ancha:

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

casos Backend :

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

Costo total: $0.40

Parece que bulkloader es muy ineficiente. Puede reconsiderar la escritura de su propio código de copia de seguridad. Esto debería ser fácil si solo tienes un tipo de entidades sin relaciones.

+1

Mencioné que el costo en el que incurría era cuando estaba escribiendo los datos en un almacén de datos de respaldo usando su propia herramienta de administración, por lo que el costo de escritura será aplicable en ese caso, no el costo de lectura. – Yasser

2

Yo diría que la mayoría de su costo es para escribir los datos en otra aplicación en lugar de leer los datos de su aplicación. Dependiendo de su modelo de datos, el costo de escribir una entidad en el almacén de datos podría alcanzar fácilmente 100 veces el costo de leerlo en primer lugar.

Dado que las copias de seguridad rara vez se restauraron de todos modos, le sugiero que almacene su copia de seguridad en el almacén de blob en su lugar. Elija las entidades a las que va a hacer una copia de seguridad en secuencias de bytes, divida la secuencia en fragmentos de 1 MB cada uno y write them all into the blobstore.

Escribir datos en la tienda de blob aún le cuesta escribir en el almacén de datos, pero según this StackOverflow answer, parece que solo se le cobran 12 operaciones de escritura por almacenar una entidad del almacén de blob. Suponiendo que cada entidad escabechada tenga un tamaño de ~ 2KB y cada entidad cueste 100 operaciones de escritura por almacenamiento en el almacén de datos, esto representa ~ 99.97% de ahorro en el costo de escritura.

5

apuesta que ha encontrado una solución a estas alturas Yasser, pero para nadie más acabar aquí desde Google, aquí está una respuesta actualizada:

La opción de copia de seguridad en la administración de appstore se ha actualizado para apoyar tanto almacén de datos y la nube almacenamiento. También utiliza mapreduce para hacer la copia de seguridad, lo que hace que la consulta sea mucho más ligera en el sistema.