Bermigrasi dari Aerospike ke Bigtable


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.

Komponen proses transfer 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 Cloud Functions 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:

Langkah-langkah migrasi data.

Pada diagram sebelumnya, data dimigrasikan dengan cara berikut:

  1. Anda mencadangkan data tentang buku dari database Aerospike saat ini dan mentransfer data tersebut ke bucket Cloud Storage.
  2. Saat Anda mengupload data pencadangan ke bucket, data cadangan akan otomatis memicu tugas Dataflow as2bt melalui notifikasi update Cloud Storage menggunakan Cloud Function.
  3. 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. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

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

  1. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  2. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  3. Enable the Cloud Resource Manager API.

    Enable the API

    Terraform menggunakan Cloud Resource Manager API untuk mengaktifkan API yang diperlukan untuk tutorial ini.

  4. Di konsol Google Cloud, aktifkan Cloud Shell.

    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 gsutil
  • 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

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

  2. Konfigurasikan us-east1 sebagai region dan us-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

  1. Di Cloud Shell, clone repositori kode:

     git clone https://github.com/fakeskimo/as2bt.git/
    
  2. Di Cloud Shell, lakukan inisialisasi direktori kerja Terraform:

    cd "$HOME"/as2bt/bookshelf/terraform
    terraform init
    
  3. 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)"
    
  4. Tinjau rencana eksekusi Terraform:

    terraform plan
    

    Outputnya mirip dengan hal 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"
        }
    }
    
  5. (Opsional) Untuk memvisualisasikan resource dengan dependensi yang di-deploy oleh Terraform, gambar grafik:

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

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

  3. Pastikan bucket Cloud Storage bookshelf berada dalam tugas pipeline Dataflow:

    gsutil ls -b gs://bookshelf-*
    

    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

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

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

  3. Untuk membuat buku baru, klik Add book.

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

  5. Di URL aplikasi Bookshelf, catat ID buku. Misalnya, jika URL-nya adalah 34.74.80.160:8080/books/10000, ID buku adalah 10000.

    ID Buku di URL.

  6. Di Cloud Shell, gunakan SSH untuk terhubung ke instance bookshelf-aerospike:

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

  1. 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] | .[]' \
        | gsutil cp - $(gsutil ls -b gs://bookshelf-*)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 alat command line gsutil untuk mengupload data ke bucket Cloud Storage.
  2. Pastikan file cadangan Aerospike diupload dan ada di bucket Cloud Storage:

    gsutil ls gs://bookshelf-*/bookshelf-*\
        gs://bookshelf-616f60d65a3abe62/bookshelf-backup.json
    
  3. (Opsional) Tinjau konten file cadangan dari bucket Cloud Storage:

    gsutil cat -r 0-1024 gs://bookshelf-*/bookshelf-backup.json | head -n 2
    

    Outputnya mirip dengan hal 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"}
    
  4. 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

  1. Di Cloud Shell, buka direktori dataflow pada repositori kode contoh:

    cd "$HOME"/as2bt/dataflow/
    
  2. Konfigurasikan variabel lingkungan untuk tugas Dataflow:

    export BOOKSHELF_BACKUP_FILE="$(gsutil ls
    gs://bookshelf*/bookshelf-backup.json)"
    export BOOKSHELF_DATAFLOW_ZONE="$(gcloud config get-value compute/zone)"
    
  3. 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

  1. Di Cloud Shell, migrasikan data dari Cloud Storage ke instance Bigtable:

    ./run_oncloud_json.sh
    
  2. Untuk memantau tugas migrasi data pencadangan, di Konsol Google Cloud, buka halaman Tugas.

    Buka 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

  1. Di Cloud Shell, gunakan SSH untuk terhubung ke aplikasi bookshelf-aerospike:

    gcloud compute ssh bookshelf-aerospike
    
  2. Verifikasi bahwa konfigurasi DATA_BACKEND saat ini adalah aerospike:

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

    Outputnya adalah sebagai berikut:

    DATA_BACKEND = 'aerospike'
    
  3. Ubah konfigurasi DATA_BACKEND dari aerospike menjadi bigtable:

    sudo sed -i "s/DATA_BACKEND =.*/DATA_BACKEND = 'bigtable'/g" /opt/app/bookshelf/config.py
    
  4. Verifikasi bahwa konfigurasi DATA_BACKEND diubah menjadi bigtable:

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

    Outputnya adalah sebagai berikut:

    DATA_BACKEND = 'bigtable'
    
  5. Mulai ulang aplikasi Bookshelf yang menggunakan konfigurasi backend bigtable baru:

    sudo supervisorctl restart bookshelf
    
  6. Pastikan aplikasi Bookshelf telah dimulai ulang dan berjalan dengan benar:

    sudo supervisorctl status bookshelf
    

    Outputnya mirip dengan hal berikut ini:

    bookshelf  RUNNING   pid 18318, uptime 0:01:00
    

Memastikan aplikasi bookshelf menggunakan backend Bigtable

  1. Di browser, buka http://IP_ADDRESS:8080.
  2. Tambahkan buku baru bernama Bigtable-example.

  3. Untuk memverifikasi bahwa buku Bigtable-example telah dibuat di instance Bigtable dari aplikasi Bookshelf, salin ID buku dari kolom URL di browser.

  4. Di Cloud Shell, cari data buku Bigtable-example dari instance Bigtable:

    cbt -instance bookshelf-bigtable lookup books 7406950188
    

    Outputnya mirip dengan hal 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

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah selanjutnya