Topik ini menjelaskan kasus penggunaan, latar belakang, solusi teknis, prosedur, dan FAQ untuk fitur konsistensi global.
Ikhtisar
PolarDB for PostgreSQL menyediakan fitur konsistensi global pada tingkat kernel database. Fitur ini memastikan bahwa permintaan baca yang dikirim ke node mana pun dalam kluster mengembalikan hasil yang konsisten kuat.
Penerapan
Fitur ini didukung pada versi berikut dari PolarDB for PostgreSQL:
PostgreSQL 16 (versi mesin minor 2.0.16.9.9.0 atau lebih baru).
PostgreSQL 14 (versi mesin minor 2.0.14.11.22.0 atau lebih baru).
Anda dapat melihat versi mesin minor di konsol atau dengan menjalankan pernyataan SHOW polardb_version;. Jika versi mesin minor kluster Anda tidak memenuhi persyaratan, Anda dapat meningkatkan versi mesin minor.
Informasi latar belakang
Pada arsitektur asli satu penulis, multi-pembaca dari PolarDB, node read-only menyediakan konsistensi sesi secara default. Meskipun teknologi replikasi fisik dan penyimpanan bersama secara efektif mengurangi latensi replikasi node read-only, teknologi tersebut tidak dapat menjamin bahwa permintaan yang dikirim ke node read-only selalu membaca data terbaru yang ditulis ke node RW. Latensi ini dapat menyebabkan inkonsistensi logika bisnis di industri yang sensitif terhadap latensi seperti keuangan dan game.
Seperti yang ditunjukkan pada gambar sebelumnya, aplikasi bisnis sering kali dipisahkan menggunakan kerangka kerja layanan mikro. Setelah Layanan A menulis data, ia menghasilkan pesan keberhasilan tulis dan memberi tahu Layanan B melalui komponen antrian pesan. Dalam skenario konsistensi sesi, setelah Layanan A memperbarui nilai kolom col menjadi 20, ia dapat langsung membaca nilai terbaru 20 dalam sesi yang sama, bahkan jika permintaan diarahkan ke node read-only. Namun, setelah Layanan A memberi tahu Layanan B tentang pembaruan data, jika Layanan B membaca langsung dari node read-only, Layanan B mungkin tidak mendapatkan hasil terbaru dan masih membaca nilai 10. Hal ini dapat menyebabkan masalah konsistensi data bagi aplikasi. Dalam skenario ini, aplikasi hanya dapat mengarahkan permintaan baca ke node RW untuk memastikan konsistensi data baca-setelah-tulis, sehingga menyebabkan sumber daya node read-only menganggur.
Solusi teknis
PolarDB for PostgreSQL menyediakan kemampuan baca konsistensi kuat untuk node read-only pada tingkat kernel database. Hal ini memastikan bahwa node read-only selalu dapat membaca data terbaru yang ditulis ke node RW, sehingga memberikan konsistensi kuat di seluruh kluster untuk operasi baca. Setelah Anda mengaktifkan fitur konsistensi global, setiap transaksi baca-tulis yang dikomit pada node RW diberi Nomor Urut Komit (Commit Sequence Number/CSN). CSN menunjukkan urutan komit transaksi dan digunakan untuk membangun snapshot transaksi yang lebih efisien yang menggantikan daftar transaksi aktif PostgreSQL asli. Node RW juga mencatat CSN dalam Write-Ahead Log (WAL). Node read-only kemudian memutar ulang WAL untuk membangun status transaksi yang lengkap.
Proses eksekusi SQL untuk pembacaan konsistensi kuat pada node read-only adalah sebagai berikut:
Klien mengirim permintaan kueri ke node read-only.
Node read-only memperoleh CSN terbaru dari node RW melalui jaringan.
Node read-only menggunakan CSN terbaru dari node RW untuk membangun tampilan baca konsistensi kuat dan menunggu status transaksi node read-only diputar ulang hingga offset yang sesuai.
Node read-only menentukan visibilitas data berdasarkan tampilan baca konsistensi kuat dan mengembalikan hasilnya ke klien.
Prosedur
Masuk ke Konsol PolarDB.
Di panel navigasi sebelah kiri, klik Clusters.
Di pojok kiri atas, pilih wilayah tempat kluster ditempatkan.
Temukan kluster target dan klik ID-nya.
Di panel navigasi sebelah kiri, pilih . Atur parameter
polar_csn_enabledanpolar_global_csn_enablemenjadionuntuk mengaktifkan fitur CSN untuk transaksi.CatatanAnda harus me-restart kluster agar modifikasi parameter berlaku. Rencanakan operasi ini terlebih dahulu dan lakukan dengan hati-hati. Untuk informasi selengkapnya tentang cara mengatur parameter kluster di konsol, lihat Set cluster parameters.
Di halaman Basic Information kluster target, pada bagian Database Connections, klik Configure di sebelah Cluster Endpoint atau klik Settings di kotak dialog yang muncul.

Di halaman konfigurasi titik akhir, atur Tingkat Konsistensi menjadi Global Consistency (Strong) dan konfigurasikan dua parameter terkait berikut:
Parameter
Deskripsi
Global Consistency Timeout
Periode waktu tunggu bagi node read-only untuk menunggu sinkronisasi data dari node primer guna memastikan konsistensi. Nilai valid: 1 hingga 1.000.000. Satuan: ms. Nilai default: 100.
Global Consistency Timeout Policy
Kebijakan yang diterapkan ketika node read-only mengalami waktu tunggu habis. Nilai valid:
0, Send Requests to Primary Node (Default).
1, Return Error Messages Due to Timeout.
2, Automatic Downgrade to Inconsistent Read Due to Timeout