Pemilihan rute yang mengetahui posisi teratas

Halaman ini menjelaskan perutean yang mendukung pemilihan pemimpin di Spanner dan cara menggunakannya. Spanner menggunakan perutean yang mendukung pemilihan pemimpin untuk merutekan transaksi baca-tulis secara dinamis dalam konfigurasi instance multi-region dan dual-region untuk mengurangi latensi dan meningkatkan performa di database Anda. Perutean yang mendukung pemilihan pemimpin diaktifkan secara default.

Perutean Spanner untuk transaksi baca-tulis

Spanner mereplikasi data untuk memberikan ketersediaan data tambahan dan lokalitas geografis. Dalam konfigurasi instance dual-region dan multi-region Spanner, satu region dalam konfigurasi instance dual-region dan multi-region ditetapkan sebagai region utama dan berisi replika utama database. Saat Anda menggunakan konfigurasi instance dual-region atau multi-region dan klien Anda mengeluarkan transaksi baca-tulis ke database Anda dari region non-pemimpin, penulisan selalu diproses di region pemimpin, lalu dikirim kembali ke region non-pemimpin. Oleh karena itu, transaksi baca-tulis yang di-commit dari region non-pemimpin memerlukan beberapa perjalanan pulang pergi ke replika pemimpin agar berhasil di-commit.

Perutean yang mendukung pemilihan pemimpin adalah mekanisme yang meningkatkan latensi untuk transaksi baca-tulis dengan merutekan transaksi ini secara cerdas. Jika perutean yang kompatibel dengan pemimpin diaktifkan, meskipun penulisan tidak berasal dari region pemimpin, permintaan pembuatan sesi akan dirutekan ke region pemimpin untuk menyelaraskan frontend Spanner API dengan region pemimpin. Mekanisme perutean ini meningkatkan latensi untuk transaksi baca-tulis dengan mengurangi jumlah perjalanan pulang pergi jaringan yang diperlukan antara region non-pemimpin (tempat aplikasi klien berada) dan region pemimpin menjadi dua.

Screenshot perutean Spanner dengan leader-aware-routing diaktifkan. Gambar 1. Contoh pemilihan rute Spanner dengan pemilihan rute yang mendukung pemimpin diaktifkan.

Jika perutean yang mendukung pemilihan pemimpin dinonaktifkan, aplikasi klien akan merutekan permintaan terlebih dahulu ke layanan frontend Spanner API dalam region aplikasi klien (region non-pemimpin). Kemudian, dari frontend API Spanner di region aplikasi klien, tiga atau lebih perjalanan pulang pergi dilakukan ke server Spanner (SpanServer) di region pemimpin untuk meng-commit penulisan, sehingga meningkatkan latensi. Perjalanan pulang pergi tambahan ini diperlukan untuk mendukung indeks sekunder, pemeriksaan batasan, dan membaca penulisan Anda.

Screenshot pemilihan rute Spanner dengan pemilihan rute yang kompatibel dengan pemimpin dinonaktifkan. Gambar 2. Contoh perutean Spanner dengan perutean yang mendukung replika utama dinonaktifkan.

Kasus penggunaan

Sebagai hasil dari penggunaan perutean yang mendukung pemilihan pemimpin, kasus penggunaan berikut mendapatkan manfaat dari latensi yang lebih rendah:

  • Update massal: Menjalankan impor Dataflow atau menjalankan perubahan di latar belakang (misalnya, DML batch) dari region non-pemimpin.
  • Toleransi terhadap bencana dan peningkatan ketersediaan: Men-deploy aplikasi klien di region pemimpin dan non-pemimpin untuk mentoleransi pemadaman layanan regional sambil memulai penulisan dari region non-pemimpin.
  • Aplikasi global: Men-deploy aplikasi klien secara global dengan lokasi wilayah yang luas yang melakukan penerapan data.

Batasan

Jika aplikasi klien Anda di-deploy di luar wilayah pemimpin dan Anda menulis nilai tanpa membaca data ("penulisan buta"), Anda mungkin mengamati regresi latensi jika perutean yang kompatibel dengan pemimpin diaktifkan. Hal ini karena saat perutean yang mengetahui pemimpin diaktifkan, ada dua perjalanan pulang pergi antar-region (permintaan beginTransaction dan commit) antara aplikasi klien di region non-pemimpin dan frontend Spanner API di region pemimpin. Namun, dengan pemilihan rute yang mendukung pemimpin dinonaktifkan, penulisan tanpa pembacaan hanya memerlukan satu perjalanan pulang pergi antar-region untuk permintaan commit (beginTransaction diproses di frontend Spanner API lokal). Misalnya, jika Anda memuat data secara massal ke dalam tabel yang baru dibuat, transaksi tidak mungkin membaca data dari tabel tersebut. Jika sering melakukan operasi tulis tanpa membacanya di aplikasi, Anda mungkin ingin mempertimbangkan untuk menonaktifkan perutean yang mendukung pemilihan pemimpin. Untuk mengetahui informasi selengkapnya, lihat Menonaktifkan pemilihan rute yang kompatibel dengan pemimpin.

Menggunakan perutean yang mengetahui pemimpin

Perutean yang mendukung pemimpin diaktifkan secara default di library klien Spanner.

Sebaiknya proses permintaan baca-tulis Anda dengan mengaktifkan perutean yang mendukung pemilihan pemimpin. Anda dapat menonaktifkannya untuk membandingkan perbedaan performa.

Mengaktifkan perutean yang mengetahui pemimpin

Anda dapat menggunakan library klien Spanner untuk mengaktifkan perutean yang kompatibel dengan pemimpin secara manual.

C++

Gunakan struktur RouteToLeaderOption untuk mengonfigurasi aplikasi klien Anda dengan mengaktifkan perutean yang kompatibel dengan 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 pemilihan rute yang mendukung pemimpin diaktifkan:

// Create a client with leader-aware routing enabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = true;

Go

Gunakan ClientConfig untuk mengonfigurasi aplikasi klien Anda dengan pemilihan rute yang mendukung 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 Anda dengan pemilihan rute yang kompatibel dengan 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 Anda dengan pemilihan rute yang kompatibel dengan pemimpin diaktifkan:

// Instantiates a client with routeToLeaderEnabled enabled
const spanner = new Spanner({
projectId: projectId,
routeToLeaderEnabled: true;
});

PHP

Gunakan routeToLeader untuk mengonfigurasi aplikasi klien Anda dengan pemilihan rute yang kompatibel dengan 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 Anda dengan pemilihan rute yang kompatibel dengan 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 Anda dengan pemilihan rute yang mendukung 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 perutean yang mengetahui pemimpin

Anda dapat menggunakan library klien Spanner untuk menonaktifkan perutean yang mendukung pemilihan pemimpin.

C++

Gunakan struktur RouteToLeaderOption untuk mengonfigurasi aplikasi klien Anda dengan menonaktifkan perutean yang kompatibel dengan 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 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 kompatibel dengan pemimpin 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 kompatibel dengan 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 yang kompatibel dengan 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 kompatibel dengan pemimpin dinonaktifkan:

// Instantiates a client with routeToLeaderEnabled disabled
const spanner = new Spanner({
projectId: projectId,
routeToLeaderEnabled: false;
});

PHP

Gunakan routeToLeader untuk mengonfigurasi aplikasi klien Anda dengan pemilihan rute yang kompatibel dengan 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 Anda dengan pemilihan rute yang kompatibel dengan 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 Anda dengan pemilihan rute yang kompatibel dengan 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 berikutnya