Opsi pemilihan rute
Saat mengirim permintaan dari aplikasi ke Bigtable, Anda menggunakan profil aplikasi yang memberi tahu Bigtable cara menangani permintaan. Profil aplikasi menentukan kebijakan pemilihan rute untuk permintaan. Untuk instance yang menggunakan replikasi, kebijakan pemilihan rute mengontrol cluster mana yang menerima permintaan dan cara penanganan failover.
Dokumen ini menjelaskan kebijakan pemilihan rute yang tersedia untuk profil aplikasi standar.
Kebijakan pemilihan rute sangat penting untuk isolasi workload kasus penggunaan, saat Anda tidak dapat menggunakan Data Boost. Anda dapat mengonfigurasinya bersama dengan prioritas permintaan.
Kebijakan pemilihan rute tidak memengaruhi replikasi, tetapi Anda harus memahami cara kerja Bigtable replikasi sebelum membaca halaman ini. Anda juga harus membaca Failover.
Pemilihan rute cluster tunggal
Kebijakan pemilihan rute cluster tunggal merutekan semua permintaan ke satu cluster di instance Anda. Jika cluster tersebut tidak tersedia, Anda harus melakukan failover secara manual ke cluster lain. Profil aplikasi Data Boost dan tier dalam memori (Pratinjau) menggunakan pemilihan rute cluster tunggal.
Ini adalah satu-satunya kebijakan pemilihan rute yang memungkinkan Anda mengaktifkan transaksi baris tunggal.
Instance yang direplikasi biasanya memberikan konsistensi eventual. Namun, Anda dapat mencapai konsistensi read-your-writes untuk workload dalam instance yang direplikasi jika mengonfigurasi profil aplikasi untuk workload tersebut agar menggunakan pemilihan rute cluster tunggal untuk mengirim permintaan baca dan tulis ke cluster yang sama. Anda dapat merutekan traffic untuk workload tambahan pada instance yang direplikasi ke cluster lain di instance tersebut, bergantung pada persyaratan workload Anda.
Pemilihan rute multi-cluster
Kebijakan pemilihan rute multi-cluster merutekan permintaan yang Anda kirim ke instance ke region terdekat yang memiliki cluster di instance tersebut. Jika cluster tidak tersedia, traffic akan otomatis melakukan failover ke cluster terdekat yang tersedia.
Konfigurasi ini memberikan konsistensi eventual. Anda tidak dapat mengaktifkan transaksi baris tunggal dengan pemilihan rute multi-cluster, karena transaksi baris tunggal dapat menyebabkan konflik data saat Anda menggunakan pemilihan rute multi-cluster. Untuk mengetahui detailnya, lihat Transaksi baris tunggal.
Gunakan pemilihan rute multi-cluster jika Anda menginginkan ketersediaan tinggi (HA). Untuk mengetahui konfigurasi instance yang direkomendasikan dan detail selengkapnya, lihat Membuat ketersediaan tinggi (HA).
Saat menggunakan pemilihan rute multi-cluster, Anda dapat merutekan permintaan ke cluster mana saja di instance atau ke grup cluster yang Anda tentukan. Jika workload Anda sebagian besar terdiri dari operasi baris tunggal dan Anda ingin mencapai tingkat konsistensi read-your-writes yang lebih tinggi, Anda dapat mengaktifkan pemilihan rute afinitas baris.
Untuk mengetahui informasi selengkapnya tentang pertimbangan pemilihan rute terkait SQL, lihat bagian Pemilihan rute dengan SQL dalam dokumen ini.
Pemilihan rute cluster mana saja
Pemilihan rute cluster mana saja membuat setiap cluster di instance tersedia untuk menerima permintaan dan untuk failover.
Pemilihan rute grup cluster
Jika ingin mengecualikan satu atau beberapa cluster instance dari kemungkinan failover, Anda dapat menggunakan pemilihan rute grup cluster. Bentuk pemilihan rute multi-cluster ini memungkinkan Anda menentukan subset cluster yang dapat dikirimi traffic oleh profil aplikasi. Hal ini dapat berguna jika Anda ingin mencadangkan cluster untuk workload terpisah.
Pemilihan rute afinitas baris
Pemilihan rute afinitas baris secara otomatis merutekan permintaan baca dan tulis baris tunggal ke cluster tertentu berdasarkan kunci baris permintaan.
Anda mengaktifkan pemilihan rute afinitas baris menggunakan gcloud CLI,Google Cloud konsol, library klien Bigtable untuk Java, atau Terraform. Untuk mengetahui informasi selengkapnya, lihat Membuat profil aplikasi.
Jika Anda menginginkan pemilihan rute multi-cluster untuk mencapai tingkat konsistensi read-your-writes yang lebih tinggi, dan sebagian besar permintaan Anda adalah operasi baris tunggal, Anda dapat menggunakan pemilihan rute afinitas baris (pemilihan rute tetap). Bigtable menggunakan kunci baris permintaan untuk otomatis menentukan cluster mana yang akan merutekan permintaan. Anda tidak dapat menetapkan pemetaan antara kunci baris dan cluster secara manual.
Pemilihan rute afinitas baris hanya dapat digunakan untuk permintaan baca atau tulis baris tunggal.
Hal ini mencakup permintaan yang memanggil ReadRows dengan satu kunci yang ditentukan, MutateRow,
dan MutateRows dengan satu kunci yang ditentukan, serta BulkMutateRow dengan satu kunci
yang ditentukan.
Konsistensi read-your-writes tidak sepenuhnya tercapai dengan pemilihan rute afinitas baris dalam kasus berikut:
Menambahkan cluster ke instance: Pemilihan rute afinitas baris menentukan cluster mana yang akan dirutekan berdasarkan kunci baris. Jika cluster baru ditambahkan atau dihapus ke instance saat pemilihan rute afinitas baris diaktifkan, penetapan kunci baris mungkin berubah. Untuk memastikan urutan failover cluster tetap sama meskipun ada perubahan pada daftar cluster instance, sebaiknya gunakan grup cluster dengan menetapkan flag
--restrict-to.Dengan grup cluster, Anda tidak dapat menghapus cluster dalam instance saat cluster tersebut digunakan oleh profil aplikasi. Selain itu, cluster baru yang ditambahkan ke instance tidak akan mulai menerima permintaan kecuali jika ditambahkan secara eksplisit ke grup cluster profil aplikasi.
Failover: Jika cluster tidak tersedia atau tidak sehat, permintaan ke cluster yang terpengaruh akan diarahkan ke cluster berikutnya sesuai dengan urutan failover. Pengalihan rute ini dapat memengaruhi konsistensi.
Untuk mengetahui informasi selengkapnya tentang failover, lihat Failover. Untuk mempelajari cara menyelesaikan failover, lihat Mengelola failover.
Pemilihan rute dengan SQL
Saat menggunakan SQL untuk membuat kueri Bigtable, ada pertimbangan khusus terkait cara permintaan Anda dirutekan. Perilaku pemilihan rute untuk kueri SQL berbeda dengan jenis permintaan Bigtable lainnya.
Pemilihan rute afinitas baris mengarahkan pembacaan dan penulisan baris tunggal
secara otomatis ke cluster tertentu berdasarkan kunci baris. Bigtable tidak mendukung kebijakan pemilihan rute ini untuk kueri SQL. Batasan ini berarti Anda tidak dapat menggunakan pemilihan rute afinitas baris dengan metode ExecuteQuery, meskipun kueri dirancang untuk membaca satu baris. Jika Anda mengirim permintaan ExecuteQuery menggunakan profil aplikasi dengan flag --row-affinity yang diaktifkan, permintaan akan berhasil, tetapi afinitas baris tidak diterapkan.
Transaksi baris tunggal
Dalam mutasi Bigtable, seperti permintaan baca, tulis, dan hapus, selalu bersifat atomik di tingkat baris. Hal ini mencakup mutasi ke beberapa kolom dalam satu baris, selama mutasi tersebut disertakan dalam operasi mutasi yang sama. Bigtable tidak mendukung transaksi yang mengupdate lebih dari satu baris secara atomik.
Namun, Bigtable mendukung beberapa operasi tulis yang memerlukan transaksi di database lain. Pada dasarnya, Bigtable menggunakan transaksi baris tunggal untuk menyelesaikan operasi ini. Operasi ini mencakup pembacaan dan penulisan, dan semua pembacaan serta penulisan dieksekusi secara atomik, tetapi operasi tersebut masih bersifat atomik hanya di tingkat baris:
- Operasi baca-modifikasi-tulis, termasuk kenaikan (increment) dan penambahan (append). Operasi baca-modifikasi-tulis membaca nilai yang ada; menaikkan atau menambahkan ke nilai yang ada; dan menulis nilai yang diperbarui ke tabel.
- Operasi periksa-dan-mutasi, juga dikenal sebagai mutasi bersyarat atau penulisan bersyarat. Dalam operasi periksa-dan-mutasi, Bigtable memeriksa baris untuk melihat apakah baris tersebut memenuhi kondisi yang ditentukan. Jika kondisi terpenuhi, Bigtable akan menulis nilai baru ke baris tersebut.
Konflik antara transaksi baris tunggal
Setiap cluster dalam instance Bigtable adalah cluster utama yang menerima pembacaan dan penulisan. Akibatnya, operasi yang memerlukan transaksi baris tunggal dapat menyebabkan masalah dalam instance yang direplikasi.
Jika kasus penggunaan Anda memungkinkan, Anda dapat menghindari konflik ini dengan menggunakan agregat. Saat Anda mengirim permintaan penambahan ke kolom agregat, nilai baru akan digabungkan dengan nilai yang ada. Agregat memungkinkan Anda menyimpan jumlah atau penghitung yang berjalan. Untuk mengetahui informasi selengkapnya, lihat Mengagregasi nilai pada waktu penulisan.
Untuk mengilustrasikan masalah yang dapat muncul jika Anda tidak menggunakan agregat, misalkan Anda memiliki tabel yang digunakan untuk menyimpan data sistem tiket. Anda menggunakan penghitung bilangan bulat untuk menyimpan jumlah tiket yang telah terjual. Setiap kali Anda menjual tiket, aplikasi Anda akan mengirim operasi baca-modifikasi-tulis untuk menaikkan penghitung sebesar 1.
Jika instance Anda memiliki satu cluster, aplikasi klien dapat menjual tiket secara bersamaan dan menaikkan penghitung tanpa kehilangan data karena permintaan ditangani secara atomik dalam urutan yang diterima oleh satu cluster tersebut.
Di sisi lain, jika instance Anda memiliki beberapa cluster dan profil aplikasi Anda mengizinkan pemilihan rute multi-cluster, permintaan simultan untuk menaikkan penghitung mungkin akan dikirim ke cluster yang berbeda, lalu direplikasi ke cluster lain di instance tersebut. Jika Anda mengirim dua permintaan kenaikan secara bersamaan yang dirutekan ke cluster yang berbeda, setiap permintaan akan menyelesaikan transaksinya tanpa "mengetahui" permintaan lainnya. Penghitung di setiap cluster akan dinaikkan satu. Saat data direplikasi ke cluster lain, Bigtable tidak mungkin mengetahui bahwa Anda bermaksud menaikkan sebesar 2.
Untuk membantu Anda menghindari hasil yang tidak diinginkan, Bigtable melakukan hal berikut:
- Memerlukan setiap profil aplikasi untuk menentukan apakah profil tersebut mengizinkan transaksi baris tunggal.
- Mencegah Anda mengaktifkan transaksi baris tunggal dalam profil aplikasi yang menggunakan pemilihan rute multi-cluster, karena tidak ada cara yang aman untuk mengaktifkan kedua fitur ini sekaligus.
- Memperingatkan Anda jika mengaktifkan transaksi baris tunggal dalam dua atau beberapa profil aplikasi berbeda yang menggunakan pemilihan rute cluster tunggal dan mengarah ke cluster yang berbeda. Jika Anda memilih untuk membuat jenis konfigurasi ini, Anda harus memastikan bahwa Anda tidak mengirim permintaan baca-modifikasi-tulis atau periksa-dan-mutasi yang bertentangan ke cluster yang berbeda.
Langkah berikutnya
- Meninjau contoh setelan replikasi.
- Mempelajari cara mengelola failover.
- Mengubah kebijakan pemilihan rute profil aplikasi.
- Meninjau kriteria untuk konektivitas langsung.