PolarDB mendukung kebijakan Connections-based Load Balancing dan Active Request-based Load Balancing untuk menyeimbangkan beban di antara beberapa node hanya-baca.
Kebijakan Penyeimbangan Beban
Titik akhir kluster PolarDB dalam mode Read-only mendukung dua kebijakan penyeimbangan beban: Connections-based Load Balancing dan Active Request-based Load Balancing. Titik akhir kluster dalam mode Read/Write (Automatic Read/Write Splitting) hanya mendukung kebijakan Active Request-based Load Balancing.
Kebijakan penyeimbangan beban | Perbedaan | Kesamaan |
Penyeimbangan beban berbasis koneksi Catatan Permintaan baca secara otomatis dijadwalkan di antara beberapa node hanya-baca dalam titik akhir kluster berdasarkan jumlah koneksi untuk mengimplementasikan penyeimbangan beban. |
| Untuk titik akhir kluster dalam mode Read-only, tidak ada permintaan yang diteruskan ke node utama terlepas dari kebijakan penyeimbangan beban. |
Penyeimbangan beban berbasis permintaan aktif Catatan Permintaan baca secara otomatis dijadwalkan di antara beberapa node hanya-baca dalam titik akhir kluster berdasarkan jumlah permintaan aktif untuk mengimplementasikan penyeimbangan beban. |
|
Node Utama Menerima Permintaan Baca
Setelah Anda mengatur Primary Node Accepts Read Requests ke No, permintaan baca umum tidak lagi diteruskan ke node utama. Dalam transaksi, permintaan baca yang memerlukan konsistensi tinggi masih diteruskan ke node utama untuk memenuhi persyaratan bisnis. Jika semua node hanya-baca gagal, permintaan baca diteruskan ke node utama. Jika beban kerja Anda tidak memerlukan konsistensi tinggi, Anda dapat mengatur tingkat konsistensi ke konsistensi akhir untuk mengurangi jumlah permintaan baca yang diteruskan ke node utama. Anda juga dapat menggunakan fitur pemisahan transaksi untuk mengurangi jumlah permintaan baca yang diteruskan ke node utama sebelum transaksi dimulai. Namun, permintaan siaran seperti SET dan PREPARE diteruskan ke node utama.
Parameter Primary Node Accepts Read Requests hanya tersedia jika parameter Read/Write diatur ke Read/Write (Automatic Read/Write Splitting). Untuk informasi tentang cara memodifikasi pengaturan Primary Node Accepts Read Requests, lihat Konfigurasikan PolarProxy.
Jika PolarProxy Anda adalah versi 1.x.x atau 2.5.1 atau lebih baru, nilai baru Primary Node Accepts Read Requests langsung berlaku.
Jika PolarProxy Anda adalah versi 2.x.x dan lebih lama dari 2.5.1 dan jika koneksi persisten digunakan, Anda harus membuat ulang koneksi untuk memvalidasi nilai baru Primary Node Accepts Read Requests. Jika koneksi singkat digunakan, nilai baru langsung berlaku.
Pemisahan Transaksi
Jika titik akhir kluster yang digunakan untuk terhubung ke kluster PolarDB berada dalam mode baca/tulis, PolarProxy meneruskan permintaan baca dan tulis ke node utama dan node hanya-baca. Untuk memastikan konsistensi data di antara transaksi dalam sesi, PolarProxy mengirimkan semua permintaan dalam transaksi sesi ke node utama. Sebagai contoh, driver klien database seperti Java Database Connectivity (JDBC) membungkus permintaan dalam transaksi. Dalam kasus ini, semua permintaan dari aplikasi dikirim ke node utama. Hal ini mengakibatkan beban berat pada node utama. Namun, tidak ada permintaan yang dikirim ke node hanya-baca. Gambar berikut menunjukkan proses tersebut.
Untuk memperbaiki masalah ini, PolarDB menyediakan fitur pemisahan transaksi dalam sesi yang berada pada tingkat isolasi Read Committed. Fitur ini memastikan konsistensi data dalam sesi dan memungkinkan PolarDB mengirimkan permintaan baca ke node hanya-baca untuk mengurangi beban pada node utama. Anda dapat mengurangi beban baca pada node utama tanpa perlu memodifikasi kode atau konfigurasi aplikasi Anda. Dengan cara ini, stabilitas node utama ditingkatkan. Untuk informasi lebih lanjut tentang cara mengaktifkan pemisahan transaksi, lihat Konfigurasikan PolarProxy.
PolarDB for MySQL memungkinkan Anda memisahkan transaksi pada dua tingkat: pemisahan permintaan baca sebelum permintaan tulis pertama (yang dipilih secara default dan merupakan fitur pemisahan transaksi asli) dan pemisahan transaksi penuh (pemisahan permintaan baca sebelum dan sesudah permintaan tulis pertama).
Pemisahan permintaan baca sebelum permintaan tulis pertama
PolarProxy mengirimkan permintaan baca dalam transaksi sebelum permintaan tulis pertama ke node hanya-baca. Ini mengurangi beban pada node utama.
Pemisahan transaksi penuh (pemisahan permintaan baca sebelum dan sesudah permintaan tulis pertama)
Ketika pemisahan permintaan baca sebelum permintaan tulis pertama digunakan, permintaan baca dalam transaksi setelah permintaan tulis pertama masih dirutekan ke node utama. Ini masih menyebabkan beban tidak seimbang. Untuk menyelesaikan beban tidak seimbang, PolarDB for MySQL menyediakan fitur pemisahan transaksi penuh. Ini memungkinkan semua permintaan baca dalam transaksi dirutekan ke node hanya-baca dan mengembalikan hasil yang benar. Fitur ini lebih lanjut mengurangi tekanan pada node utama.
Semua operasi tulis sebelumnya harus disinkronkan ke node hanya-baca sebelum permintaan baca terpisah setelah permintaan tulis pertama dapat dirutekan ke node hanya-baca. Jika konsistensi sesi dipilih, sistem memeriksa apakah semua operasi tulis sebelumnya disinkronkan ke node hanya-baca dalam sesi saat ini sebelum merutekan permintaan baca terpisah setelah permintaan tulis pertama. Jika ya, permintaan baca terpisah setelah permintaan tulis pertama dapat dirutekan ke node hanya-baca dalam sesi saat ini. Jika tidak, permintaan baca terpisah setelah permintaan tulis pertama dirutekan ke node utama. Demikian pula, jika konsistensi global dipilih, sistem memeriksa apakah semua operasi tulis sebelumnya disinkronkan ke node hanya-baca dalam semua sesi sebelum merutekan permintaan baca terpisah setelah permintaan tulis pertama. Jika ya, permintaan baca terpisah setelah permintaan tulis pertama dapat dirutekan ke node hanya-baca. Jika tidak, permintaan baca terpisah setelah permintaan tulis pertama dirutekan ke node utama. Pemisahan transaksi penuh tidak dapat diaktifkan jika konsistensi akhir dipilih.
Versi yang Didukung dan Batasan
Untuk menggunakan fitur pemisahan transaksi, kluster PolarDB for MySQL harus memenuhi persyaratan berikut:
Kluster menjalankan salah satu versi mesin berikut:
PolarDB for MySQL 5.6 dengan versi revisi 5.6.1.0.29 atau lebih baru.
PolarDB for MySQL 5.7 dengan versi revisi 5.7.1.0.9 atau lebih baru.
PolarDB for MySQL 8.0.1 dengan versi revisi 8.0.1.1.18 atau lebih baru.
PolarDB for MySQL 8.0.2.
Parameter mesin
loose_query_cache_typeharus diatur ke OFF. Nilai default parameter ini adalah OFF untuk kluster PolarDB for MySQL 5.6, 5.7, dan 8.0.1, dan ON untuk kluster PolarDB for MySQL 8.0.2. Jika Anda memodifikasi parameter ini, Anda harus me-restart kluster PolarDB.
Hanya transaksi dalam sesi yang berada pada tingkat isolasi Read Committed yang dapat dipisahkan. Fitur ini diaktifkan secara default.
Karena batasan konsistensi baca/tulis, jika node hanya-baca tidak memenuhi persyaratan konsistensi, permintaan baca tidak dirutekan ke node hanya-baca.
Jika PolarProxy Anda lebih lama dari 2.4.14, pemisahan permintaan baca sebelum operasi tulis didukung, bukan pemisahan transaksi penuh.
Jika PolarProxy Anda adalah versi 2.4.14 atau lebih baru, pemisahan transaksi penuh diaktifkan, dan koneksi persisten digunakan, Anda harus membuat ulang koneksi untuk menggunakan fitur pemisahan transaksi. Jika koneksi singkat digunakan, Anda dapat menggunakan fitur pemisahan transaksi segera.
Nonaktifkan pemisahan transaksi
Setelah Anda menonaktifkan pemisahan transaksi, semua permintaan dalam transaksi dirutekan ke node utama.
Penyeimbangan beban berbasis bobot
Secara default, PolarDB for MySQL PolarProxy memilih node yang memiliki jumlah permintaan bersamaan paling sedikit untuk merutekan permintaan. Kebijakan ini pada dasarnya dapat merutekan lalu lintas ke node backend yang berbeda secara seimbang. Hasil penyeimbangan beban dapat dipastikan bahkan jika node backend menggunakan spesifikasi berbeda. Namun, pelanggan memiliki beban bisnis yang bervariasi dan persyaratan berbeda untuk distribusi lalu lintas.
PolarDB for MySQL memperkenalkan fitur penyeimbangan beban berbasis bobot. Anda dapat mengonfigurasi bobot berbeda untuk node. Kemudian, bobot dan jumlah permintaan bersamaan dirujuk untuk keputusan rute akhir. Anda hanya dapat mengonfigurasi bobot dalam dua dimensi berikut:
Dimensi global
Pengaturan bobot Anda berlaku untuk semua titik akhir.
Dimensi titik akhir
Pengaturan bobot Anda hanya berlaku untuk titik akhir saat ini dan menimpa pengaturan bobot dalam dimensi global. Jika Anda terlebih dahulu mengonfigurasi bobot dalam dimensi global dan kemudian mengonfigurasi bobot untuk titik akhir tertentu, bobot untuk titik akhir tersebut yang sebenarnya valid.
Usage notes
Untuk menggunakan fitur ini, PolarProxy harus versi 2.8.3 atau lebih baru.
Karena beban node saat ini dan bobot kustom keduanya dipertimbangkan, rasio keseluruhan aktual mungkin sedikit berbeda dari rasio yang ditentukan. Namun, yang pertama akan secara bertahap mendekati yang terakhir.
Kluster serverless tidak mendukung konfigurasi bobot dalam dimensi titik akhir.
How it works
Bobot akhir setiap node disesuaikan secara dinamis berdasarkan bobot yang Anda tentukan dan jumlah permintaan bersamaan pada setiap node. Rumus sederhana dapat digunakan:
Dynamic weight = Custom weight/Number of concurrent requests
Nilai bobot dinamis yang lebih tinggi berarti bahwa node lebih mungkin digunakan untuk merutekan permintaan. Kebijakan penyeimbangan beban berbasis bobot menyediakan metode rute yang fleksibel. Dalam kenyataannya, lalu lintas bisnis secara bertahap berubah berdasarkan bobot yang Anda tentukan. Dibandingkan dengan metode polling murni berbasis bobot, lebih banyak waktu diperlukan.
Procedure
Semua node backend memiliki bobot awal yang sama yaitu 1.
Bobot berkisar antara 0 hingga 100.
Jika bobot suatu node diatur ke 0, tidak ada permintaan yang dirutekan ke node tersebut jika ada node lain yang tersedia.
Jika kluster hanya berisi satu node penyimpanan kolom hanya-baca, bobotnya dapat diabaikan. Jika kluster berisi beberapa node penyimpanan kolom hanya-baca, permintaan IMCI diseimbangkan berdasarkan bobot node penyimpanan kolom hanya-baca.
Konfigurasikan bobot dalam dimensi global
Masuk ke Konsol PolarDB.
Di pojok kiri atas, pilih wilayah tempat kluster dikerahkan.
Temukan kluster dan klik ID-nya.
Dalam bagian Standard Enterprise Edition atau Dedicated Enterprise Edition section halaman Basic Information, klik Database Proxy Settings.
Dalam kotak dialog Database Proxy Settings, konfigurasikan bobot untuk setiap node berdasarkan kebutuhan bisnis Anda.

Klik OK.
Konfigurasikan bobot dalam dimensi titik akhir
Masuk ke Konsol PolarDB.
Di pojok kiri atas, pilih wilayah tempat kluster dikerahkan.
Temukan kluster dan klik ID-nya.
Dalam bagian Standard Enterprise Edition atau Dedicated Enterprise Edition section halaman Basic Information, klik Configure di pojok kanan atas titik akhir kluster atau titik akhir kustom.
Dalam bagian Pengaturan Node kotak dialog Modify Endpoint Settings, pilih Configure Node Weight dan atur bobot untuk node.

Klik OK.
Test data
Gambar berikut menunjukkan data uji aktual setelah bobot dikonfigurasikan untuk node.
Jika rasio bobot untuk tiga node adalah 1:2:3 (1 untuk node utama), hasil uji yang diharapkan dapat diperoleh. Perhatikan bahwa set data uji sysbench oltp_read_only digunakan.

Node internal pi-bp1d1mtcobuzv**** dan pcbp14vvpolardbma23957**** tidak terlibat dalam merutekan permintaan. Metrik mereka dapat dilewati.
Koneksi Sesuai Permintaan
Informasi Latar Belakang
Untuk titik akhir yang digunakan dalam active request-based load balancing, metode koneksi penuh digunakan secara default. Setelah klien memulai sesi ke PolarProxy, PolarProxy menyiapkan sesi (koneksi) ke setiap node dalam titik akhir. Korespondensi 1:N terbentuk. Permintaan baca dari sesi klien ini dirutekan ke node lain tergantung pada beban aktif node saat ini. Permintaan siaran seperti pernyataan SET dirutekan ke semua node. Jika sejumlah besar node dibuat, pembuatan koneksi dan penyiaran menurunkan efisiensi keseluruhan.
Cara Kerjanya
Ketika metode koneksi sesuai permintaan digunakan, PolarProxy menyiapkan koneksi ke node backend sesuai permintaan. Selama konsistensi data dipastikan dan node utama dapat memproses beban, lebih sedikit koneksi ke node dibuat untuk mengurangi overhead terkait pembuatan koneksi dan penyiaran. Dalam kebanyakan kasus, sesi terhubung ke satu node utama dan satu node hanya-baca (hanya konsistensi akhir yang disediakan). Dalam skenario dengan sejumlah besar koneksi singkat atau pernyataan siaran, metode ini dapat secara signifikan meningkatkan kinerja.
Dalam gambar sebelumnya, jika kluster PolarDB hanya berisi satu node utama dan tiga node hanya-baca dan konsistensi data tidak dipertimbangkan, hasil efisiensi berikut mengenai perutean permintaan dan pembacaan data dalam tiga skenario diperoleh:
Koneksi non-sesuai permintaan
Sesi menyebabkan PolarProxy membuat koneksi ke empat node, dan pernyataan siaran dirutekan ke empat node.
Koneksi sesuai permintaan untuk sesi hanya-baca
Sesi menyebabkan PolarProxy membuat koneksi ke satu node hanya-baca. Permintaan hanya-baca (termasuk permintaan siaran) hanya dirutekan ke node hanya-baca ini. Ini secara signifikan meningkatkan efisiensi pembacaan data.
Koneksi sesuai permintaan untuk sesi baca/tulis
Sesi menyebabkan PolarProxy membuat koneksi ke satu node hanya-baca dan satu koneksi ke satu node utama. Permintaan siaran hanya dirutekan ke dua node tersebut. Ini juga secara signifikan meningkatkan efisiensi pembacaan data.
Skenario
Sejumlah besar node hanya-baca
Koneksi singkat
Sejumlah besar pernyataan siaran (misalnya, dalam skenario koneksi singkat PHP, pernyataan pertama sesi umumnya adalah pernyataan
SET NAMES utf8mb4)Sebagian besar kueri menggunakan pernyataan PREPARE pendek
Batasan
PolarProxy harus versi 2.8.34 atau lebih baru. Untuk informasi lebih lanjut tentang cara melihat versi PolarProxy kluster, lihat Kueri Versi PolarProxy.
Saat Anda menjalankan pernyataan
SHOW PROCESSLISTSuntuk melihat jumlah node yang terhubung, tidak semua koneksi mungkin ditampilkan.Saat Anda menjalankan pernyataan KILL untuk menghentikan koneksi tertentu, koneksi yang ditentukan ke semua node mungkin tidak dihentikan.
Pengujian Kinerja
Lingkungan Pengujian
Node: satu node utama dan tujuh node hanya-baca
Pernyataan SQL yang digunakan:
SET NAMES utf8mb4danSELECT 1Alat pengujian: Sysbench. Jumlah permintaan bersamaan yang sama dikirim setiap kali.
Skenario pengujian: fitur kumpulan koneksi dinonaktifkan, fitur kumpulan koneksi diaktifkan pada tingkat sesi, dan fitur kumpulan koneksi diaktifkan pada tingkat transaksi. Setiap skenario dibagi menjadi dua bagian: Fitur koneksi sesuai permintaan dinonaktifkan pada bagian pertama, dan fitur koneksi sesuai permintaan diaktifkan pada bagian kedua.
Hasil Pengujian
Hasil pengujian kinerja saat fitur kumpulan koneksi dinonaktifkan:
Gambar berikut menunjukkan perubahan dalam utilisasi CPU node. Setelah fitur koneksi sesuai permintaan diaktifkan, utilisasi CPU node berkurang lebih dari 60%.

Gambar berikut menunjukkan perubahan dalam total koneksi ke node. Setelah fitur koneksi sesuai permintaan diaktifkan, total koneksi ke node berkurang lebih dari 80%.

Gambar berikut menunjukkan perubahan dalam QPS keseluruhan. Setelah fitur koneksi sesuai permintaan diaktifkan, QPS keseluruhan meningkat sebesar 35%.

Hasil pengujian kinerja dalam skenario di mana kumpulan koneksi diaktifkan pada tingkat sesi:
Gambar berikut menunjukkan perubahan dalam utilisasi CPU node. Setelah fitur koneksi sesuai permintaan diaktifkan, utilisasi CPU node berkurang sebesar 50% hingga 60%.

Gambar berikut menunjukkan perubahan dalam total koneksi ke node. Setelah fitur koneksi sesuai permintaan diaktifkan, total koneksi ke node berkurang sebesar 60%.

Gambar berikut menunjukkan perubahan dalam QPS keseluruhan. Setelah fitur koneksi sesuai permintaan diaktifkan, QPS keseluruhan meningkat sebesar 30%.

Hasil pengujian kinerja saat fitur kumpulan koneksi diaktifkan pada tingkat transaksi:
Gambar berikut menunjukkan perubahan dalam utilisasi CPU node. Setelah fitur koneksi sesuai permintaan diaktifkan, utilisasi CPU node berkurang sebesar 60%.

Gambar berikut menunjukkan perubahan dalam total koneksi ke node. Setelah fitur koneksi sesuai permintaan diaktifkan, total koneksi node berkurang sebesar 50%.

Gambar berikut menunjukkan perubahan dalam QPS keseluruhan. Setelah fitur koneksi sesuai permintaan diaktifkan, QPS keseluruhan meningkat sebesar 260%.
