En este tutorial se describe cómo migrar datos de Aerospike a Bigtable. En el tutorial se explican las diferencias entre Aerospike y Bigtable, así como la forma de transformar tu carga de trabajo para que se ejecute en Bigtable. Está dirigida a profesionales de bases de datos que buscan un servicio de bases de datos en Google Cloud similar a Aerospike. En este tutorial se da por supuesto que conoces los esquemas de bases de datos, los tipos de datos, los conceptos básicos de NoSQL y los sistemas de bases de datos relacionales. En este tutorial se utilizan tareas predefinidas para realizar una migración de ejemplo. Una vez que hayas completado el tutorial, puedes modificar el código y los pasos proporcionados para que se ajusten a tu entorno.
Bigtable es un servicio de base de datos NoSQL a escala de petabytes, totalmente gestionado y para grandes cargas de trabajo analíticas y operativas. Puedes usarlo como motor de almacenamiento para tu servicio de baja latencia y a escala de petabytes con mayor disponibilidad y durabilidad. Puedes analizar datos de Bigtable con Google Cloud servicios de analíticas de datos como Dataproc y BigQuery.
Bigtable es ideal para la tecnología publicitaria, la tecnología financiera y los servicios del Internet de las cosas (IoT) que se implementan con bases de datos NoSQL, como AeroSpike o Cassandra. Si buscas un servicio gestionado de NoSQL, usa Bigtable.
Arquitectura
En el siguiente diagrama de arquitectura de referencia se muestran los componentes comunes que puedes usar para migrar datos de Aerospike a Bigtable.
En el diagrama anterior, los datos se migran de un entorno local que usa Aerospike a Bigtable en Google Cloud mediante dos métodos diferentes. El primer método migra los datos mediante el procesamiento por lotes. Para ello, primero se mueven los datos de la copia de seguridad de Aerospike a un segmento de Cloud Storage. Cuando los datos de la copia de seguridad llegan a Cloud Storage, se activan las funciones de Cloud Run para iniciar un proceso de extracción, transformación y carga (ETL) por lotes mediante Dataflow. La tarea de Dataflow convierte los datos de la copia de seguridad a un formato compatible con Bigtable e importa los datos a la instancia de Bigtable.
El segundo método migra los datos mediante el procesamiento de streaming. En este método, te conectas a Aerospike mediante una cola de mensajes, como Kafka, con Aerospike Connect, y transfieres mensajes en tiempo real a Pub/Sub en Google Cloud. Cuando el mensaje llega a un tema de Pub/Sub, la tarea de streaming de Dataflow lo procesa en tiempo real para convertir e importar los datos en la instancia de Bigtable.
Con el procesamiento por lotes, puedes migrar grandes cantidades de datos de forma eficiente. Sin embargo, a menudo requiere un tiempo de inactividad suficiente para migrar y actualizar el servicio de las nuevas bases de datos. Si quieres minimizar el tiempo de inactividad durante el cambio, puedes usar el procesamiento de streaming para migrar los datos gradualmente después del primer procesamiento por lotes y mantener la coherencia de los datos de la copia de seguridad hasta que se complete el cambio. En este documento, puede migrar de Aerospike mediante el procesamiento por lotes con aplicaciones de ejemplo, incluido el proceso de cambio.
Comparación entre Aerospike y Bigtable
Antes de iniciar la migración de datos, es fundamental que conozca las diferencias entre los modelos de datos de Aerospike y Bigtable.
El modelo de datos de Bigtable es un mapa de clave-valor distribuido, multidimensional y ordenado con filas y familias de columnas. Por el contrario, el modelo de datos de Aerospike es una base de datos orientada a filas, donde cada registro se identifica de forma única mediante una clave. La diferencia entre los modelos es la forma en que agrupan los atributos de una entidad. Bigtable agrupa los atributos relacionados en una familia de columnas, mientras que Aerospike agrupa los atributos en un conjunto. Aerospike admite más tipos de datos que Bigtable. Por ejemplo, Aerospike admite enteros, cadenas, listas y mapas. Bigtable trata todos los datos como cadenas de bytes sin formato para la mayoría de los fines.
Un esquema de Aerospike es flexible y los valores dinámicos de los mismos contenedores pueden tener tipos diferentes. Las aplicaciones que usan Aerospike o Bigtable tienen una flexibilidad similar y la misma responsabilidad de administración de datos: las aplicaciones gestionan los tipos de datos y las restricciones de integridad, en lugar de depender del motor de la base de datos.
Migración de estantería
La aplicación Bookshelf es una aplicación web en la que los usuarios pueden almacenar información sobre libros y ver la lista de todos los libros que hay en la base de datos. La aplicación usa un identificador de libro (ID) para buscar información sobre el libro. La aplicación o la base de datos genera automáticamente estos IDs. Cuando un usuario selecciona la imagen de un libro, el backend de la aplicación carga los detalles de ese libro desde la base de datos.
En este tutorial, migrarás datos de la aplicación de estantería usando Aerospike a Bigtable. Después de la migración, puedes acceder a los libros desde Bigtable.
En el siguiente diagrama se muestra cómo se migran los datos de Aerospike a Bigtable:
En el diagrama anterior, los datos se migran de la siguiente manera:
- Creas una copia de seguridad de los datos de los libros de la base de datos de Aerospike actual y transfieres los datos a un segmento de Cloud Storage.
- Cuando subes los datos de la copia de seguridad al segmento, se activa automáticamente el trabajo de
as2bt
Dataflow mediante las notificaciones de actualización de Cloud Storage con la función de Cloud Run. - Una vez que la tarea de Dataflow haya completado la migración de datos, cambia la base de datos backend de Aerospike a Bigtable para que la aplicación de estantería cargue los datos de los libros del clúster de Bigtable.
as2bt
Objetivos
- Despliega un entorno de tutorial para migrar de Aerospike a Bigtable.
- Crea un conjunto de datos de copia de seguridad de una aplicación de ejemplo de Aerospike en Cloud Storage.
- Usa Dataflow para transferir el esquema de datos y migrarlo a Bigtable.
- Cambia la configuración de la aplicación de ejemplo para usar Bigtable como backend.
- Verifica que la aplicación de estantería se ejecuta correctamente con Bigtable.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Los cargos de Bigtable se basan en el número de horas de nodo, la cantidad de datos almacenados y la cantidad de ancho de banda de red que uses. Para estimar el coste del clúster de Bigtable y otros recursos, puedes usar la calculadora de precios. En la configuración de la calculadora de precios de ejemplo se usan tres nodos de Bigtable en lugar de uno. El coste total estimado en el ejemplo anterior es superior al coste total real de este tutorial.
Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.
Antes de empezar
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Resource Manager API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.Terraform usa la API Cloud Resource Manager para habilitar las APIs necesarias para este tutorial.
-
In the Google Cloud console, activate Cloud Shell.
Preparar el entorno
Para preparar el entorno para la migración de Aerospike a Bigtable, ejecuta las siguientes herramientas directamente desde Cloud Shell:
- Google Cloud CLI
- La herramienta de línea de comandos de Bigtable,
cbt
- Terraform
- Apache Maven
Estas herramientas ya están disponibles en Cloud Shell, por lo que no tienes que instalarlas de nuevo.
Configurar un proyecto
En Cloud Shell, inspecciona el ID de proyecto que Cloud Shell configura automáticamente. La línea de comandos se actualiza para reflejar el proyecto activo y se muestra en este formato:
USERNAME@cloudshell:~ (PROJECT_ID)$
Si el ID de proyecto no está configurado correctamente, puedes configurarlo manualmente:
gcloud config set project <var>PROJECT_ID</var>
Sustituye
PROJECT_ID
por el ID de tu proyecto. Google CloudConfigura
us-east1
como región yus-east1-b
como zona:gcloud config set compute/region us-east1 gcloud config set compute/zone us-east1-b
Para obtener más información sobre las regiones y las zonas, consulta el artículo sobre geografía y regiones.
Desplegar el entorno del tutorial
En Cloud Shell, clona el repositorio de código:
git clone https://github.com/fakeskimo/as2bt.git/
En Cloud Shell, inicializa el directorio de trabajo de Terraform:
cd "$HOME"/as2bt/bookshelf/terraform terraform init
Configura las variables de entorno de Terraform para la implementación:
export TF_VAR_gce_vm_zone="$(gcloud config get-value compute/zone)" export TF_VAR_gcs_bucket_location="$(gcloud config get-value compute/region)"
Revisa el plan de ejecución de Terraform:
terraform plan
El resultado debería ser similar al siguiente:
Terraform will perform the following actions: # google_bigtable_instance.bookshelf_bigtable will be created + resource "google_bigtable_instance" "bookshelf_bigtable" { + display_name = (known after apply) + id = (known after apply) + instance_type = "DEVELOPMENT" + name = "bookshelf-bigtable" + project = (known after apply) + cluster { + cluster_id = "bookshelf-bigtable-cluster" + storage_type = "SSD" + zone = "us-east1-b" } }
(Opcional) Para visualizar qué recursos con dependencias implementa Terraform, dibuja gráficos:
terraform graph | dot -Tsvg > graph.svg
Aprovisiona el entorno del tutorial:
terraform apply
Verificar el entorno del tutorial y la aplicación Bookshelf
Después de aprovisionar el entorno y antes de iniciar la tarea de migración de datos, debes verificar que todos los recursos se han implementado y configurado. En esta sección se explica cómo verificar el proceso de aprovisionamiento y se indica qué componentes se configuran en el entorno.
Verificar el entorno del tutorial
En Cloud Shell, verifica la
bookshelf-aerospike
instancia de Compute Engine:gcloud compute instances list
El resultado muestra que la instancia se ha desplegado en la zona
us-east1-b
:NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS bookshelf-aerospike us-east1-b n1-standard-2 10.142.0.4 34.74.72.3 RUNNING
Verifica la instancia de
bookshelf-bigtable
Bigtable:gcloud bigtable instances list
El resultado debería ser similar al siguiente:
NAME DISPLAY_NAME STATE bookshelf-bigtable bookshelf-bigtable READY
Esta instancia de Bigtable se usa como destino de migración en pasos posteriores.
Verifica que el segmento de Cloud Storage
bookshelf
esté en el trabajo de la canalización de Dataflow:gcloud storage ls gs://bookshelf-* --buckets
Dado que los nombres de los segmentos de Cloud Storage deben ser únicos de forma global, el nombre del segmento se crea con un sufijo aleatorio. La salida es similar a la siguiente:
gs://bookshelf-616f60d65a3abe62/
Añadir un libro a la aplicación Bookshelf
En Cloud Shell, obtén la dirección IP externa de la instancia
bookshelf-aerospike
:gcloud compute instances list --filter="name:bookshelf-aerospike" \ --format="value(networkInterfaces[0].accessConfigs.natIP)"
Anota la dirección IP, ya que la necesitarás en el siguiente paso.
Para abrir la aplicación Estantería, ve a
http://IP_ADDRESS:8080
en un navegador web.Sustituye
IP_ADDRESS
por la dirección IP externa que has copiado en el paso anterior.Para crear un libro, haz clic en
Añadir libro.En la ventana Añadir libro, rellena los siguientes campos y, a continuación, haz clic en Guardar:
- En el campo Title, introduce
Aerospike-example
. - En el campo Author, introduce
Aerospike-example
. - En el campo Fecha de publicación, introduce la fecha de hoy.
- En el campo Description (Descripción), introduce
Aerospike-example
.
Este libro se usa para verificar que la aplicación Bookshelf usa Aerospike como almacenamiento de libros.
- En el campo Title, introduce
En la URL de la aplicación Bookshelf, anota el ID del libro. Por ejemplo, si la URL es
34.74.80.160:8080/books/10000
, el ID del libro es10000
.En Cloud Shell, usa SSH para conectarte a la instancia
bookshelf-aerospike
:gcloud compute ssh bookshelf-aerospike
En la sesión de la instancia
bookshelf-aerospike
, comprueba que se ha creado un libro con el ID que has anotado anteriormente:aql -c 'select * from bookshelf.books where id = "BOOK_ID"'
El resultado debería ser similar al siguiente:
+----------------------+----------------------+---------------+----------------------+----------+---------+ | title | author | publishedDate | description | imageUrl | id | +----------------------+----------------------+---------------+----------------------+----------+---------+ | " Aerospike-example" | " Aerospike-example" | "2000-01-01" | " Aerospike-example" | "" | "10000" | +----------------------+----------------------+---------------+----------------------+----------+---------+ 1 row in set (0.001 secs)
Si no aparece el ID de tu libro, repite los pasos para añadir un libro.
Transferir datos de copias de seguridad de Aerospike a Cloud Storage
En Cloud Shell, desde la sesión de la instancia de
bookshelf-aerospike
, crea un archivo de copia de seguridad de Aerospike:aql -c "select * from bookshelf.books" --timeout=-1 --outputmode=json \` | tail -n +2 | jq -c '.[0] | .[]' \ | gcloud storage cp - $(gcloud storage ls gs://bookshelf-* --buckets)bookshelf-backup.json
Este comando procesa los datos y crea un archivo de copia de seguridad mediante el siguiente proceso:
- Selecciona la información del libro de Aerospike y la muestra en formato JSON.
- Elimina los dos primeros encabezados de la salida y convierte los datos al formato JSON delimitado por saltos de línea (ndjson) mediante
jq
, un procesador JSON de línea de comandos. - Usa la CLI gcloud para subir los datos al depósito de Cloud Storage.
Verifica que el archivo de copia de seguridad de Aerospike se haya subido y que esté en el cubo de Cloud Storage:
gcloud storage ls gs://bookshelf-*/bookshelf-*\ gs://bookshelf-616f60d65a3abe62/bookshelf-backup.json
(Opcional) Revisa el contenido del archivo de copia de seguridad del segmento de Cloud Storage:
gcloud storage cat -r 0-1024 gs://bookshelf-*/bookshelf-backup.json | head -n 2
El resultado debería ser similar al siguiente:
{"title":"book_2507","author":"write_2507","publishedDate":"1970-01-01","imageUrl":"https://storage.googleapis.com/aerospike2bt-bookshelf/The_Home_Edit-2019-06-24-044906.jpg","description":"test_2507","createdBy":"write_2507","createdById":"2507_anonymous","id":"2507"} {"title":"book_3867","author":"write_3867","publishedDate":"1970-01-01","imageUrl":"https://storage.googleapis.com/aerospike2bt-bookshelf/The_Home_Edit-2019-06-24-044906.jpg","description":"test_3867","createdBy":"write_3867","createdById":"3867_anonymous","id":"3867"}
Cierra la sesión SSH y vuelve a Cloud Shell:
exit
Migrar los datos de la copia de seguridad a Bigtable con Dataflow
Ahora puedes migrar los datos de la copia de seguridad de Cloud Storage a una instancia de Bigtable. En esta sección se explica cómo usar las canalizaciones de Dataflow para migrar datos compatibles con un esquema de Bigtable.
Configurar la tarea de migración de Dataflow
En Cloud Shell, ve al directorio
dataflow
del repositorio de código de ejemplo:cd "$HOME"/as2bt/dataflow/
Configura las variables de entorno de un trabajo de Dataflow:
export BOOKSHELF_BACKUP_FILE="$(gcloud storage ls gs://bookshelf*/bookshelf-backup.json)" export BOOKSHELF_DATAFLOW_ZONE="$(gcloud config get-value compute/zone)"
Comprueba que las variables de entorno estén configuradas correctamente:
env | grep BOOKSHELF
Si las variables de entorno están configuradas correctamente, el resultado será similar al siguiente:
BOOKSHELF_BACKUP_FILE=gs://bookshelf-616f60d65a3abe62/bookshelf-backup.json BOOKSHELF_DATAFLOW_ZONE=us-east1-b
Ejecutar la tarea de Dataflow
En Cloud Shell, migra los datos de Cloud Storage a la instancia de Bigtable:
./run_oncloud_json.sh
Para monitorizar la tarea de migración de datos de la copia de seguridad, ve a la página Tareas de la consola deGoogle Cloud .
Espera a que el trabajo se complete correctamente. Cuando el trabajo se completa correctamente, el resultado en Cloud Shell es similar al siguiente:
Dataflow SDK version: 2.13.0 Submitted job: 2019-12-16_23_24_06-2124083021829446026 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 08:20 min [INFO] Finished at: 2019-12-17T16:28:08+09:00 [INFO] ------------------------------------------------------------------------
Consultar los resultados de la tarea de migración
En Cloud Shell, comprueba que los datos de la copia de seguridad se hayan transferido correctamente a Bigtable:
cbt -instance bookshelf-bigtable lookup books 00001
El resultado debería ser similar al siguiente:
.---------------------------------------- 00001 info:author @ 2019/12/17-16:26:04.434000 "Aerospike-example" info:description @ 2019/12/17-16:26:04.434000 "Aerospike-example" info:id @ 2019/12/17-16:26:04.434000 "00001" info:imageUrl @ 2019/12/17-16:26:04.434000 "" info:publishedDate @ 2019/12/17-16:26:04.434000 "2019-10-01" info:title @ 2019/12/17-16:26:04.434000 "Aerospike-example"
Cambiar la base de datos de estantería de Aerospike a Bigtable
Una vez que hayas migrado correctamente los datos de Aerospike a Bigtable, puedes cambiar la configuración de la aplicación Bookshelf para que use Bigtable como almacenamiento. Cuando configures esta opción, los libros nuevos se guardarán en las instancias de Bigtable.
Cambiar la configuración de la aplicación Bookshelf
En Cloud Shell, usa SSH para conectarte a la aplicación
bookshelf-aerospike
:gcloud compute ssh bookshelf-aerospike
Verifica que la configuración actual de
DATA_BACKEND
seaaerospike
:grep DATA_BACKEND /opt/app/bookshelf/config.py
El resultado es el siguiente:
DATA_BACKEND = 'aerospike'
Cambia la configuración de
DATA_BACKEND
deaerospike
abigtable
:sudo sed -i "s/DATA_BACKEND =.*/DATA_BACKEND = 'bigtable'/g" /opt/app/bookshelf/config.py
Verifica que la configuración de
DATA_BACKEND
haya cambiado abigtable
:grep DATA_BACKEND /opt/app/bookshelf/config.py
El resultado es el siguiente:
DATA_BACKEND = 'bigtable'
Reinicia la aplicación Bookshelf que usa la nueva configuración del backend
bigtable
:sudo supervisorctl restart bookshelf
Comprueba que la aplicación Estantería se haya reiniciado y funcione correctamente:
sudo supervisorctl status bookshelf
El resultado debería ser similar al siguiente:
bookshelf RUNNING pid 18318, uptime 0:01:00
Verificar que la aplicación de estantería usa el backend de Bigtable
- En un navegador, ve a
http://IP_ADDRESS:8080
. Añade un libro nuevo llamado
Bigtable-example
.Para verificar que el libro
Bigtable-example
se ha creado en una instancia de Bigtable desde la aplicación Bookshelf, copia el ID del libro de la barra de direcciones del navegador.En Cloud Shell, busca los
Bigtable-example
datos de libros de una instancia de Bigtable:cbt -instance bookshelf-bigtable lookup books 7406950188
El resultado debería ser similar al siguiente:
---------------------------------------- 7406950188 info:author @ 2019/12/17-17:28:25.592000 "Bigtable-example" info:description @ 2019/12/17-17:28:25.592000 "Bigtable-example" info:id @ 2019/12/17-17:28:25.592000 "7406950188" info:image_url @ 2019/12/17-17:28:25.592000 "" info:published_date @ 2019/12/17-17:28:25.592000 "2019-10-01" info:title @ 2019/12/17-17:28:25.592000 "Bigtable-example"
Has migrado los datos de Aerospike a Bigtable correctamente y has cambiado la configuración de la estantería para conectarte a un backend de Bigtable.
Limpieza
La forma más fácil de evitar que te cobren es eliminar el Google Cloud proyecto que has creado para el tutorial. También puedes eliminar los recursos de forma individual.
Eliminar el proyecto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Siguientes pasos
- Consulta cómo diseñar tu esquema de Bigtable.
- Consulta cómo iniciar tu migración a Google Cloud.
- Determina qué estrategias tienes para transferir grandes conjuntos de datos.
- Consulta arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Centro de arquitectura de Cloud.