全部产品
Search
文档中心

PolarDB:Penyeimbangan Beban

更新时间:Jul 03, 2025

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

Catatan

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.

  • Koneksi aplikasi dibuat hanya dengan satu node hanya-baca dalam titik akhir kluster. Jumlah total koneksi yang dapat dibuat oleh aplikasi adalah jumlah maksimum koneksi ke semua node hanya-baca dalam titik akhir kluster.

  • Jika node hanya-baca dihapus dari titik akhir kluster, koneksi ke node tersebut terputus dan kemudian tersambung kembali ke node hanya-baca lainnya.

  • Fitur lanjutan seperti tingkat konsistensi, pemisahan transaksi, koneksi persisten, dan distribusi permintaan otomatis antara node penyimpanan baris dan kolom tidak didukung.

  • Kinerja tinggi karena hanya melibatkan pembuatan koneksi, tetapi tanpa penyeimbangan beban lebih lanjut.

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.

  • Koneksi aplikasi dibuat dengan semua node hanya-baca dalam titik akhir kluster. Jumlah total koneksi yang dapat dibuat oleh aplikasi adalah nilai minimum di antara jumlah maksimum koneksi ke semua node hanya-baca dalam titik akhir kluster.

  • Fitur lanjutan seperti tingkat konsistensi, pemisahan transaksi, koneksi persisten, dan distribusi permintaan otomatis antara node penyimpanan baris dan kolom didukung.

  • Kinerja rendah karena melibatkan resolusi rute dan penentuan untuk setiap permintaan.

  • Kemampuan penyeimbangan beban yang lebih baik disediakan. Bahkan jika node dalam kluster menggunakan spesifikasi berbeda, beban waktu nyata dapat diseimbangkan di antara node.

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.

Catatan
  • 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_type harus 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.

Catatan
  • 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

Catatan
  • 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

  1. Masuk ke Konsol PolarDB.

  2. Di pojok kiri atas, pilih wilayah tempat kluster dikerahkan.

  3. Temukan kluster dan klik ID-nya.

  4. Dalam bagian Standard Enterprise Edition atau Dedicated Enterprise Edition section halaman Basic Information, klik Database Proxy Settings.

  5. Dalam kotak dialog Database Proxy Settings, konfigurasikan bobot untuk setiap node berdasarkan kebutuhan bisnis Anda.

    image.png

  6. Klik OK.

Konfigurasikan bobot dalam dimensi titik akhir

  1. Masuk ke Konsol PolarDB.

  2. Di pojok kiri atas, pilih wilayah tempat kluster dikerahkan.

  3. Temukan kluster dan klik ID-nya.

  4. 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.

  5. Dalam bagian Pengaturan Node kotak dialog Modify Endpoint Settings, pilih Configure Node Weight dan atur bobot untuk node.

    p751929

  6. 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.

456789

Catatan

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 PROCESSLISTS untuk 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 utf8mb4 dan SELECT 1

  • Alat 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%.

      不打开连接池.png

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

      总连接数.png

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

      QPS.png

  • 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%.

      会话级_CPU消耗.png

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

      会话级_总连接数.png

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

      会话级_QPS.png

  • 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%.

      事务级_CPU.png

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

      事务级_CPU.png

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

      事务级_QPS.png