Tutorial ini menjelaskan cara memigrasikan data dari Aerospike ke Bigtable. Tutorial ini menjelaskan perbedaan antara Aerospike dan Bigtable serta cara mengubah workload untuk dijalankan di Bigtable. Program ini ditujukan untuk praktisi database yang mencari layanan database di Google Cloud yang mirip dengan Aerospike. Tutorial ini mengasumsikan bahwa Anda sudah memahami skema database, jenis data, dasar-dasar NoSQL, dan sistem database relasional. Tutorial ini bergantung pada cara menjalankan tugas yang telah ditetapkan untuk melakukan contoh migrasi. Setelah menyelesaikan tutorial, Anda dapat mengubah kode dan langkah yang diberikan agar sesuai dengan lingkungan Anda.
Bigtable adalah layanan database NoSQL berskala petabyte dan terkelola sepenuhnya untuk workload analisis dan operasional yang besar. Anda dapat menggunakannya sebagai mesin penyimpanan untuk layanan berlatensi rendah dan berskala petabyte dengan ketersediaan dan ketahanan yang lebih tinggi. Anda dapat menganalisis data di Bigtable menggunakan layanan analisis data Google Cloud, seperti Dataproc dan BigQuery.
Bigtable ideal untuk layanan teknologi periklanan (teknologi iklan), teknologi finansial (fintech), dan Internet of Things (IoT) yang diimplementasikan dengan database NoSQL seperti AeroSpike atau Cassandra. Jika Anda mencari layanan yang dikelola NoSQL, gunakan Bigtable.
Arsitektur
Diagram arsitektur referensi berikut menunjukkan komponen umum yang dapat Anda gunakan untuk memigrasikan data dari Aerospike ke Bigtable.
Pada diagram sebelumnya, data dimigrasikan dari lingkungan lokal menggunakan Aerospike ke Bigtable di Google Cloud dengan menggunakan dua metode berbeda. Metode pertama memigrasikan data dengan menggunakan batch processing. Dimulai dengan memindahkan data cadangan Aerospike ke dalam bucket Cloud Storage. Saat data cadangan tiba di Cloud Storage, data cadangan akan memicu fungsi Cloud Run untuk memulai proses ekstrak batch, transformasi, dan pemuatan (ETL) menggunakan Dataflow. Tugas Dataflow mengonversi data cadangan ke dalam format yang kompatibel dengan Bigtable dan mengimpor data tersebut ke instance Bigtable.
Metode kedua memigrasikan data dengan menggunakan pemrosesan streaming. Dalam metode ini, Anda terhubung ke Aerospike menggunakan antrean pesan, seperti Kafaka menggunakan Aerospike Connect, dan mentransfer pesan secara real time ke Pub/Sub di Google Cloud. Ketika pesan masuk ke topik Pub/Sub, pesan akan diproses oleh tugas streaming Dataflow secara real time untuk mengonversi dan mengimpor data ke dalam instance Bigtable.
Dengan batch processing, Anda dapat memigrasikan potongan besar data secara efisien. Namun, sering kali diperlukan periode nonaktif yang cukup untuk periode waktu migrasi dan update layanan untuk database baru. Jika ingin meminimalkan periode nonaktif untuk transisi, Anda dapat mempertimbangkan untuk menggunakan pemrosesan streaming untuk memigrasikan data secara bertahap setelah batch pemrosesan pertama agar menjaga konsistensi dari data cadangan hingga migrasi sistem sepenuhnya tuntas. Dalam dokumen ini, Anda dapat bermigrasi dari Aerospike menggunakan batch processing dengan contoh aplikasi, termasuk proses migrasi sistem.
Membandingkan Aerospike dan Bigtable
Sebelum memulai migrasi data, sangat penting bagi Anda untuk memahami perbedaan model data antara Aerospike dan Bigtable.
Model data Bigtable adalah peta nilai kunci yang diurutkan, multidimensi, dan terdistribusi dengan kelompok baris dan kolom. Sebaliknya, model data Aerospike adalah database berorientasi baris, dengan setiap record diidentifikasi secara unik oleh kunci. Perbedaan antara model-model ini adalah cara model tersebut mengelompokkan atribut suatu entity. Bigtable mengelompokkan atribut terkait ke dalam grup kolom, sedangkan Aerospike mengelompokkan atribut dalam satu kumpulan. Aerospike mendukung lebih banyak jenis data dibandingkan Bigtable. Misalnya, Aerospike mendukung bilangan bulat, string, daftar, dan peta. Bigtable memperlakukan semua data sebagai string byte mentah untuk sebagian besar tujuan.
Skema di Aerospike bersifat fleksibel, dan nilai dinamis dalam bin yang sama dapat memiliki jenis yang berbeda. Aplikasi yang menggunakan Aerospike atau Bigtable memiliki fleksibilitas dan tanggung jawab administrasi data yang serupa: aplikasi menangani jenis data dan batasan integritas, bukan mengandalkan mesin database.
Migrasi Bookshelf
Aplikasi Bookshelf adalah aplikasi web tempat pengguna dapat menyimpan informasi tentang buku dan melihat daftar semua buku yang saat ini disimpan dalam database. Aplikasi menggunakan ID buku untuk menelusuri informasi buku. Aplikasi atau database akan otomatis menghasilkan ID ini. Saat pengguna memilih image buku, backend aplikasi akan memuat detail tentang buku tersebut dari database.
Dalam tutorial ini, Anda akan memigrasikan data dari aplikasi rak buku menggunakan Aerospike ke Bigtable. Setelah migrasi, Anda dapat mengakses buku dari Bigtable.
Diagram berikut menunjukkan cara data dimigrasikan dari Aerospike ke Bigtable:
Pada diagram sebelumnya, data dimigrasikan dengan cara berikut:
- Anda mencadangkan data tentang buku dari database Aerospike saat ini dan mentransfer data tersebut ke bucket Cloud Storage.
- Saat Anda mengupload data pencadangan ke bucket, data cadangan akan otomatis memicu tugas Dataflow
as2bt
melalui notifikasi update Cloud Storage menggunakan fungsi Cloud Run. - Setelah migrasi data diselesaikan oleh tugas Dataflow
as2bt
, Anda mengubah backend database dari Aerospike ke Bigtable sehingga aplikasi rak buku memuat data buku dari cluster Bigtable.
Tujuan
- Men-deploy lingkungan tutorial untuk migrasi dari Aerospike ke Bigtable.
- Membuat contoh set data pencadangan aplikasi dari Aerospike di Cloud Storage.
- Menggunakan Dataflow untuk mentransfer skema data dan memigrasikannya ke Bigtable.
- Mengubah contoh konfigurasi aplikasi untuk menggunakan Bigtable sebagai backend.
- Memastikan aplikasi bookshelf berjalan dengan benar menggunakan Bigtable.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Biaya Bigtable didasarkan pada jumlah jam kerja node, jumlah data yang disimpan, dan jumlah bandwidth jaringan yang Anda gunakan. Untuk memperkirakan biaya cluster Bigtable dan resource lainnya, Anda dapat menggunakan kalkulator harga. Contoh penyiapan kalkulator harga menggunakan tiga node Bigtable, bukan satu node. Total estimasi biaya dalam contoh sebelumnya lebih dari total biaya sebenarnya untuk tutorial ini.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan Cloud Resource Manager API.
Terraform menggunakan Cloud Resource Manager API untuk mengaktifkan API yang diperlukan untuk tutorial ini.
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Mempersiapkan lingkungan Anda
Guna menyiapkan lingkungan untuk migrasi Aerospike ke Bigtable, Anda harus menjalankan alat berikut langsung dari Cloud Shell:
- Google Cloud CLI
- Alat command line Bigtable,
cbt
- Terraform
- Apache Maven
Alat ini sudah tersedia di Cloud Shell, jadi Anda tidak perlu menginstal alat ini lagi.
Mengonfigurasi project Anda
Di Cloud Shell, periksa project ID yang dikonfigurasi secara otomatis oleh Cloud Shell. Command prompt Anda diupdate untuk mencerminkan project yang saat ini aktif dan ditampilkan dalam format ini:
USERNAME@cloudshell:~ (PROJECT_ID)$
Jika project ID tidak dikonfigurasi dengan benar, Anda dapat mengonfigurasinya secara manual:
gcloud config set project <var>PROJECT_ID</var>
Ganti
PROJECT_ID
dengan ID project Google Cloud Anda.Konfigurasikan
us-east1
sebagai region danus-east1-b
sebagai zona:gcloud config set compute/region us-east1 gcloud config set compute/zone us-east1-b
Untuk mengetahui informasi selengkapnya tentang region dan zona, lihat Geografi dan region.
Men-deploy lingkungan tutorial
Di Cloud Shell, clone repositori kode:
git clone https://github.com/fakeskimo/as2bt.git/
Di Cloud Shell, lakukan inisialisasi direktori kerja Terraform:
cd "$HOME"/as2bt/bookshelf/terraform terraform init
Konfigurasikan variabel lingkungan Terraform untuk deployment:
export TF_VAR_gce_vm_zone="$(gcloud config get-value compute/zone)" export TF_VAR_gcs_bucket_location="$(gcloud config get-value compute/region)"
Tinjau rencana eksekusi Terraform:
terraform plan
Outputnya mirip dengan yang berikut ini:
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" } }
(Opsional) Untuk memvisualisasikan resource dengan dependensi yang di-deploy oleh Terraform, gambar grafik:
terraform graph | dot -Tsvg > graph.svg
Menyediakan lingkungan tutorial:
terraform apply
Memverifikasi lingkungan tutorial dan aplikasi bookshelf
Setelah menyediakan lingkungan dan sebelum memulai tugas migrasi data, Anda harus memverifikasi bahwa semua resource telah di-deploy dan dikonfigurasi. Bagian ini menjelaskan cara memverifikasi proses penyediaan dan membantu Anda memahami komponen apa saja yang dikonfigurasi di lingkungan.
Memverifikasi lingkungan tutorial
Di Cloud Shell, verifikasi instance Compute Engine
bookshelf-aerospike
:gcloud compute instances list
Output menunjukkan bahwa instance di-deploy di 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
Verifikasi instance Bigtable
bookshelf-bigtable
:gcloud bigtable instances list
Outputnya mirip dengan hal berikut ini:
NAME DISPLAY_NAME STATE bookshelf-bigtable bookshelf-bigtable READY
Instance Bigtable ini digunakan sebagai target migrasi untuk langkah-langkah berikutnya.
Pastikan bucket Cloud Storage
bookshelf
berada dalam tugas pipeline Dataflow:gcloud storage ls gs://bookshelf-* --buckets
Karena nama bucket Cloud Storage harus unik secara global, nama bucket dibuat dengan akhiran acak. Outputnya mirip dengan yang berikut ini:
gs://bookshelf-616f60d65a3abe62/
Menambahkan buku ke aplikasi Bookshelf
Di Cloud Shell, dapatkan alamat IP eksternal instance
bookshelf-aerospike
:gcloud compute instances list --filter="name:bookshelf-aerospike" \ --format="value(networkInterfaces[0].accessConfigs.natIP)"
Catat alamat IP karena diperlukan pada langkah selanjutnya.
Untuk membuka aplikasi Bookshelf, di browser web, buka
http://IP_ADDRESS:8080
.Ganti
IP_ADDRESS
dengan alamat IP eksternal yang Anda salin dari langkah sebelumnya.Untuk membuat buku baru, klik
Add book.Di jendela Add book, lengkapi kolom berikut, lalu klik Save:
- Di kolom Title, masukkan
Aerospike-example
. - Pada kolom Author, masukkan
Aerospike-example
. - Pada kolom Date Published, masukkan tanggal hari ini.
- Di kolom Description, masukkan
Aerospike-example
.
Buku ini digunakan untuk memverifikasi bahwa aplikasi Bookshelf menggunakan Aerospike sebagai penyimpanan buku.
- Di kolom Title, masukkan
Di URL aplikasi Bookshelf, catat ID buku. Misalnya, jika URL-nya adalah
34.74.80.160:8080/books/10000
, ID buku adalah10000
.Di Cloud Shell, gunakan SSH untuk terhubung ke instance
bookshelf-aerospike
:gcloud compute ssh bookshelf-aerospike
Dari sesi instance
bookshelf-aerospike
, pastikan bahwa buku baru telah dibuat dengan ID buku yang Anda catat sebelumnya:aql -c 'select * from bookshelf.books where id = "BOOK_ID"'
Outputnya mirip dengan yang berikut ini:
+----------------------+----------------------+---------------+----------------------+----------+---------+ | title | author | publishedDate | description | imageUrl | id | +----------------------+----------------------+---------------+----------------------+----------+---------+ | " Aerospike-example" | " Aerospike-example" | "2000-01-01" | " Aerospike-example" | "" | "10000" | +----------------------+----------------------+---------------+----------------------+----------+---------+ 1 row in set (0.001 secs)
Jika ID buku tidak tercantum, ulangi langkah-langkah untuk menambahkan buku baru.
Mentransfer data pencadangan dari Aerospike ke Cloud Storage
Di Cloud Shell, dari sesi instance
bookshelf-aerospike
, buat file cadangan 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
Perintah ini memproses data dan membuat file cadangan melalui proses berikut:
- Memilih informasi buku dari Aerospike dan mencetaknya dalam format prettyprint JSON.
- Menghapus dua judul pertama dari output dan mengonversi data menjadi format JSON yang dibatasi Newline (ndjson) menggunakan
jq
, pemroses JSON command line. - Menggunakan gcloud CLI untuk mengupload data ke bucket Cloud Storage.
Pastikan file cadangan Aerospike diupload dan ada di bucket Cloud Storage:
gcloud storage ls gs://bookshelf-*/bookshelf-*\ gs://bookshelf-616f60d65a3abe62/bookshelf-backup.json
(Opsional) Tinjau konten file cadangan dari bucket Cloud Storage:
gcloud storage cat -r 0-1024 gs://bookshelf-*/bookshelf-backup.json | head -n 2
Outputnya mirip dengan yang berikut ini:
{"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"}
Keluar dari sesi SSH dan kembali ke Cloud Shell:
exit
Memigrasikan data cadangan ke Bigtable menggunakan Dataflow
Sekarang Anda dapat memigrasikan data cadangan dari Cloud Storage ke instance Bigtable. Bagian ini menjelaskan cara menggunakan pipeline Dataflow untuk memigrasikan data yang kompatibel dengan skema Bigtable.
Mengonfigurasi tugas migrasi Dataflow
Di Cloud Shell, buka direktori
dataflow
pada repositori kode contoh:cd "$HOME"/as2bt/dataflow/
Konfigurasikan variabel lingkungan untuk tugas Dataflow:
export BOOKSHELF_BACKUP_FILE="$(gcloud storage ls gs://bookshelf*/bookshelf-backup.json)" export BOOKSHELF_DATAFLOW_ZONE="$(gcloud config get-value compute/zone)"
Pastikan variabel lingkungan sudah dikonfigurasi dengan benar:
env | grep BOOKSHELF
Jika variabel lingkungan dikonfigurasi dengan benar, outputnya akan mirip dengan yang berikut ini:
BOOKSHELF_BACKUP_FILE=gs://bookshelf-616f60d65a3abe62/bookshelf-backup.json BOOKSHELF_DATAFLOW_ZONE=us-east1-b
Menjalankan tugas Dataflow
Di Cloud Shell, migrasikan data dari Cloud Storage ke instance Bigtable:
./run_oncloud_json.sh
Untuk memantau tugas migrasi data pencadangan, di Konsol Google Cloud, buka halaman Tugas.
Tunggu hingga tugas berhasil diselesaikan. Setelah tugas berhasil diselesaikan, output di Cloud Shell akan terlihat seperti berikut:
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] ------------------------------------------------------------------------
Memeriksa hasil tugas migrasi
Di Cloud Shell, pastikan data cadangan telah ditransfer dengan benar ke Bigtable:
cbt -instance bookshelf-bigtable lookup books 00001
Outputnya mirip dengan hal berikut ini:
---------------------------------------- 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"
Mengubah database bookshelf dari Aerospike ke Bigtable
Setelah berhasil memigrasikan data dari Aerospike ke Bigtable, Anda dapat mengubah konfigurasi aplikasi Bookshelf agar menggunakan Bigtable untuk penyimpanan. Saat Anda menyiapkan konfigurasi ini, buku baru disimpan ke dalam instance Bigtable.
Mengubah konfigurasi aplikasi Bookshelf
Di Cloud Shell, gunakan SSH untuk terhubung ke aplikasi
bookshelf-aerospike
:gcloud compute ssh bookshelf-aerospike
Verifikasi bahwa konfigurasi
DATA_BACKEND
saat ini adalahaerospike
:grep DATA_BACKEND /opt/app/bookshelf/config.py
Outputnya adalah sebagai berikut:
DATA_BACKEND = 'aerospike'
Ubah konfigurasi
DATA_BACKEND
dariaerospike
menjadibigtable
:sudo sed -i "s/DATA_BACKEND =.*/DATA_BACKEND = 'bigtable'/g" /opt/app/bookshelf/config.py
Verifikasi bahwa konfigurasi
DATA_BACKEND
diubah menjadibigtable
:grep DATA_BACKEND /opt/app/bookshelf/config.py
Outputnya adalah sebagai berikut:
DATA_BACKEND = 'bigtable'
Mulai ulang aplikasi Bookshelf yang menggunakan konfigurasi backend
bigtable
baru:sudo supervisorctl restart bookshelf
Pastikan aplikasi Bookshelf telah dimulai ulang dan berjalan dengan benar:
sudo supervisorctl status bookshelf
Outputnya mirip dengan yang berikut ini:
bookshelf RUNNING pid 18318, uptime 0:01:00
Memastikan aplikasi bookshelf menggunakan backend Bigtable
- Di browser, buka
http://IP_ADDRESS:8080
. Tambahkan buku baru bernama
Bigtable-example
.Untuk memverifikasi bahwa buku
Bigtable-example
telah dibuat di instance Bigtable dari aplikasi Bookshelf, salin ID buku dari kolom URL di browser.Di Cloud Shell, cari data buku
Bigtable-example
dari instance Bigtable:cbt -instance bookshelf-bigtable lookup books 7406950188
Outputnya mirip dengan yang berikut ini:
---------------------------------------- 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"
Anda telah berhasil melakukan migrasi data dari Aerospike ke Bigtable dan mengubah konfigurasi bookshelf agar terhubung ke backend Bigtable.
Pembersihan
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project Google Cloud yang Anda buat untuk tutorial ini. Atau, Anda dapat menghapus resource satu per satu.
Menghapus project
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah berikutnya
- Pelajari cara mendesain skema Bigtable.
- Baca cara memulai Migrasi ke Google Cloud.
- Menyiapkan pipeline CI/CD untuk alur kerja pemrosesan data Anda.
- Pahami strategi yang Anda miliki untuk mentransfer set data besar.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.