Halaman ini menjelaskan pemilihan rute yang peka terhadap pemimpin di Spanner dan cara menggunakannya. Spanner menggunakan perutean yang peka terhadap pemimpin untuk secara dinamis merutekan transaksi baca-tulis dalam konfigurasi instance multi-region untuk mengurangi latensi dan meningkatkan performa di database Anda. Perutean yang sadar 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 Spanner, satu region dalam konfigurasi instance multi-region ditetapkan sebagai region pemimpin dan berisi replika pemimpin dari database. Jika Anda menggunakan konfigurasi instance multi-region dan klien mengeluarkan transaksi baca-tulis ke database Anda dari region non-leader, operasi tulis akan selalu diproses di region pemimpin, lalu dikirim kembali ke region non-leader. Oleh karena itu, transaksi baca-tulis yang dilakukan dari region non-pemimpin memerlukan beberapa perjalanan bolak-balik ke replika pemimpin agar berhasil di-commit.
Perutean yang peka terhadap pemimpin adalah mekanisme yang meningkatkan latensi untuk transaksi baca-tulis dengan mengarahkan transaksi ini secara cerdas. Jika perutean berbasis posisi diaktifkan, meskipun operasi tulis tidak berasal dari wilayah pemimpin, permintaan pembuatan sesi akan dirutekan ke wilayah pemimpin untuk menyelaraskan Spanner Front End (SpanFE) dengan region pemimpin. Mekanisme perutean ini meningkatkan latensi untuk transaksi baca-tulis dengan mengurangi jumlah perjalanan bolak-balik jaringan yang diperlukan antara region non-leader (tempat aplikasi klien berada) dan region pemimpin menjadi dua.
Gambar 1. Contoh pemilihan rute Spanner dengan perutean yang mengenali pemimpin yang diaktifkan.
Jika perutean berbasis pemimpin dinonaktifkan, aplikasi klien akan terlebih dahulu mengarahkan permintaan ke layanan SpanFE dalam region aplikasi klien (region non-posisi pemimpin). Kemudian, dari SpanFE di region aplikasi klien, tiga perjalanan bolak-balik atau lebih dilakukan ke server Spanner (SpanServer) di region pemimpin untuk meng-commit penulisan, sehingga menambah latensi. Round-trip tambahan ini diperlukan untuk mendukung indeks sekunder, pemeriksaan batasan, dan membaca penulisan Anda.
Gambar 2. Contoh pemilihan rute Spanner dengan perutean yang mengenali pemimpin dinonaktifkan.
Kasus penggunaan
Sebagai hasil dari penggunaan perutean yang peka terhadap pemimpin, kasus penggunaan berikut mendapatkan manfaat dari latensi yang lebih rendah:
- Update massal: Menjalankan impor Dataflow atau menjalankan perubahan latar belakang (misalnya, batch DML) dari region non-leader.
- Toleransi bencana dan peningkatan ketersediaan: Men-deploy aplikasi klien di region pemimpin dan non-pemimpin untuk menoleransi gangguan regional saat memulai operasi tulis dari region non-pemimpin.
- Aplikasi global: Men-deploy aplikasi klien secara global dengan lokasi region yang luas yang meng-commit data.
Batasan
Jika aplikasi klien di-deploy di luar region pemimpin dan Anda menulis nilai tanpa membaca data ("blind write"),Anda mungkin mengamati regresi latensi jika perutean yang peka pemimpin diaktifkan. Hal ini karena saat perutean berbasis
pemimpin diaktifkan, ada dua perjalanan bolak-balik antar-region (beginTransaction
dan permintaan commit
) antara aplikasi klien di region non-leader dan SpanFE di region pemimpin. Namun, jika perutean berbasis pemimpin dinonaktifkan, operasi tulis tanpa baca hanya memerlukan satu perjalanan dua arah 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 commit operasi tulis tanpa membacanya di aplikasi, sebaiknya pertimbangkan untuk menonaktifkan perutean yang peka pemimpin. Untuk informasi selengkapnya, lihat
Menonaktifkan pemilihan rute yang peka pemimpin.
Menggunakan pemilihan rute yang mempertimbangkan pemimpin
Perutean yang peka terhadap pemimpin diaktifkan secara default di library klien Spanner.
Sebaiknya proses permintaan baca-tulis Anda dengan perutean berbasis pemimpin diaktifkan. Anda dapat menonaktifkannya untuk membandingkan perbedaan performa.
Mengaktifkan pemilihan rute yang sadar pemimpin
Anda dapat menggunakan library klien Spanner untuk mengaktifkan perutean yang peka pemimpin secara manual.
C++
Gunakan struktur RouteToLeaderOption
untuk mengonfigurasi aplikasi klien Anda dengan mengaktifkan perutean berbasis pemimpin:
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 Anda dengan mengaktifkan perutean berbasis pemimpin:
// Create a client with leader-aware routing enabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = true;
Go
Gunakan ClientConfig
untuk mengonfigurasi aplikasi klien Anda dengan mengaktifkan perutean berbasis pemimpin:
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 Anda dengan mengaktifkan perutean berbasis pemimpin:
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 Anda dengan mengaktifkan perutean berbasis pemimpin:
// Instantiates a client with routeToLeaderEnabled enabled
const spanner = new Spanner({
projectId: projectId,
routeToLeaderEnabled: true;
});
PHP
Gunakan routeToLeader
untuk mengonfigurasi aplikasi klien Anda dengan mengaktifkan perutean berbasis pemimpin:
// 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 Anda dengan mengaktifkan perutean berbasis pemimpin:
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 Anda dengan mengaktifkan perutean berbasis pemimpin:
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 peka pemimpin
Anda dapat menggunakan library klien Spanner untuk menonaktifkan perutean yang peka pemimpin.
C++
Gunakan struktur RouteToLeaderOption
untuk mengonfigurasi aplikasi klien dengan perutean yang peka
pemimpin 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 Anda dengan pemilihan rute yang peka terhadap pemimpin yang dinonaktifkan:
// Create a client with leader-aware routing disabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = false;
Go
Gunakan ClientConfig
untuk mengonfigurasi aplikasi klien Anda dengan pemilihan rute yang peka terhadap pemimpin yang 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 yang peka
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 Anda dengan pemilihan rute yang peka terhadap pemimpin yang 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 peka terhadap pemimpin:
// 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 Anda dengan pemilihan rute yang peka terhadap pemimpin yang 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 Anda dengan pemilihan rute yang peka terhadap pemimpin yang 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 dan multi-region.
- Pelajari Replikasi.
- Pelajari cara Mengubah region pemimpin database.