Opsi pemilihan rute
Saat mengirim permintaan dari aplikasi ke Bigtable, Anda menggunakan profil aplikasi yang memberi tahu Bigtable cara menangani permintaan tersebut. 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 tingkat 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 dalam instance, 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 dalam 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.
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). Untuk mengaktifkan pemilihan rute afinitas baris, gunakan profil aplikasi kustom dengan tanda --row-affinity yang diaktifkan.
Bigtable menggunakan kunci baris permintaan untuk menentukan cluster mana yang akan dirutekan secara otomatis. 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 akan berubah. Untuk memastikan urutan failover cluster tetap sama meskipun ada perubahan pada daftar cluster instance, sebaiknya gunakan grup cluster dengan menetapkan tanda
--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 dengan cara berikut:
- Meskipun kebijakan pemilihan rute multi-cluster memberikan ketersediaan tinggi melalui failover otomatis untuk sebagian besar permintaan, perilaku ini tidak berlaku untuk kueri SQL. Jika permintaan SQL gagal, permintaan tersebut tidak akan melakukan failover ke cluster lain, meskipun profil aplikasi Anda dikonfigurasi untuk pemilihan rute multi-cluster.
- Pemilihan rute afinitas baris mengarahkan pembacaan dan penulisan baris tunggal
secara otomatis ke cluster tertentu berdasarkan kunci baris. Namun, 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 permintaanExecuteQuerymenggunakan profil aplikasi dengan tanda--row-affinityyang 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 kolom 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 dan penambahan. 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. Oleh karena itu, 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 Nilai agregat saat waktu tulis.
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 penerimaannya 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 dalam instance. 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:
- Meminta 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 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.