Pada instans Tair (Redis OSS-compatible) yang menggunakan arsitektur kluster atau arsitektur pemisahan baca/tulis, node proxy bertanggung jawab atas routing permintaan, load balancing, dan failover. Node proxy dapat menyederhanakan logika sisi klien serta mendukung fitur lanjutan seperti beberapa database (DB) dan caching hotkey. Memahami aturan routing node proxy serta cara menangani perintah tertentu membantu Anda merancang sistem bisnis yang lebih efisien.
Ikhtisar node proxy
Node proxy adalah komponen mandiri dalam instans Tair. Komponen ini tidak mengonsumsi sumber daya shard data. Tair menggunakan beberapa node proxy untuk menerapkan load balancing dan failover.
Kemampuan | Deskripsi |
Transisi mode penggunaan untuk instans kluster | Node proxy dapat menjembatani arsitektur, memungkinkan Anda menggunakan instans dengan arsitektur kluster seolah-olah merupakan instans standalone. Node proxy mendukung operasi cross-slot untuk perintah yang mengelola beberapa kunci, seperti DEL, EXISTS, MGET, MSET, SDIFF, dan UNLINK. Untuk informasi selengkapnya, lihat Daftar perintah yang didukung dalam modus proxy. Saat instans dengan arsitektur standalone tidak lagi memenuhi kebutuhan bisnis Anda, Anda dapat memigrasikan data ke instans dengan arsitektur kluster yang menggunakan node proxy tanpa mengubah kode Anda. Hal ini secara signifikan mengurangi biaya transformasi bisnis. |
Load balancing dan routing permintaan | Node proxy membuat koneksi persisten dengan shard data backend dan menangani routing serta load balancing permintaan. Untuk informasi selengkapnya tentang routing, lihat Aturan routing node proxy. |
Mengelola traffic ke replika baca | Node proxy terus memantau status replika baca dan mengendalikan traffic dalam situasi berikut:
|
Setelah Anda mengaktifkan fitur proxy query cache, node proxy menyimpan cache permintaan yang berisi hotkey beserta respons yang sesuai. Saat node proxy menerima permintaan yang sama dalam periode validitas cache, node tersebut langsung mengembalikan hasilnya ke klien tanpa berinteraksi dengan shard data backend. Hal ini membantu mengurangi ketimpangan akses yang disebabkan oleh banyaknya permintaan baca ke hotkey. Catatan Anda dapat mengaktifkan fitur ini dengan mengatur parameter query_cache_enabled parameter. Fitur ini hanya tersedia untuk instans Tair Memory-optimized dan Persistent Memory-optimized. | |
Dukungan untuk beberapa database (DB) | Dalam mode kluster, Redis native dan klien kluster tidak mendukung beberapa database (DB). Mereka hanya menggunakan database default Catatan Jika Anda menggunakan klien StackExchange.Redis, Anda harus menggunakan versi 2.7.20 atau yang lebih baru. Jika tidak, akan terjadi error. Untuk informasi selengkapnya, lihat Pengumuman peningkatan StackExchange.Redis. |
Seiring perkembangan teknologi proxy, jumlah node proxy bukan satu-satunya faktor yang menentukan kapasitas pemrosesan. Alibaba Cloud memastikan rasio node proxy dalam instans kluster memenuhi persyaratan yang ditentukan.
Aturan routing node proxy
Untuk informasi selengkapnya tentang perintah, lihat Ikhtisar perintah.
Arsitektur | Aturan routing | Deskripsi |
Arsitektur kluster | Aturan routing dasar |
|
Aturan routing untuk perintah tertentu |
| |
Arsitektur pemisahan baca/tulis | Aturan routing dasar |
|
Aturan routing untuk perintah tertentu |
|
Proxy query cache
Node proxy dapat menyimpan cache permintaan yang berisi hotkey beserta hasil kueri yang sesuai. Saat node proxy menerima permintaan yang sama dalam periode validitas cache, node tersebut langsung mengembalikan hasilnya ke klien tanpa berinteraksi dengan shard data backend. Fitur ini dapat mengurangi atau mencegah degradasi performa akibat ketimpangan akses yang disebabkan oleh volume tinggi permintaan baca ke hotkey.
Kernel database mengidentifikasi hotkey menggunakan algoritma pengurutan dan statistik, mirip dengan Hot Key (QPS) dalam fitur Analisis Top Key. Secara default, kunci diidentifikasi sebagai hotkey jika QPS-nya melebihi 5.000. Anda juga dapat menyesuaikan ambang batas ini menggunakan parameter
bigkey-threshold.Jika hotkey dimodifikasi saat datanya masih dalam cache, perubahan tersebut tidak disinkronkan ke cache. Artinya, permintaan berikutnya mungkin membaca data kedaluwarsa dari cache hingga entri cache tersebut kedaluwarsa. Anda dapat memperpendek periode validitas cache sesuai kebutuhan bisnis Anda.
Node proxy tidak menyimpan cache seluruh hotkey. Sebaliknya, node tersebut menyimpan cache permintaan yang berisi hotkey beserta hasil kueri yang sesuai.
Fitur ini hanya tersedia untuk instans Tair Memory-optimized dan Persistent Memory-optimized yang menggunakan arsitektur kluster dalam modus proxy atau arsitektur pemisahan baca/tulis.
Kasus penggunaan
Fitur ini cocok untuk skenario seperti daftar topik populer, profil pengguna populer, dan pengumuman game, di mana aplikasi dapat mentoleransi data yang sedikit kedaluwarsa.
Arsitektur
Penggunaan
Fitur ini dinonaktifkan secara default. Anda dapat mengaktifkannya dengan mengatur parameter query_cache_enabled parameter.
Parameter
Anda dapat menggunakan perintah QUERYCACHE KEYS, QUERYCACHE INFO, dan QUERYCACHE LISTALL yang dikembangkan Tair untuk melihat penggunaan cache kueri proxy Tair.
Perintah
Penggunaan koneksi
Umumnya, node proxy membuat koneksi persisten dengan shard data untuk memproses permintaan. Namun, saat permintaan mencakup salah satu perintah berikut, node proxy membuat koneksi tambahan yang tidak dapat diagregasi pada shard data yang sesuai berdasarkan kebutuhan perintah tersebut. Dalam kasus ini, jumlah maksimum koneksi untuk instans dibatasi oleh batas koneksi satu shard data. Untuk informasi tentang batas koneksi satu shard, lihat spesifikasi instans Anda. Gunakan perintah-perintah ini dengan hati-hati agar tidak melebihi batas koneksi.
Dalam modus proxy, jumlah maksimum koneksi untuk setiap shard data adalah 10.000 untuk instans Redis Open-Source Edition dan 30.000 untuk instans Tair (Enterprise Edition).
Perintah blocking: BRPOP, BRPOPLPUSH, BLPOP, BZPOPMAX, BZPOPMIN, BLMOVE, BLMPOP, dan BZMPOP.
Perintah transaksi: MULTI, EXEC, dan WATCH.
Perintah MONITOR: MONITOR, IMONITOR, dan RIMONITOR.
Perintah subscription: SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, SSUBSCRIBE, dan SUNSUBSCRIBE.
FAQ
-
Bisakah saya meneruskan skrip Lua yang hanya melakukan operasi baca ke replika baca?
Ya, Anda dapat meneruskan skrip Lua yang hanya melakukan operasi baca ke replika baca. Namun, persyaratan berikut harus dipenuhi:
-
Akun read-only digunakan. Untuk informasi selengkapnya, lihat Buat dan kelola akun.
-
Parameter readonly_lua_route_ronode_enable diatur ke 1 untuk instans Tair Anda. Nilai 1 menunjukkan bahwa skrip Lua yang hanya melakukan operasi baca diarahkan ke replika baca. Untuk informasi selengkapnya, lihat Konfigurasi parameter instans.
-
T: Apa perbedaan antara modus proxy dan mode koneksi langsung? Mode mana yang direkomendasikan?
J: Kami merekomendasikan penggunaan modus proxy. Perbedaannya sebagai berikut:
Modus proxy: node proxy meneruskan permintaan klien ke shard data. Mode ini menyediakan fitur seperti load balancing, pemisahan baca/tulis, failover, proxy query cache, dan koneksi persisten.
Mode koneksi langsung: Anda dapat menggunakan titik akhir koneksi langsung untuk melewati node proxy dan terhubung langsung ke shard data backend. Ini mirip dengan menghubungkan ke kluster Redis native. Dibandingkan dengan modus proxy, mode koneksi langsung mengurangi overhead pemrosesan proxy dan meningkatkan latensi respons.
T: Bagaimana pembacaan dan penulisan data terpengaruh jika shard data backend menjadi tidak tersedia?
Setiap shard data menggunakan arsitektur master-replika dengan ketersediaan tinggi. Jika node master gagal, sistem secara otomatis melakukan failover untuk memastikan ketersediaan tinggi. Tabel berikut menjelaskan dampak kegagalan shard data terhadap pembacaan dan penulisan data dalam skenario ekstrem serta memberikan solusi optimasi.
Skenario
Dampak dan optimasi
Gambar 1. Perintah multi-kunci

Dampak:
Klien mengirim empat permintaan melalui empat koneksi. Jika shard data 2 tidak tersedia, hanya Permintaan 1 (GET Key1) yang berhasil membaca data. Permintaan yang diarahkan ke shard data 2 mengalami timeout.
Optimasi:
Kurangi penggunaan perintah multi-kunci, seperti MGET, atau kurangi jumlah kunci dalam satu permintaan. Hal ini mencegah seluruh permintaan gagal karena satu shard data yang tidak tersedia.
Kurangi penggunaan perintah transaksi atau perkecil ukuran transaksi. Hal ini mencegah kegagalan sub-transaksi menyebabkan seluruh transaksi gagal.
Gambar 2. Koneksi tunggal

Dampak:
Klien mengirim dua permintaan terpisah melalui satu koneksi. Jika shard data 2 tidak tersedia, Permintaan 2 (GET Key2) mengalami timeout. Karena Permintaan 1 (GET Key1) berbagi koneksi yang sama, permintaan tersebut juga gagal mengembalikan hasil.
Optimasi:
Hindari atau kurangi penggunaan pipeline.
Hindari penggunaan klien yang hanya mendukung satu koneksi. Kami merekomendasikan Anda menggunakan klien yang mendukung pooling koneksi. Untuk informasi selengkapnya, lihat Tutorial koneksi klien. Pastikan Anda mengonfigurasi timeout dan ukuran kolam koneksi yang wajar.