ApsaraDB RDS for MySQL menyediakan level konsistensi berikut untuk proksi database dalam mode baca/tulis (pembagian baca/tulis): konsistensi akhir, konsistensi sesi, dan konsistensi global. Topik ini menjelaskan level konsistensi serta skenario penggunaannya. Anda dapat menentukan level konsistensi untuk instance ApsaraDB RDS for MySQL Anda sesuai dengan kebutuhan bisnis.
Informasi latar belakang
ApsaraDB RDS for MySQL menggunakan replikasi log biner untuk menyinkronkan data antara instance RDS utama dan instance RDS baca-saja. Saat transaksi dikomit di instance RDS utama, event binlog yang dihasilkan dikirim ke instance RDS baca-saja. Instance RDS baca-saja menerima dan menerapkan event binlog untuk menyinkronkan data dengan instance RDS utama. Replikasi log biner memastikan konsistensi akhir. Namun, dalam skenario konkurensi tinggi atau beban tinggi, latensi replikasi mungkin terjadi pada instance RDS baca-saja. Akibatnya, data yang dibaca dari instance RDS baca-saja dapat berbeda dengan data pada instance RDS utama.
Untuk mengatasi ketidaksesuaian data, ApsaraDB RDS for MySQL menyediakan level konsistensi berikut untuk proksi database: konsistensi akhir, konsistensi sesi, dan konsistensi global. Anda dapat memilih level konsistensi sesuai dengan kebutuhan bisnis Anda.
Pengenalan Konsistensi
Konsistensi Akhir (default)
Deskripsi
Secara default, proksi database instance RDS menggunakan konsistensi akhir. Hal ini memungkinkan permintaan baca langsung dikirim ke instance RDS baca-saja jika replikasi log biner tidak terganggu. Jika replikasi log biner digunakan, data pada instance RDS baca-saja pada akhirnya akan konsisten, dan permintaan baca proksi database juga akan konsisten pada akhirnya. Anda dapat menentukan ambang batas latensi untuk proksi database instance RDS Anda untuk membatasi latensi maksimum instance RDS baca-saja. Untuk informasi lebih lanjut, lihat Konfigurasikan kebijakan akses untuk titik akhir proksi database. Jika latensi instance RDS baca-saja melebihi ambang batas latensi, permintaan baca tidak lagi dikirim ke instance RDS baca-saja tersebut.
Latensi replikasi dapat menyebabkan ketidaksesuaian data pada instance RDS baca-saja yang berbeda. Sebagai contoh, jika Anda memulai sesi untuk terus menjalankan kueri berikut, hasil kueri mungkin berbeda:
SET AUTOCOMMIT = 1;INSERT INTO t1(id, price) VALUES (111, 96);UPDATE t1 SET price = 100 WHERE id = 111;SELECT price FROM t1;Hasil kueri mungkin berbeda karena latensi replikasi.
Skema
Beban kerja Anda tidak sensitif terhadap konsistensi. Anda ingin mengurangi beban pada instance RDS utama agar lebih banyak permintaan baca diteruskan ke instance RDS baca-saja.
Konsistensi Sesi
Deskripsi
Untuk mencegah hasil kueri yang tidak akurat karena konsistensi akhir, sistem bisnis meneruskan permintaan baca berdasarkan persyaratan konsistensi. Sistem bisnis meneruskan permintaan baca yang memerlukan konsistensi tinggi ke instance RDS utama dan permintaan baca yang memerlukan konsistensi rendah ke instance RDS baca-saja. Hal ini meningkatkan kompleksitas aplikasi dan menyebabkan instance RDS utama memproses lebih banyak permintaan baca, yang memengaruhi efektivitas pembagian baca/tulis.
Untuk mengatasi masalah ini, ApsaraDB RDS for MySQL menyediakan konsistensi sesi. Dibandingkan dengan konsistensi akhir, konsistensi sesi memungkinkan proksi database mencatat posisi data yang sebelumnya diperbarui pada instance RDS utama. Posisi data ditentukan berdasarkan pengenal transaksi global (GTID). Proksi database hanya mengirimkan permintaan baca ke instance RDS baca-saja di mana data pada posisi yang diminta telah disinkronkan. Ini memastikan bahwa permintaan baca dapat memperoleh data yang diperbarui dalam sesi saat ini untuk memastikan konsistensi data dalam sesi.
Skema
Ketergantungan konsistensi ada dalam sesi. Dalam hal ini, kami merekomendasikan Anda menggunakan konsistensi sesi. Level konsistensi ini sedikit memengaruhi performa dan cocok untuk sebagian besar skenario.
Konsistensi Global
Deskripsi
Dalam beberapa skenario, ketergantungan kausal ada dalam sesi, ketergantungan ada antar sesi, dan data yang dibaca oleh setiap sesi harus identik. Dalam hal ini, konsistensi sesi tidak dapat memenuhi persyaratan. ApsaraDB RDS for MySQL menyediakan konsistensi global untuk memenuhi persyaratan tersebut. Dibandingkan dengan konsistensi sesi, konsistensi global memungkinkan proksi database mencatat posisi data pada instance RDS utama sebelum setiap operasi baca dan mengirimkan permintaan baca ke instance RDS baca-saja di mana data pada posisi yang diminta telah disinkronkan. Ini memastikan bahwa permintaan baca dapat memperoleh data yang diperbarui di semua sesi untuk memastikan konsistensi data global. Posisi data ditentukan berdasarkan GTID.
Skema
Ketergantungan konsistensi ada antar sesi, dan lebih banyak permintaan baca serta lebih sedikit permintaan tulis perlu diproses.
Untuk informasi lebih lanjut tentang cara mengimplementasikan konsistensi sesi dan konsistensi global, lihat Lampiran: Implementasi konsistensi sesi dan konsistensi global.
Pilih level konsistensi
Level konsistensi tinggi menunjukkan performa pembagian baca/tulis yang rendah. Level konsistensi berikut diurutkan secara menurun: konsistensi global, konsistensi sesi, dan konsistensi akhir.
Dalam kebanyakan kasus, kami merekomendasikan Anda menggunakan konsistensi sesi. Level konsistensi ini sedikit memengaruhi performa dan cocok untuk sebagian besar skenario.
Jika Anda memerlukan konsistensi tinggi antar sesi yang berbeda dan sejumlah kecil operasi tulis perlu diproses, Anda dapat memilih konsistensi global.
Level konsistensi | Dampak pada performa pembagian baca/tulis | Kekuatan konsistensi data | Ruang lingkup konsistensi data |
Konsistensi akhir | Tidak ada | Rendah | Konsistensi hasil akhir |
Konsistensi sesi | Sedang | Sedang | Konsistensi dalam sesi |
Konsistensi global | Tinggi | Tinggi | Konsistensi lintas sesi |
Konfigurasikan level konsistensi
Prasyarat
Fitur proksi database diaktifkan dan versi proksi database adalah 2.25.1 atau lebih baru. Untuk informasi lebih lanjut, lihat Aktifkan fitur proksi database dan Catatan rilis untuk versi proksi database.
Atribut proksi database adalah Baca/Tulis (Pembagian Baca/Tulis). Untuk informasi lebih lanjut, lihat Konfigurasikan atribut baca/tulis dan bobot baca.
Instance RDS menjalankan MySQL 5.7 atau MySQL 8.0 dengan versi mesin minor berikut:
MySQL 5.7: 20210630 atau lebih baru.
MySQL 8.0: 20210930 atau lebih baru.
Catatan penggunaan
Jika Anda menggunakan konsistensi sesi atau konsistensi global, proksi database perlu menunggu sinkronisasi data pada posisi yang diminta. Hal ini dapat meningkatkan latensi layanan. Waktu tunggu maksimum untuk proksi database sama dengan periode waktu habis konsistensi baca.
Jika latensi replikasi terjadi pada instance RDS baca-saja dan konsistensi global digunakan, lebih banyak permintaan baca mungkin diteruskan ke instance RDS utama. Hal ini meningkatkan beban pada instance RDS utama dan lebih jauh meningkatkan latensi layanan.
Level konsistensi default adalah konsistensi akhir.
Prosedur
Pergi ke halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instance RDS berada. Kemudian, temukan instance RDS dan klik ID instance tersebut.
Di panel navigasi sisi kiri, klik Database Proxy.
Di bagian Informasi Koneksi, temukan titik akhir proksi database yang ingin Anda modifikasi dan klik Modifikasi Konfigurasi di kolom Tindakan.
Pilih level konsistensi berdasarkan kebutuhan Anda.
CatatanJika Anda memilih konsistensi akhir atau konsistensi sesi, Anda dapat menentukan ambang batas latensi. Ambang batas latensi default adalah 30 detik.
Jika Anda memilih konsistensi sesi atau konsistensi global, Anda dapat menentukan periode waktu habis konsistensi baca. Jika Anda tidak menentukan periode waktu habis, nilai default adalah 10 ms.
Lampiran: Implementasi konsistensi sesi dan konsistensi global
Untuk mencapai konsistensi sesi dan konsistensi global, proksi database instance RDS Anda mencatat nilai Executed_Gtid_Set pada setiap instance RDS baca-saja untuk menentukan posisi data pada setiap instance RDS baca-saja. Executed_Gtid_Set menentukan himpunan transaksi yang telah dikomit. Posisi data ditentukan berdasarkan GTID. Sebelum permintaan baca dimulai, proksi database menentukan GTID yang diperlukan untuk permintaan baca dan meneruskan permintaan baca ke instance RDS baca-saja yang telah mencapai posisi GTID. Jika instance RDS baca-saja tidak memenuhi persyaratan GTID, proksi database meneruskan permintaan baca hingga data pada posisi GTID yang diminta disinkronkan ke instance RDS baca-saja. ApsaraDB RDS for MySQL memungkinkan Anda menentukan periode waktu habis konsistensi baca untuk membatasi waktu tunggu maksimum. Jika tidak ada instance RDS baca-saja yang memenuhi persyaratan GTID dalam periode waktu habis, permintaan dikirim ke instance RDS utama.
GTID untuk permintaan baca bervariasi berdasarkan level konsistensi.
Konsistensi sesi: GTID untuk permintaan baca sama dengan GTID yang sesuai dengan transaksi terakhir yang dieksekusi dalam sesi saat ini.
Konsistensi global: GTID untuk permintaan baca sama dengan GTID yang sesuai dengan transaksi terakhir yang dieksekusi dalam kluster saat ini.
Operasi terkait
Operasi | Deskripsi |
Mengkueri pengaturan proksi database detail dari instance RDS. | |
Mengkueri informasi tentang titik akhir proksi database. | |
Memodifikasi pengaturan koneksi untuk titik akhir proksi database. |