Halaman ini menjelaskan pemilihan rute yang mempertimbangkan pemimpin di Spanner dan cara menggunakannya. Spanner menggunakan pemilihan rute yang mempertimbangkan pemimpin untuk merutekan transaksi baca-tulis secara dinamis dalam konfigurasi instance wilayah ganda dan multi-region untuk mengurangi latensi dan meningkatkan performa di database Anda. Pemilihan rute yang mempertimbangkan pemimpin diaktifkan secara default.
Pemilihan rute Spanner untuk transaksi baca-tulis
Spanner mereplikasi data untuk memberikan ketersediaan data dan lokalitas geografis tambahan. Dalam konfigurasi instance multi-region dan dual-region Spanner, satu region dalam konfigurasi instance multi-region dan dual-region ditetapkan sebagai region pemimpin dan berisi replika pemimpin database. Saat Anda menggunakan konfigurasi instance multi-region atau region ganda dan klien Anda mengeluarkan transaksi baca-tulis ke database dari region non-pemimpin, operasi tulis selalu diproses di region pemimpin, lalu dikirim kembali ke region non-pemimpin. Oleh karena itu, transaksi baca-tulis yang dilakukan dari region non-pemimpin memerlukan beberapa perjalanan bolak-balik ke replika pemimpin agar berhasil dilakukan.
Pemilihan rute yang mempertimbangkan pemimpin adalah mekanisme yang meningkatkan latensi untuk transaksi baca-tulis dengan merutekan transaksi ini secara cerdas. Jika pemilihan rute yang mengetahui leader diaktifkan, meskipun operasi tulis tidak berasal dari region leader, permintaan pembuatan sesi akan dirutekan ke region leader untuk menyelaraskan Spanner Front End (SpanFE) dengan region leader. Mekanisme pemilihan rute ini meningkatkan latensi untuk transaksi baca-tulis dengan mengurangi jumlah perjalanan bolak-balik jaringan yang diperlukan antara region non-pemimpin (tempat aplikasi klien berada) dan region pemimpin menjadi dua.
Gambar 1. Contoh pemilihan rute Spanner dengan pemilihan rute yang mempertimbangkan pemimpin diaktifkan.
Jika pemilihan rute yang mempertimbangkan pemimpin dinonaktifkan, aplikasi klien akan merutekan permintaan terlebih dahulu ke layanan SpanFE dalam region aplikasi klien (region non-pemimpin). Kemudian, dari SpanFE di region aplikasi klien, tiga atau lebih perjalanan bolak-balik dilakukan ke server Spanner (SpanServer) di region pemimpin untuk melakukan operasi tulis, sehingga meningkatkan latensi. Perjalanan bolak-balik tambahan ini diperlukan untuk mendukung indeks sekunder, pemeriksaan batasan, dan membaca operasi tulis Anda.
Gambar 2. Contoh pemilihan rute Spanner dengan pemilihan rute yang mempertimbangkan pemimpin dinonaktifkan.
Kasus penggunaan
Sebagai hasil dari penggunaan perutean yang mempertimbangkan pemimpin, kasus penggunaan berikut akan mendapatkan manfaat dari latensi yang lebih rendah:
- Pembaruan massal: Menjalankan impor Dataflow atau menjalankan perubahan latar belakang (misalnya, DML batch) dari region non-pemimpin.
- Toleransi bencana dan peningkatan ketersediaan: Men-deploy aplikasi klien di region leader dan non-leader untuk mentoleransi pemadaman layanan regional saat memulai operasi tulis dari region non-leader.
- Aplikasi global: Men-deploy aplikasi klien secara global dengan lokasi region yang tersebar luas yang melakukan commit data.
Batasan
Jika aplikasi klien Anda di-deploy di luar region pemimpin dan Anda
menulis nilai tanpa membaca data ("blind writes"),Anda mungkin mengamati regresi
latensi jika pemilihan rute yang mempertimbangkan pemimpin diaktifkan. Hal ini karena saat pemilihan rute yang mengetahui leader
diaktifkan, ada dua perjalanan bolak-balik antar-region (beginTransaction
dan permintaan commit
) antara aplikasi klien di region non-leader
dan SpanFE di region leader. Namun, dengan pemilihan rute yang mempertimbangkan pemimpin
dinonaktifkan, operasi tulis tanpa operasi baca hanya memerlukan satu perjalanan bolak-balik antar-region untuk
permintaan commit
(beginTransaction
diproses di SpanFE lokal). Misalnya, jika Anda memuat data file secara massal ke dalam tabel yang baru dibuat, transaksi kemungkinan tidak akan membaca data dari tabel. Jika Anda sering melakukan operasi
menulis tanpa membacanya di aplikasi, sebaiknya pertimbangkan untuk
menonaktifkan pemilihan rute yang mempertimbangkan pemimpin. Untuk informasi selengkapnya, lihat
Menonaktifkan pemilihan rute yang mempertimbangkan pemimpin.
Menggunakan pemilihan rute yang mempertimbangkan pemimpin
Pemilihan rute yang mempertimbangkan pemimpin diaktifkan secara default di library klien Spanner.
Sebaiknya proses permintaan baca-tulis Anda dengan mengaktifkan pemilihan rute yang berbasis leader. Anda dapat menonaktifkannya untuk membandingkan perbedaan performa.
Mengaktifkan perutean yang mempertimbangkan pemimpin
Anda dapat menggunakan library klien Spanner untuk mengaktifkan pemilihan rute yang mengetahui pemimpin secara manual.
C++
Gunakan struktur RouteToLeaderOption
untuk mengonfigurasi aplikasi klien dengan perutean yang mendukung leader
yang diaktifkan:
void RouteToLeaderOption(std::string const& project_id, std::string const& instance_id,
std::string const& database_id) {
namespace spanner = ::google::cloud::spanner;
// Create a client with RouteToLeaderOption enabled.
auto client = spanner::Client(
spanner::MakeConnection(
spanner::Database(project_id, instance_id, database_id)),
google::cloud::Options{}.set<spanner::RouteToLeaderOption>(
spanner::true));
C#
Gunakan EnableLeaderRouting
untuk mengonfigurasi aplikasi klien dengan perutean yang terhubung ke pemimpin diaktifkan:
// Create a client with leader-aware routing enabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = true;
Go
Gunakan ClientConfig
untuk mengonfigurasi aplikasi klien dengan perutean yang terhubung ke pemimpin diaktifkan:
type ClientConfig struct {
// DisableRouteToLeader specifies if all the requests of type read-write
// and PDML need to be routed to the leader region.
// Default: false
DisableRouteToLeader false
}
Java
Gunakan SpannerOptions.Builder
untuk mengonfigurasi aplikasi klien dengan perutean yang terhubung ke pemimpin diaktifkan:
SpannerOptions options = SpannerOptions.newBuilder().enableLeaderAwareRouting.build();
Spanner spanner = options.getService();
String instance = "my-instance";
String database = "my-database";
Node.js
Gunakan SpannerOptions
untuk mengonfigurasi aplikasi klien dengan perutean yang terhubung ke pemimpin diaktifkan:
// Instantiates a client with routeToLeaderEnabled enabled
const spanner = new Spanner({
projectId: projectId,
routeToLeaderEnabled: true;
});
PHP
Gunakan routeToLeader
untuk mengonfigurasi aplikasi klien dengan perutean yang mendukung pemimpin diaktifkan:
// Instantiates a client with leader-aware routing enabled
use Google\Cloud\Spanner\SpannerClient;
$routeToLeader = true;
$spanner = new SpannerClient($routeToLeader);
Python
Gunakan route_to_leader_enabled
untuk mengonfigurasi aplikasi klien dengan perutean yang terhubung ke pemimpin diaktifkan:
spanner_client = spanner.Client(
route_to_leader_enabled=true
)
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)
Ruby
Gunakan self.new
untuk mengonfigurasi aplikasi klien dengan perutean yang terhubung ke pemimpin diaktifkan:
def self.new(project_id: nil, credentials: nil, scope: nil, timeout: nil,
endpoint: nil, project: nil, keyfile: nil, emulator_host: nil,
lib_name: nil, lib_version: nil, enable_leader_aware_routing: true) ->
Google::Cloud::Spanner::Project
Menonaktifkan pemilihan rute yang mempertimbangkan pemimpin
Anda dapat menggunakan library klien Spanner untuk menonaktifkan pemilihan rute yang berbasis leader.
C++
Gunakan struktur RouteToLeaderOption
untuk mengonfigurasi aplikasi klien dengan pemilihan rute yang mempertimbangkan leader
dinonaktifkan:
void RouteToLeaderOption(std::string const& project_id, std::string const& instance_id,
std::string const& database_id) {
namespace spanner = ::google::cloud::spanner;
// Create a client with RouteToLeaderOption disabled.
auto client = spanner::Client(
spanner::MakeConnection(
spanner::Database(project_id, instance_id, database_id)),
google::cloud::Options{}.set<spanner::RouteToLeaderOption>(
spanner::false));
C#
Gunakan EnableLeaderRouting
untuk mengonfigurasi aplikasi klien dengan pemilihan rute yang mempertimbangkan pemimpin dinonaktifkan:
// Create a client with leader-aware routing disabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = false;
Go
Gunakan ClientConfig
untuk mengonfigurasi aplikasi klien dengan pemilihan rute yang mempertimbangkan pemimpin dinonaktifkan:
type ClientConfig struct {
// DisableRouteToLeader specifies if all the requests of type read-write
// and PDML need to be routed to the leader region.
// Default: false
DisableRouteToLeader true
}
Java
Gunakan SpannerOptions.Builder
untuk membuat koneksi ke database Spanner dengan perutean berbasis pemimpin dinonaktifkan:
SpannerOptions options = SpannerOptions.newBuilder().disableLeaderAwareRouting.build();
Spanner spanner = options.getService();
String instance = "my-instance";
String database = "my-database";
Node.js
Gunakan SpannerOptions
untuk mengonfigurasi aplikasi klien dengan pemilihan rute yang mempertimbangkan pemimpin dinonaktifkan:
// Instantiates a client with routeToLeaderEnabled disabled
const spanner = new Spanner({
projectId: projectId,
routeToLeaderEnabled: false;
});
PHP
Gunakan routeToLeader
untuk mengonfigurasi aplikasi klien dengan pemilihan rute yang mempertimbangkan pemimpin dinonaktifkan:
// Instantiates a client with leader-aware routing disabled
use Google\Cloud\Spanner\SpannerClient;
$routeToLeader = false;
$spanner = new SpannerClient($routeToLeader);
Python
Gunakan route_to_leader_enabled
untuk mengonfigurasi aplikasi klien dengan pemilihan rute yang mempertimbangkan pemimpin dinonaktifkan:
spanner_client = spanner.Client(
route_to_leader_enabled=false
)
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)
Ruby
Gunakan self.new
untuk mengonfigurasi aplikasi klien dengan pemilihan rute yang mempertimbangkan pemimpin dinonaktifkan:
def self.new(project_id: nil, credentials: nil, scope: nil, timeout: nil,
endpoint: nil, project: nil, keyfile: nil, emulator_host: nil,
lib_name: nil, lib_version: nil, enable_leader_aware_routing: false) ->
Google::Cloud::Spanner::Project
Langkah selanjutnya
- Pelajari Konfigurasi regional, dual-region, dan multi-region.
- Pelajari Replikasi.
- Pelajari cara Mengubah region paling dominan dalam database.