Fitur connection pool dalam mode proxy kluster mengelompokkan dan menggunakan kembali koneksi dari proxy ke database (DB). Fitur ini mencegah habisnya koneksi DB backend akibat perintah stateful tertentu dan membantu menjaga stabilitas instans Tair (Redis OSS-compatible) Anda.
Skenario
Dalam mode proxy pada instans kluster cloud native, perintah standar diteruskan melalui koneksi bersama. Peningkatan jumlah koneksi klien tidak memengaruhi jumlah koneksi DB backend. Namun, ketika logika bisnis Anda mencakup perintah stateful tertentu, koneksi antara proxy dan node data beralih dari mode bersama ke mode eksklusif.
Dalam mode eksklusif, setiap koneksi klien membuat koneksi eksklusif yang sesuai pada node data. Dalam skenario konkurensi tinggi, ini menyebabkan jumlah koneksi pada node data bertambah secara linear dengan jumlah koneksi klien. Hal ini dapat memicu kesalahan jumlah maksimum klien tercapai dan menyebabkan gangguan layanan.
Ketika Anda menggunakan watch atau permintaan pemblokiran, penskalaan dengan menambah jumlah shard tidak menyelesaikan masalah terlalu banyak koneksi pada satu shard.
Perintah yang memicu mode eksklusif meliputi:
Perintah transaksi:
MULTI/EXEC(setelahWATCH)Perintah pemblokiran:
BLPOP,BRPOP,BRPOPLPUSH,XREAD ... BLOCK ...
Fitur kolam koneksi mengumpulkan dan menggunakan kembali koneksi eksklusif dari proxy ke node data. Ini mengurangi jumlah koneksi pada node data dan mencegah kegagalan permintaan yang disebabkan oleh melebihi batas koneksi.
Arsitektur
Fitur connection pool berjalan secara independen pada setiap instans anak proxy. Setiap proxy memelihara connection pool khusus untuk koneksi ke masing-masing node data.
Contoh:
Tanpa connection pool, setiap koneksi antara klien dan proxy membuat koneksi terpisah ke setiap shard data backend yang diaksesnya. Misalnya, jika 10 koneksi klien mengakses 5 shard, total koneksi yang dibuat adalah 10 × 5 = 50.
Ketika Anda mengaktifkan kolam koneksi, proxy mempertahankan kolam koneksi terbatas untuk setiap shard data. Permintaan klien kemudian menggunakan kembali koneksi dalam kolam ini. Ini secara signifikan mengurangi jumlah koneksi database yang sebenarnya dibuat. Sebagai contoh, untuk 10 koneksi klien yang sama, setiap shard mungkin hanya perlu mempertahankan 2 koneksi dalam kolamnya, menghasilkan total hanya 2 × 5 = 10 koneksi.
Alur kerja:
Ketika koneksi klien (Client Conn) memulai permintaan dalam mode eksklusif, node proxy mengambil koneksi idle dari kolam koneksi shard data yang sesuai.
Hits kolam: Jika koneksi idle tersedia dalam kolam, proxy segera menyambungkan koneksi ke koneksi klien untuk meneruskan permintaan. Setelah permintaan selesai, koneksi dilepaskan dan dikembalikan ke kolam koneksi untuk digunakan kembali oleh klien lain.
Miss kolam: Jika tidak ada koneksi idle yang tersedia dalam kolam, proxy membuat koneksi baru. Setelah permintaan selesai:
Jika jumlah total koneksi dalam kolam belum mencapai batas atas (
private_conn_pool_max_idle_per_db), koneksi ditambahkan ke kolam.Jika jumlah total koneksi dalam kolam telah mencapai batas atas, koneksi segera dilepaskan (mode koneksi singkat).
Optimalisasi ini secara signifikan mengurangi overhead manajemen koneksi pada database, menurunkan penggunaan sumber daya, serta meningkatkan stabilitas dan throughput database.
Penerapan
Instans harus memenuhi persyaratan berikut:
Mode penyebaran: Cloud native. Anda dapat mengubah mode penyebaran dari classic ke cloud native.
Arsitektur instans: Kluster. Anda dapat mengubah arsitektur instans dari standar ke kluster.
Mode koneksi: Mode proxy.
Versi proxy: 7.0.17 atau lebih baru. Jika versi Anda lebih lama, Anda dapat memperbarui versi proxy.
Mengaktifkan fitur kolam koneksi
Anda dapat mengaktifkan fitur kolam koneksi dengan memodifikasi parameter instans. Operasi ini mendukung pembaruan panas dan tidak memerlukan restart instans. Tidak memengaruhi layanan Anda.
Buka halaman Instans. Di bilah navigasi atas, pilih wilayah. Lalu, klik ID instans target.
Di panel navigasi di sebelah kiri, klik Parameter Settings.
Di daftar parameter, temukan
private_conn_pool_enableddan klik Modify di kolom Aksi.Pada kotak dialog yang muncul, atur nilai parameter menjadi
1dan klik OK.
Setelah itu, Anda dapat membuka Konsol Cloud Monitor, temukan instans tersebut, dan lihat metrik Connections from Proxy to DB di bawah Infrastructure Monitoring untuk membandingkan data sebelum dan sesudah mengaktifkan fitur ini.
Detail konfigurasi dan panduan tuning
Nama konfigurasi | Deskripsi | Nilai default | Rentang nilai |
| Mengaktifkan atau menonaktifkan fitur connection pool. Nilai | 0 |
|
| Waktu hidup data (TTL) untuk koneksi idle dalam kolam, dalam detik. Koneksi idle yang tidak digunakan lebih lama dari waktu ini akan ditutup. Nilai | 60 |
|
| Jumlah maksimum koneksi idle yang dipertahankan setiap node proxy untuk setiap node data. Ketika koneksi tidak lagi digunakan, jika jumlah koneksi idle dalam kolam telah mencapai batas ini, koneksi ditutup alih-alih dikembalikan ke kolam. | 1000 |
|
| Jumlah minimum koneksi idle yang dipertahankan setiap node proxy untuk setiap node data. Jika jumlah koneksi idle dalam kolam berada di bawah nilai ini, mereka tidak dicabut meskipun melebihi | 0 |
|
Rekomendasi tuning berbasis skenario
Skema Umum: Pertahankan konfigurasi default. Mereka cocok untuk sebagian besar layanan.
Skema Konkurensi Tinggi, Transaksi Singkat (seperti flash sale):
Karakteristik: Koneksi digunakan dalam waktu singkat, dan operasi peminjaman serta pengembalian sangat sering.
Rekomendasi: Atur
private_conn_pool_max_idle_per_dbke nilai yang dapat mencakup jumlah permintaan konkuren selama jam sibuk bisnis. Ini memaksimalkan tingkat penggunaan kembali koneksi dan menghindari penurunan ke koneksi singkat. Gunakan nilai default untukprivate_conn_idle_time_secatau kurangi nilainya untuk melepaskan sumber daya lebih cepat selama jam sepi.
Skenario layanan pemblokiran jangka panjang (seperti konsumen antrian)
Karakteristik: Koneksi digunakan dalam waktu lama dan tidak dikembalikan ke pool.
Rekomendasi: Tingkatkan nilai
private_conn_pool_max_idle_per_dbuntuk menampung jumlah konsumen konkuren. Aturprivate_conn_pool_min_idle_per_dbke nilai sedikit lebih tinggi dari rata-rata jumlah koneksi konkuren. Ini "pra-mengambil" koneksi dan mengurangi latensi pembuatan koneksi ketika konsumen baru mulai.
Skema Sensitif Memori atau Menggunakan Tipe Instans Kecil:
Karakteristik: Membutuhkan kontrol ketat terhadap penggunaan memori.
Rekomendasi: Kurangi nilai
private_conn_pool_max_idle_per_dbdanprivate_conn_pool_min_idle_per_db. Meskipun ini mungkin sedikit menurunkan performa dengan meningkatkan kemungkinan membuat koneksi singkat, ini menghemat sumber daya memori pada node data.
Catatan
Atur nilai
private_conn_pool_min_idle_per_dbsecara wajarSetiap koneksi idle mengonsumsi sejumlah sumber daya memori pada node DB backend. Pada instans dengan banyak shard dan beberapa node proxy, mengatur
private_conn_pool_min_idle_per_dbke nilai tinggi dapat menyebabkan penggunaan memori yang tinggi.Hindari pergantian konteks DB yang tidak perlu
Saat koneksi dari pool digunakan kembali oleh klien yang mengakses indeks DB berbeda, proxy harus menjalankan perintah
SELECTuntuk mengganti konteks. Operasi ini meningkatkan muatan DB dan latensi permintaan. Dalam desain aplikasi Anda, pastikan semua klien menggunakan indeks DB yang sama, biasanya DB 0.Tidak berlaku untuk perintah publish/subscribe
Fitur connection pool tidak berlaku untuk perintah publish/subscribe seperti
SUBSCRIBEdanPSUBSCRIBE. Perintah-perintah ini secara permanen menduduki koneksi, sehingga koneksi tersebut tidak dikelola oleh pool.