Pada arsitektur kluster dan Pemisahan baca/tulis Tair (Redis OSS-compatible), server proxy (Proxy) menangani pengalihan permintaan, load balancing, dan failover untuk menyederhanakan logika sisi klien. Proxy juga mendukung fitur lanjutan seperti multiple databases (DBs) dan caching data hot spot. Pemahaman yang baik mengenai cara server proxy merutekan permintaan dan menangani perintah tertentu dapat membantu Anda merancang sistem bisnis yang lebih efisien.
Pengenalan proxy
Server proxy adalah komponen berarsitektur satu node dalam instans Tair. Proxy tidak mengonsumsi sumber daya dari shard data dan menerapkan load balancing serta failover melalui beberapa node proxy.
Fitur proxy | Deskripsi |
Konversi pola penggunaan instans kluster | Node proxy memungkinkan Anda menggunakan instans kluster dengan cara yang sama seperti menggunakan instans standar. Proxy mendukung operasi multi-key lintas slot untuk perintah seperti DEL, EXISTS, MGET, MSET, SDIFF, dan UNLINK. Untuk informasi selengkapnya, lihat Daftar perintah yang didukung dalam mode proxy. Ketika arsitektur standar tidak dapat mendukung pertumbuhan bisnis Anda, Anda dapat memigrasikan data dari arsitektur standar ke arsitektur kluster dengan proxy tanpa mengubah kode Anda. Hal ini secara signifikan mengurangi biaya transformasi bisnis. |
Load balancing dan routing | Proxy membuat koneksi persisten dengan shard data backend, menyeimbangkan beban, dan meneruskan permintaan. Untuk informasi selengkapnya tentang aturan pengalihan, lihat Metode routing node proxy. |
Kelola traffic node read-only | Proxy mendeteksi status node read-only secara real time. Ketika situasi berikut terjadi, proxy melakukan aksi kontrol trafik:
|
Setelah Anda mengaktifkan fitur proxy query cache (Proxy Query Cache), proxy menyimpan cache permintaan untuk hot keys dan responsnya. Ketika proxy menerima permintaan yang sama dalam periode validitas cache, proxy langsung mengembalikan hasil ke klien tanpa berinteraksi dengan shard data backend. Hal ini membantu mengurangi ketimpangan akses yang disebabkan oleh banyak permintaan baca untuk hot keys. Catatan Anda dapat mengatur query_cache_enabled parameter untuk mengaktifkan fitur ini, yang hanya didukung oleh instans Tair yang dioptimalkan untuk memori dan instans yang dioptimalkan untuk memori persisten. | |
Dukungan untuk multiple databases (DBs) | Dalam mode kluster, Redis native dan klien Kluster tidak mendukung multiple databases (DBs). Mereka hanya menggunakan database default Catatan Jika Anda menggunakan klien StackExchange.Redis, harap gunakan StackExchange.Redis 2.7.20 atau versi yang lebih baru. Jika tidak, akan terjadi error. Untuk informasi selengkapnya, lihat Pengumuman Peningkatan StackExchange.Redis. |
Karena evolusi proxy, jumlah proxy tidak secara langsung merepresentasikan kapasitas pemrosesannya. Alibaba Cloud memastikan bahwa rasio proxy dalam tipe instans kluster memenuhi persyaratan yang tercantum dalam deskripsi tipe instans.
Aturan routing proxy
Untuk informasi selengkapnya tentang perintah, lihat Ikhtisar perintah.
Arsitektur | Aturan routing | Deskripsi |
Arsitektur kluster | Aturan routing dasar |
|
Aturan routing perintah spesifik |
| |
Arsitektur Pemisahan baca/tulis | Aturan routing dasar |
|
Aturan routing perintah spesifik |
|
Proxy query cache
Node proxy dapat menyimpan cache permintaan yang berisi hot keys beserta hasil kuerinya. Saat menerima permintaan yang sama dalam periode validitas cache, proxy langsung mengembalikan hasil ke klien tanpa berinteraksi dengan shard data backend. Fitur ini dapat mengurangi atau mencegah ketimpangan kinerja akses akibat permintaan baca terhadap hot keys.
Hot key ini sama dengan hot key (QPS) dalam fitur Statistik Top Key. Hot key diidentifikasi oleh kernel database berdasarkan algoritma pengurutan dan statistik. Secara default, kunci dianggap hot jika permintaan per detik (QPS)-nya melebihi 5.000. Anda juga dapat menyesuaikan ambang batas ini menggunakan parameter
bigkey-threshold.Jika hot key dimodifikasi selama periode validitas cache, perubahan tersebut tidak disinkronkan ke cache. Artinya, permintaan selanjutnya mungkin membaca data kotor dari cache hingga cache kedaluwarsa. Untuk mengatasi hal ini, Anda dapat memperpendek periode validitas cache sesuai kebutuhan.
Node proxy tidak menyimpan cache seluruh hot key. Sebaliknya, mereka menyimpan cache permintaan yang berisi hot key beserta hasil kueri yang sesuai.
Fitur ini hanya tersedia untuk instans Tair optimasi memori dan optimasi memori persisten yang menggunakan mode proksi pada arsitektur kluster atau arsitektur Pemisahan baca/tulis.
Skenario
Fitur ini cocok untuk skenario seperti daftar pencarian teratas, profil pengguna populer, dan pengumuman game, di mana aplikasi dapat mentolerir data yang sedikit kedaluwarsa.
Arsitektur fitur
Cara menggunakan
Fitur ini dinonaktifkan secara default. Anda dapat mengatur parameter query_cache_enabled untuk mengaktifkannya.
Lihat petunjuk detail
Anda dapat menggunakan perintah khusus QUERYCACHE KEYS, QUERYCACHE INFO, dan QUERYCACHE LISTALL dari Tair untuk memantau penggunaan proxy query cache.
Lihat penggunaan
Penggunaan koneksi
Umumnya, proxy memproses permintaan dengan membuat koneksi persisten ke shard data. Namun, saat permintaan mencakup perintah tertentu, proxy membuat koneksi tambahan ke shard data yang sesuai berdasarkan kebutuhan pemrosesan perintah tersebut. Dalam kasus ini, koneksi tidak dapat diagregasi. Jumlah maksimum koneksi untuk instans dibatasi oleh satu shard data. Untuk informasi mengenai batas per shard, lihat spesifikasi tipe instans yang relevan. Gunakan perintah-perintah berikut secara bijak untuk menghindari melebihi batas koneksi.
Dalam mode proxy, instans Redis Community Edition memiliki batas koneksi 10.000 per shard data. (Edisi Perusahaan) memiliki batas koneksi 30.000 per shard data.
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 saja?
Ya, Anda dapat meneruskan skrip Lua yang hanya melakukan operasi baca ke replika baca saja, asalkan memenuhi persyaratan berikut:
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 akan dirutekan ke replika baca saja. Untuk informasi selengkapnya, lihat Konfigurasi parameter instans.
T: Apa perbedaan antara mode proxy dan mode koneksi langsung, serta mode mana yang direkomendasikan?
J: Mode proxy direkomendasikan. Berikut penjelasan dan perbandingannya:
Mode proxy: Permintaan klien diteruskan oleh node proxy ke shard data. Mode ini memungkinkan penggunaan fitur seperti load balancing, Pemisahan baca/tulis, failover, proxy query cache, dan koneksi persisten.
Mode koneksi langsung: Anda dapat melewati proxy dan langsung mengakses shard data backend menggunakan alamat koneksi langsung, mirip dengan menghubungkan ke kluster Redis native. Dibandingkan mode proxy, mode koneksi langsung menghemat waktu pemrosesan permintaan melalui proxy dan dapat meningkatkan kecepatan respons layanan Redis hingga batas tertentu.
T: Jika shard data backend menjadi abnormal, bagaimana dampaknya terhadap pembacaan dan penulisan data?
J: Shard data menggunakan arsitektur high-availability primary/secondary. Ketika node primary gagal, sistem secara otomatis melakukan failover primary/secondary untuk memastikan ketersediaan layanan yang tinggi. Dalam skenario langka di mana shard data menjadi abnormal, dampak terhadap data dan solusi optimasinya sebagai berikut.
Skenario
Dampak dan solusi optimasi
Gambar 1. Skenario perintah multi-key

Dampak:
Klien mengirim empat permintaan melalui empat koneksi. Saat shard data 2 abnormal, hanya permintaan 1 (GET Key1) yang dapat membaca data secara normal. Permintaan lain yang mengakses shard data 2 akan timeout.
Solusi optimasi:
Kurangi frekuensi penggunaan perintah multi-key seperti MGET, atau kurangi jumlah kunci dalam satu permintaan. Hal ini mencegah seluruh permintaan gagal karena satu shard data abnormal.
Kurangi frekuensi penggunaan perintah transaksi atau kurangi ukuran transaksi. Hal ini mencegah seluruh transaksi gagal karena sub-transaksi yang gagal.
Gambar 2. Skenario koneksi tunggal

Dampak:
Klien mengirim dua permintaan terpisah melalui satu koneksi. Saat shard data 2 abnormal, permintaan 2 (GET Key2) akan timeout. Karena permintaan 1 (GET Key1) dan permintaan 2 berbagi koneksi yang sama, permintaan 1 juga gagal mengembalikan hasil secara normal.
Solusi optimasi:
Hindari atau kurangi penggunaan pipeline.
Hindari menggunakan klien koneksi tunggal dan gunakan klien dengan kolam koneksi, seperti yang dijelaskan dalam Tutorial Koneksi Program Klien (Anda harus mengatur timeout dan ukuran kolam koneksi yang wajar).