Migrar de Aerospike a Bigtable

Last reviewed 2024-10-16 UTC

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.

Componentes del proceso de transferencia de 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:

Pasos para migrar datos.

En el diagrama anterior, los datos se migran de la siguiente manera:

  1. 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.
  2. 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.
  3. 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 usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

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

  1. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

    Terraform usa la API Cloud Resource Manager para habilitar las APIs necesarias para este tutorial.

  4. In the Google Cloud console, activate Cloud Shell.

    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

    1. 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 Cloud

    2. Configura us-east1 como región y us-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

    1. En Cloud Shell, clona el repositorio de código:

       git clone https://github.com/fakeskimo/as2bt.git/
      
    2. En Cloud Shell, inicializa el directorio de trabajo de Terraform:

      cd "$HOME"/as2bt/bookshelf/terraform
      terraform init
      
    3. 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)"
      
    4. 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"
          }
      }
      
    5. (Opcional) Para visualizar qué recursos con dependencias implementa Terraform, dibuja gráficos:

      terraform graph | dot -Tsvg > graph.svg
      
    6. 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

    1. 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
      
    2. 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.

    3. 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

    1. 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.

    2. 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.

    3. Para crear un libro, haz clic en Añadir libro.

    4. 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.

    5. 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 es 10000.

      ID del libro en la URL.

    6. En Cloud Shell, usa SSH para conectarte a la instancia bookshelf-aerospike:

      gcloud compute ssh bookshelf-aerospike
      
    7. 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

    1. 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.
    2. 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
      
    3. (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"}
      
    4. 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

    1. En Cloud Shell, ve al directorio dataflow del repositorio de código de ejemplo:

      cd "$HOME"/as2bt/dataflow/
      
    2. 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)"
      
    3. 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

    1. En Cloud Shell, migra los datos de Cloud Storage a la instancia de Bigtable:

      ./run_oncloud_json.sh
      
    2. 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 .

      Ir a Tareas

      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

    1. En Cloud Shell, usa SSH para conectarte a la aplicación bookshelf-aerospike:

      gcloud compute ssh bookshelf-aerospike
      
    2. Verifica que la configuración actual de DATA_BACKEND sea aerospike:

      grep DATA_BACKEND /opt/app/bookshelf/config.py
      

      El resultado es el siguiente:

      DATA_BACKEND = 'aerospike'
      
    3. Cambia la configuración de DATA_BACKEND de aerospike a bigtable:

      sudo sed -i "s/DATA_BACKEND =.*/DATA_BACKEND = 'bigtable'/g" /opt/app/bookshelf/config.py
      
    4. Verifica que la configuración de DATA_BACKEND haya cambiado a bigtable:

      grep DATA_BACKEND /opt/app/bookshelf/config.py
      

      El resultado es el siguiente:

      DATA_BACKEND = 'bigtable'
      
    5. Reinicia la aplicación Bookshelf que usa la nueva configuración del backend bigtable:

      sudo supervisorctl restart bookshelf
      
    6. 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

    1. En un navegador, ve a http://IP_ADDRESS:8080.
    2. Añade un libro nuevo llamado Bigtable-example.

    3. 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.

    4. 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

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    Siguientes pasos