全部产品
Search
文档中心

Tair (Redis® OSS-Compatible):Praktik terbaik untuk fitur connection pool dalam mode proxy kluster

更新时间:Dec 17, 2025

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 (setelah WATCH)

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

  1. Ketika koneksi klien (Client Conn) memulai permintaan dalam mode eksklusif, node proxy mengambil koneksi idle dari kolam koneksi shard data yang sesuai.

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

  3. Miss kolam: Jika tidak ada koneksi idle yang tersedia dalam kolam, proxy membuat koneksi baru. Setelah permintaan selesai:

    1. Jika jumlah total koneksi dalam kolam belum mencapai batas atas (private_conn_pool_max_idle_per_db), koneksi ditambahkan ke kolam.

    2. 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:

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.

  1. Buka halaman Instans. Di bilah navigasi atas, pilih wilayah. Lalu, klik ID instans target.

  2. Di panel navigasi di sebelah kiri, klik Parameter Settings.

  3. Di daftar parameter, temukan private_conn_pool_enabled dan klik Modify di kolom Aksi.

  4. Pada kotak dialog yang muncul, atur nilai parameter menjadi 1 dan 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

private_conn_pool_enabled

Mengaktifkan atau menonaktifkan fitur connection pool. Nilai 1 mengaktifkan fitur. Nilai 0 menonaktifkan fitur.

0

[0|1]

private_conn_idle_time_sec

Waktu hidup data (TTL) untuk koneksi idle dalam kolam, dalam detik. Koneksi idle yang tidak digunakan lebih lama dari waktu ini akan ditutup. Nilai 0 berarti koneksi ditutup segera.

60

[0-4294967295]

private_conn_pool_max_idle_per_db

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

[0-4294967295]

private_conn_pool_min_idle_per_db

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

0

[0-4294967295]

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_db ke 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 untuk private_conn_idle_time_sec atau 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_db untuk menampung jumlah konsumen konkuren. Atur private_conn_pool_min_idle_per_db ke 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_db dan private_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_db secara wajar

    Setiap 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_db ke 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 SELECT untuk 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 SUBSCRIBE dan PSUBSCRIBE. Perintah-perintah ini secara permanen menduduki koneksi, sehingga koneksi tersebut tidak dikelola oleh pool.

Referensi