Pemilihan rute yang mempertimbangkan pemimpin

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.

Screenshot perutean Spanner dengan perutean yang mempertimbangkan pemimpin diaktifkan. 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.

Screenshot pemilihan rute Spanner dengan pemilihan rute yang mempertimbangkan pemimpin dinonaktifkan. 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