In dieser Anleitung wird beschrieben, wie Sie Daten von Aerospike zu Bigtable migrieren. In dieser Anleitung werden die Unterschiede zwischen Aerospike und Bigtable erläutert und wie Sie Ihre Arbeitslast für die Ausführung in Bigtable transformieren. Es richtet sich an Datenbankexperten, die in Google Cloud nach einem Datenbankdienst suchen, der Aerospike ähnelt. In dieser Anleitung wird davon ausgegangen, dass Sie mit Datenbankschemas, Datentypen, den Grundlagen von NoSQL und mit relationalen Datenbanksystemen vertraut sind. Es werden vordefinierte Aufgaben ausgeführt, um eine Beispielmigration vorzunehmen. Nachdem Sie die Anleitung abgeschlossen haben, können Sie den bereitgestellten Code und die Schritte an Ihre Umgebung anpassen.
Bigtable ist ein vollständig verwalteter NoSQL-Datenbankdienst für Petabyte bei umfangreichen analytischen und operativen Arbeitslasten. Sie können es als Speicher-Engine für Ihren Dienst mit niedriger Latenz und im Petabyte-Bereich mit höherer Verfügbarkeit und Langlebigkeit verwenden. Sie können Daten in Bigtable mit Datenanalysediensten von Google Cloud wie Dataproc und BigQuery analysieren.
Bigtable eignet sich ideal für Werbetechnologien (Anzeigentechnologie), Finanztechnologie (Fintech) und die Dienste des Internets der Dinge (IoT), die mit NoSQL-Datenbanken wie Aero Spike oder Cassandra implementiert werden. Wenn Sie nach NoSQL-Dienst suchen, verwenden Sie Bigtable.
Architektur
Das folgende Referenzarchitekturdiagramm zeigt gängige Komponenten, die Sie zur Migration von Daten von Aerospike zu Bigtable verwenden können.
Im vorherigen Diagramm werden die Daten mithilfe von zwei verschiedenen Methoden von einer lokalen Umgebung mit Aerospike zu Bigtable in Google Cloud migriert. Bei der ersten Methode werden die Daten mithilfe der Batchverarbeitung migriert. Zuerst werden die Aerospike-Sicherungsdaten in einen Cloud Storage-Bucket verschoben. Wenn die Sicherung wenn Daten in Cloud Storage ankommen, löst sie Cloud Run-Funktionen aus, eine Batch-Extraktion starten, Transformations- und Ladeprozess (ETL) mithilfe von Dataflow. Der Dataflow-Job konvertiert die Sicherungsdaten in ein mit Bigtable kompatibles Format und importiert die Daten in die Bigtable-Instanz.
Die zweite Methode migriert die Daten mithilfe der Streamverarbeitung. Bei dieser Methode stellen Sie eine Verbindung mit Aerospike über eine Nachrichtenwarteschlange wie Kafaka mithilfe von Aerospike Connect her und übertragen Nachrichten in Echtzeit an Pub/Sub in Google Cloud. Wenn die Nachricht in einem Pub/Sub-Thema ankommt, wird sie vom Dataflow-Streamingjob in Echtzeit verarbeitet, um die Daten zu konvertieren und in die Bigtable-Instanz zu importieren.
Mit der Batchverarbeitung können Sie große Datenmengen effizient migrieren. Die Migration und Aktualisierung des Dienstes für neue Datenbanken sind jedoch in der Regel sehr aufwendig. Wenn Sie die Ausfallzeiten während der Umstellung minimieren möchten, können Sie die Streamingverarbeitung verwenden, um Daten nach der ersten Batchverarbeitung nach und nach zu migrieren und die Konsistenz der Sicherungsdaten bis zum Abschluss der ordnungsgemäßen Umstellung zu gewährleisten. In diesem Dokument können Sie mithilfe von Batchverarbeitung und Beispielanwendungen eine Migration von Aerospike durchführen, einschließlich des Umstellungsvorgangs.
Aerospike und Bigtable im Vergleich
Bevor Sie mit der Datenmigration beginnen, ist es wichtig, dass Sie die Unterschiede zwischen den Datenmodellen von Aerospike und Bigtable verstehen.
Das Bigtable-Datenmodell ist eine verteilte, mehrdimensionale, sortierte Schlüssel/Wert-Paarzuordnung mit Zeilen und Spaltenfamilien. Im Gegensatz dazu ist das Aerospike-Datenmodell eine zeilenorientierte Datenbank, wobei jeder Datensatz eindeutig durch einen Schlüssel identifiziert wird. Der Unterschied zwischen den Modellen besteht darin, wie die Attribute einer Entität gruppiert werden. Bigtable gruppiert ähnliche Attribute in einer Spaltenfamilie, während Aerospike Attribute in einem Satz gruppiert. Die Aerospike unterstützt im Vergleich zu Bigtable mehr Datentypen. Aerospike unterstützt beispielsweise Ganzzahlen, Strings, Listen und Karten. Bigtable behandelt alle Daten für die meisten Anwendungen als unverarbeitete Bytestrings.
Ein Schema in Aerospike ist flexibel, und dynamische Werte in denselben Klassen können unterschiedliche Typen haben. Anwendungen, die entweder Aerospike oder Bigtable verwenden, haben eine ähnliche Flexibilität und Verantwortung für die Datenverwaltung: Anwendungen verarbeiten Datentypen und Integritätseinschränkungen, statt sich auf die Datenbank-Engine zu verlassen.
Bookshelf-Migration
Die Bookshelf App ist eine Webanwendung, in der Nutzer Informationen zu Büchern speichern und eine Liste aller derzeit in der Datenbank gespeicherten Bücher abrufen können. Die Anwendung verwendet eine Buch-ID (ID), um nach Buchinformationen zu suchen. Die Anwendung oder die Datenbank generiert diese IDs automatisch. Wenn ein Nutzer das Bild eines Buchs auswählt, lädt das Back-End der Anwendung die Details zu dem Buch aus der Datenbank.
In dieser Anleitung migrieren Sie Daten aus der Bookshelf-Anwendung mit Aerospike zu Bigtable. Nach der Migration können Sie von Bigtable aus auf die Bücher zugreifen.
Das folgende Diagramm zeigt, wie die Daten von Aerospike zu Bigtable migriert werden:
Im vorherigen Diagramm werden Daten so migriert:
- Sie sichern Daten über Bücher aus der aktuellen Aerospike-Datenbank und übertragen die Daten in einen Cloud Storage-Bucket.
- Wenn Sie die Sicherungsdaten in den Bucket hochladen, werden sie automatisch
löst den Dataflow-Job
as2bt
aus durch Cloud Storage-Aktualisierungsbenachrichtigungen mithilfe der Cloud Run-Funktion - Nachdem die Datenmigration durch den Dataflow-Job
as2bt
abgeschlossen wurde, ändern Sie das Datenbank-Back-End von Aerospike zu Bigtable, damit die Bookshelf-Anwendung Buchdaten aus dem Bigtable-Cluster lädt.
Ziele
- Bereitstellung einer Anleitungsumgebung für die Migration von Aerospike zu Bigtable
- Beispiel-App-Sicherungs-Dataset von Aerospike in Cloud Storage erstellen
- Mit Dataflow das Datenschema übertragen und zu Bigtable migrieren
- Ändern Sie die Konfiguration der Beispielanwendung, um Bigtable als Back-End zu verwenden.
- Prüfen Sie mit Bigtable, ob die Bookshelf-Anwendung ordnungsgemäß ausgeführt wird.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Die Kosten für Bigtable richten sich nach der Anzahl der Knotenstunden, der Menge der gespeicherten Daten und der verwendeten Netzwerkbandbreite. Sie können die Kosten des Bigtable-Clusters und anderer Ressourcen mit dem Preisrechner schätzen. Bei der Einrichtung des Beispiel-Preisrechners werden drei Bigtable-Knoten anstelle eines einzelnen Knotens verwendet. Die geschätzten Gesamtkosten im vorherigen Beispiel sind höher als die tatsächlichen Gesamtkosten dieser Anleitung.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweise
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Resource Manager API.
Terraform verwendet die Cloud Resource Manager API, um die APIs zu aktivieren, die für diese Anleitung erforderlich sind.
-
In the Google Cloud console, activate Cloud Shell.
Umgebung vorbereiten
Führen Sie die folgenden Tools direkt in Cloud Shell aus, um die Umgebung für die Migration von Aerospike zu Bigtable vorzubereiten:
- Google Cloud CLI
- Das Bigtable-Befehlszeilentool,
cbt
- Terraform
- Apache Maven
Diese Tools sind bereits in Cloud Shell verfügbar, sodass Sie diese Tools nicht noch einmal installieren müssen.
Projekt konfigurieren
Prüfen Sie in Cloud Shell die Projekt-ID, die von Cloud Shell automatisch konfiguriert wird. Die Eingabeaufforderung wird aktualisiert, um Ihr aktuell aktives Projekt zu übernehmen und im folgenden Format dargestellt zu werden:
USERNAME@cloudshell:~ (PROJECT_ID)$
Wenn die Projekt-ID nicht richtig konfiguriert ist, können Sie sie manuell konfigurieren:
gcloud config set project <var>PROJECT_ID</var>
Ersetzen Sie
PROJECT_ID
durch Ihre Google Cloud-Projekt-ID.Konfigurieren Sie
us-east1
als die Region undus-east1-b
als die Zone:gcloud config set compute/region us-east1 gcloud config set compute/zone us-east1-b
Weitere Informationen zu Regionen und Zonen finden Sie unter Geografie und Regionen.
Anleitungsumgebung bereitstellen
Klonen Sie in Cloud Shell das Code-Repository:
git clone https://github.com/fakeskimo/as2bt.git/
Initialisieren Sie in Cloud Shell das Terraform-Arbeitsverzeichnis:
cd "$HOME"/as2bt/bookshelf/terraform terraform init
Konfigurieren Sie Terraform-Umgebungsvariablen für die Bereitstellung:
export TF_VAR_gce_vm_zone="$(gcloud config get-value compute/zone)" export TF_VAR_gcs_bucket_location="$(gcloud config get-value compute/region)"
Prüfen Sie den Terraform-Ausführungsplan:
terraform plan
Die Ausgabe sieht in etwa so aus:
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" } }
(Optional) Zeichnen Sie Diagramme, um zu visualisieren, welche Ressourcen mit Abhängigkeiten von Terraform bereitgestellt werden:
terraform graph | dot -Tsvg > graph.svg
Stellen Sie die Anleitungsumgebung bereit:
terraform apply
Anleitungsumgebung und Bookshelf-Anwendung prüfen
Nachdem Sie die Umgebung bereitgestellt haben und bevor Sie den Job zur Datenmigration gestartet haben, müssen Sie prüfen, ob alle Ressourcen bereitgestellt und konfiguriert wurden. In diesem Abschnitt wird erläutert, wie Sie den Bereitstellungsprozess überprüfen und welche Komponenten in der Umgebung konfiguriert werden.
Anleitungsumgebung prüfen
Prüfen Sie in Cloud Shell die Compute Engine-Instanz
bookshelf-aerospike
:gcloud compute instances list
Die Ausgabe zeigt, dass die Instanz in der Zone
us-east1-b
bereitgestellt ist: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
Prüfen Sie die Bigtable-Instanz
bookshelf-bigtable
:gcloud bigtable instances list
Die Ausgabe sieht in etwa so aus:
NAME DISPLAY_NAME STATE bookshelf-bigtable bookshelf-bigtable READY
Diese Bigtable-Instanz wird als Migrationsziel für spätere Schritte verwendet.
Überprüfen Sie, ob sich der Cloud Storage-Bucket
bookshelf
im Dataflow-Pipelinejob befindet:gcloud storage ls gs://bookshelf-* --buckets
Da Cloud Storage-Bucket-Namen global eindeutig sein müssen, wird der Name des Buckets mit einem zufälligen Suffix erstellt. Die Ausgabe sieht etwa so aus:
gs://bookshelf-616f60d65a3abe62/
Buch zur Bookshelf-Anwendung hinzufügen
Rufen Sie in Cloud Shell die externe IP-Adresse der Instanz
bookshelf-aerospike
ab:gcloud compute instances list --filter="name:bookshelf-aerospike" \ --format="value(networkInterfaces[0].accessConfigs.natIP)"
Notieren Sie sich die IP-Adresse. Sie benötigen sie im nächsten Schritt.
Rufen Sie in einem Webbrowser
http://IP_ADDRESS:8080
auf zum Öffnen der Bookshelf-Anwendung.Ersetzen Sie
IP_ADDRESS
durch die externe IP-Adresse, die Sie im vorherigen Schritt kopiert haben.Klicken Sie auf
Buch hinzufügen, um ein neues Buch zu erstellen.Füllen Sie im Fenster Buch hinzufügen die folgenden Felder aus und klicken Sie dann auf Speichern:
- Geben Sie im Feld Titel
Aerospike-example
ein. - Geben Sie im Feld Autor
Aerospike-example
ein. - Geben Sie in das Feld Veröffentlichungsdatum das heutige Datum ein.
- Geben Sie im Feld Beschreibung den Text
Aerospike-example
ein.
Mit diesem Buch wird überprüft, ob die Bookshelf-Anwendung Aerospike als Buchspeicher verwendet.
- Geben Sie im Feld Titel
Notieren Sie sich in der URL der Bookshelf-Anwendung die Buch-ID. Wenn die URL beispielsweise
34.74.80.160:8080/books/10000
lautet, lautet die Buch-ID10000
.Stellen Sie in Cloud Shell eine SSH-Verbindung zur Instanz
bookshelf-aerospike
her:gcloud compute ssh bookshelf-aerospike
Prüfen Sie in der
bookshelf-aerospike
-Instanzsitzung, ob mit der zuvor notierten Buch-ID ein neues Buch erstellt wurde:aql -c 'select * from bookshelf.books where id = "BOOK_ID"'
Die Ausgabe sieht in etwa so aus:
+----------------------+----------------------+---------------+----------------------+----------+---------+ | title | author | publishedDate | description | imageUrl | id | +----------------------+----------------------+---------------+----------------------+----------+---------+ | " Aerospike-example" | " Aerospike-example" | "2000-01-01" | " Aerospike-example" | "" | "10000" | +----------------------+----------------------+---------------+----------------------+----------+---------+ 1 row in set (0.001 secs)
Wenn Ihre Buch-ID nicht aufgeführt ist, wiederholen Sie die Schritte zum Hinzufügen eines neuen Buches.
Sicherungsdaten aus Aerospike in Cloud Storage übertragen
Erstellen Sie in Cloud Shell aus der Instanzsitzung
bookshelf-aerospike
eine Aerospike-Sicherungsdatei: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
Mit diesem Befehl werden die Daten verarbeitet und eine Sicherungsdatei erstellt durch den folgenden Prozess:
- Wählt Buchinformationen aus Aerospike aus und gibt sie im JSON-prettyprint-Format aus.
- Die ersten beiden Überschriften werden aus der Ausgabe entfernt und die Daten werden in das Format "Durch Zeilenumbruch getrenntes JSON" konvertiert (ndjson) mithilfe von
jq
, einem Befehlszeilen-JSON-Prozessor. - Mit der gcloud CLI werden die Daten in den Cloud Storage-Bucket hochgeladen.
Prüfen Sie, ob die Aerospike-Sicherungsdatei hochgeladen wurde und im Cloud Storage-Bucket vorhanden ist:
gcloud storage ls gs://bookshelf-*/bookshelf-*\ gs://bookshelf-616f60d65a3abe62/bookshelf-backup.json
(Optional) Prüfen Sie den Inhalt der Sicherungsdatei aus dem Cloud Storage-Bucket:
gcloud storage cat -r 0-1024 gs://bookshelf-*/bookshelf-backup.json | head -n 2
Die Ausgabe sieht in etwa so aus:
{"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"}
Beenden Sie die SSH-Sitzung und kehren Sie zu Cloud Shell zurück:
exit
Sicherungsdaten mit Dataflow zu Bigtable migrieren
Sie können jetzt die Sicherungsdaten von Cloud Storage in eine Bigtable-Instanz migrieren. In diesem Abschnitt wird erläutert, wie Sie mit Dataflow-Pipelines Daten migrieren, die mit einem Bigtable-Schema kompatibel sind.
Dataflow-Migrationsjob konfigurieren
Wechseln Sie in Cloud Shell zum Verzeichnis
dataflow
im Beispiel-Code-Repository:cd "$HOME"/as2bt/dataflow/
Konfigurieren Sie Umgebungsvariablen für einen Dataflow-Job:
export BOOKSHELF_BACKUP_FILE="$(gcloud storage ls gs://bookshelf*/bookshelf-backup.json)" export BOOKSHELF_DATAFLOW_ZONE="$(gcloud config get-value compute/zone)"
Überprüfen Sie, ob die Umgebungsvariablen richtig konfiguriert sind:
env | grep BOOKSHELF
Wenn die Umgebungsvariablen richtig konfiguriert sind, sieht die Ausgabe in etwa so aus:
BOOKSHELF_BACKUP_FILE=gs://bookshelf-616f60d65a3abe62/bookshelf-backup.json BOOKSHELF_DATAFLOW_ZONE=us-east1-b
Führen Sie den Dataflow-Job aus:
Migrieren Sie in Cloud Shell Daten aus Cloud Storage in die Bigtable-Instanz:
./run_oncloud_json.sh
Rufen Sie in der Google Cloud Console die Seite Jobs auf, um den Migrationsjob für die Sicherungsdaten zu überwachen.
Warten Sie, bis der Job erfolgreich abgeschlossen ist. Wenn der Job erfolgreich abgeschlossen wurde, sieht die Ausgabe in Cloud Shell in etwa so aus:
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] ------------------------------------------------------------------------
Ergebnisse des Migrationsjobs prüfen
Überprüfen Sie in Cloud Shell, ob die Sicherungsdaten korrekt in Bigtable übertragen wurden:
cbt -instance bookshelf-bigtable lookup books 00001
Die Ausgabe sieht in etwa so aus:
---------------------------------------- 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"
Bookshelf-Datenbank von Aerospike zu Bigtable ändern
Nachdem Sie Daten von Aerospike zu Bigtable migriert haben, können Sie die Konfiguration der Bookshelf-Anwendung so ändern, dass sie Bigtable als Speicher verwendet. Wenn Sie diese Konfiguration einrichten, werden neue Bücher in den Bigtable-Instanzen gespeichert.
Konfiguration der Bookshelf-Anwendung ändern
Stellen Sie in Cloud Shell eine SSH-Verbindung zur Anwendung
bookshelf-aerospike
her:gcloud compute ssh bookshelf-aerospike
Prüfen Sie, ob die aktuelle
DATA_BACKEND
-Konfigurationaerospike
ist:grep DATA_BACKEND /opt/app/bookshelf/config.py
Die Ausgabe sieht so aus:
DATA_BACKEND = 'aerospike'
Ändern Sie die
DATA_BACKEND
-Konfiguration vonaerospike
inbigtable
:sudo sed -i "s/DATA_BACKEND =.*/DATA_BACKEND = 'bigtable'/g" /opt/app/bookshelf/config.py
Prüfen Sie, ob die
DATA_BACKEND
-Konfiguration inbigtable
geändert wurde:grep DATA_BACKEND /opt/app/bookshelf/config.py
Die Ausgabe sieht so aus:
DATA_BACKEND = 'bigtable'
Starten Sie die Bookshelf-Anwendung neu, die die neue Back-End-Konfiguration
bigtable
verwendet:sudo supervisorctl restart bookshelf
Überprüfen Sie, ob die Bookshelf-Anwendung neu gestartet wurde und korrekt ausgeführt wird:
sudo supervisorctl status bookshelf
Die Ausgabe sieht in etwa so aus:
bookshelf RUNNING pid 18318, uptime 0:01:00
Überprüfen, ob die Bookshelf-Anwendung das Bigtable-Back-End verwendet
- Rufen Sie in einem Browser
http://IP_ADDRESS:8080
auf. Fügen Sie ein neues Buch mit dem Namen
Bigtable-example
hinzu.Kopieren Sie die Buch-ID aus der Adressleiste des Browsers, um zu überprüfen, ob das Buch
Bigtable-example
in einer Bigtable-Instanz der Bookshelf-Anwendung erstellt wurde.Schauen Sie in Cloud Shell die
Bigtable-example
-Buchdaten in einer Bigtable-Instanz nach:cbt -instance bookshelf-bigtable lookup books 7406950188
Die Ausgabe sieht in etwa so aus:
---------------------------------------- 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"
Sie haben eine Datenmigration von Aerospike zu Bigtable durchgeführt und die Bookshelf-Konfiguration so geändert, dass eine Verbindung mit einem Bigtable-Back-End hergestellt wurde.
Bereinigen
Am einfachsten können Sie weitere Kosten vermeiden, wenn Sie das Google Cloud-Projekt löschen, das Sie für die Anleitung erstellt haben. Alternativ haben Sie die Möglichkeit, die einzelnen Ressourcen zu löschen.
Projekt löschen
- 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.
Nächste Schritte
- Mehr über das Bigtable-Schema erfahren
- Informationen zum Starten der Migration zu Google Cloud
- CI-/CD-Pipeline für Ihren Datenverarbeitungsworkflow einrichten
- Informieren Sie sich über Ihre Strategien für die Übertragung großer Datasets.
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center