Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Pengantar Redis Cluster Sharding – Keuntungan, Keterbatasan, Penerapan &Koneksi Klien

Kluster Redis adalah implementasi sharding asli yang tersedia dalam Redis yang memungkinkan Anda mendistribusikan data secara otomatis ke beberapa node tanpa harus bergantung pada alat dan utilitas eksternal. Di ScaleGrid, kami baru-baru ini menambahkan dukungan untuk Cluster Redis™* pada platform kami yang terkelola sepenuhnya melalui hosting untuk paket Redis™ kami. Dalam postingan ini, kami akan memperkenalkan Anda pada peluang sharding Redis Cluster lanjutan, membahas keuntungan dan keterbatasannya, kapan Anda harus menerapkan, dan cara terhubung ke Redis Cluster Anda.

Sharding dengan Redis Cluster

Seluruh ruang kunci di Redis Clusters dibagi dalam 16384 slot (disebut slot hash) dan slot ini ditetapkan ke beberapa node Redis. Kunci yang diberikan dipetakan ke salah satu slot ini, dan slot hash untuk kunci dihitung sebagai:

HASH_SLOT =CRC16(kunci) mod 16384

Operasi multi-kunci didukung di Redis Clusters selama semua kunci yang terlibat dalam satu eksekusi perintah milik slot hash yang sama. Ini dapat dipastikan dengan menggunakan konsep tag hash.

Spesifikasi Redis Cluster adalah panduan pasti untuk memahami internal teknologi, sedangkan Redis Cluster Tutorial memberikan panduan penerapan dan administrasi.

Keuntungan

Lihat keunggulan utama Redis Clusters untuk melihat bagaimana hal itu dapat menguntungkan penerapan Anda:

  • Kinerja Tinggi

    Redis Cluster menjanjikan tingkat kinerja yang sama dengan penerapan Redis mandiri.

  • Ketersediaan Tinggi

    Redis Cluster mendukung konfigurasi replika master Redis standar untuk memastikan ketersediaan dan ketahanan yang tinggi. Ini juga menerapkan pendekatan konsensus seperti Rakit untuk memastikan ketersediaan seluruh cluster.

  • Skalabilitas Horisontal &Vertikal

    Menambah atau menghapus node Redis baru dari Cluster dapat terjadi secara transparan dan tanpa downtime. Hal ini membuat penambahan dan penghapusan shard, penghentian, atau penskalaan setiap node menjadi mudah.

  • Solusi Asli

    Menyebarkan Redis Cluster tidak memerlukan proxy atau alat eksternal, jadi tidak ada alat baru yang perlu Anda pelajari atau khawatirkan. Ini juga menyediakan kompatibilitas yang hampir lengkap dengan penerapan Redis mandiri.

Batasan

Perhatikan juga batasan untuk memastikannya tepat untuk penerapan Anda:

  • Memerlukan Dukungan Klien

    Klien perlu membuat perubahan untuk mendukung Redis Clusters. Sementara Redis Cluster telah ada selama bertahun-tahun sekarang, masih ada klien yang tidak mendukungnya. Lihat dokumentasi klien Redis untuk memastikan klien yang Anda gunakan didukung sebelum memilih untuk menerapkan Cluster Redis.

  • Dukungan Operasi Multi-Tombol Terbatas

    Seperti disebutkan di bagian sebelumnya, operasi multi-kunci hanya didukung ketika semua kunci dalam satu operasi dimiliki oleh slot yang sama. Ini adalah sesuatu yang harus diperhatikan saat mendesain struktur data Anda.

  • Hanya Mendukung Satu Basis Data

    Tidak seperti database mandiri, Redis Clusters hanya mendukung satu database (database 0), dan perintah SELECT tidak diperbolehkan. Karena kebanyakan orang tidak menggunakan banyak database, ini juga bukan batasan utama.

Kapan Anda Harus Menerapkan Cluster Redis?

Solusi Redis Cluster bisa sangat cocok untuk Anda jika Anda membutuhkan solusi Redis sharded. Redis Cluster adalah solusi asli yang sederhana dan menawarkan kinerja luar biasa.

Biasanya, orang mulai melihat sharding penerapan Redis mereka saat mereka mulai memenuhi node Redis mandiri dengan penulisan dan ingin menyebarkan tulisan ke beberapa node. Meskipun Redis terutama berulir tunggal, I/O biasanya menjadi jaringan atau memori yang terikat secara mandiri sebelum dapat mulai memenuhi CPU. Memori terikat dapat diatasi sampai batas tertentu dengan memilih untuk menambahkan lebih banyak memori ke sistem mandiri, tetapi mulai menjadi penghalang dalam hal biaya, pencadangan, restart, waktu pemanasan, dll di luar titik tertentu.

Di sisi lain, jika Anda hanya ingin menyebarkan bacaan Anda ke beberapa node, jauh lebih mudah untuk menambahkan replika baca ke standalone.

Jika dibandingkan dengan solusi sharding lainnya untuk Redis, penyeimbangan ulang shard di Redis Clusters transparan untuk aplikasi. Ini membuatnya sangat mudah untuk menambah atau menghapus pecahan tanpa mempengaruhi aplikasi.

Pengantar #Redis Cluster Sharding – Keuntungan, Batasan, Kapan Menyebarkan, dan Koneksi KlienKlik Untuk Tweet

Menghubungkan ke Redis Cluster

Jika Anda memilih untuk menerapkan Redis™ Cluster dengan ScaleGrid, Anda mendapatkan penerapan Redis Cluster berfitur lengkap yang sepenuhnya kompatibel dengan rilis standar.

Jika Anda baru memulai, daftarkan uji coba gratis selama 30 hari di konsol ScaleGrid, dan lihat dokumentasi ini tentang membuat penerapan ScaleGrid for Redis™ pertama Anda.

Inilah yang Anda butuhkan untuk terhubung ke Redis™ Cluster di ScaleGrid:

  • Daftar nama simpul
  • Pelabuhan
  • String otentikasi

Tab Ikhtisar pada halaman detail penerapan Redis™ Anda memiliki daftar master setiap pecahan, bersama dengan nomor port dan informasi autentikasi:

Atau, daftar semua node cluster tersedia di tab Machines:

Seperti yang mungkin telah Anda perhatikan, tidak banyak contoh yang tersedia yang menunjukkan kepada Anda cara menghubungkan ke Redis™ Cluster berkemampuan autentikasi yang tersedia secara online, berikut adalah beberapa contoh menggunakan beberapa klien populer.

Terhubung Dengan Java

Di antara klien Redis Java yang populer, Jedis dan Selada mendukung Redis™ Cluster. Kami akan mengambil Jedis sebagai contoh.

Jedi

Koneksi Redis™ Cluster diabstraksi oleh JedisCluster kelas. Contoh terbaik penggunaan kelas ini untuk terhubung ke Redis™ Clusters dapat ditemukan di pengujian Jedis, kode sumber Jedis. Sayangnya saat ini, ketika otentikasi ditentukan, JedisCluster konstruktor tidak terlalu bersih. Berikut adalah contoh yang menulis 100 kunci ke Redis™ Cluster. Perhatikan bahwa karena kunci tidak diberi tag, kunci tersebut akan berakhir di slot yang berbeda pada node yang berbeda:

...
import java.util.HashSet;
import java.util.Set;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
...

public class RedisClusterModeTest {
    public static final int    DEFAULT_TIMEOUT      = 5000;
    public static final int    DEFAULT_REDIRECTIONS = 5;

    public static void main(String[] args) {
        Set jedisClusterNodes = new HashSet();
        jedisClusterNodes.add(new HostAndPort("SG-example-1.servers.scalegrid.io, 6379));
        jedisClusterNodes.add(new HostAndPort("SG-example-2.servers.scalegrid.io", 6379));
        jedisClusterNodes.add(new HostAndPort("SG-example-3.servers.scalegrid.io", 6379));
        jedisClusterNodes.add(new HostAndPort("SG-example-4.servers.scalegrid.io", 6379));
        jedisClusterNodes.add(new HostAndPort("SG-example-5.servers.scalegrid.io", 6379));
        jedisClusterNodes.add(new HostAndPort("SG-example-6.servers.scalegrid.io", 6379));

        JedisCluster jedis = new JedisCluster(jedisClusterNodes, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT, DEFAULT_REDIRECTIONS, <auth>, new JedisPoolConfig());
        for (int i = 0; i < 100; i++) {
            jedis.set("key" + i, "value" + i);
        }
        jedis.close();
    }
}

Argumen ke konstruktor didokumentasikan dalam dokumen Jedis API. Kami menyarankan Anda untuk menentukan semua node cluster selama pembuatan cluster dengan Jedis.

Terhubung Dengan Ruby

Klien Redis paling populer di Ruby adalah redis-rb. Ini juga mendukung Redis™ Clusters jadi kami akan menggunakannya dalam contoh kami.

Redis-rb

redis-rb versi 4.1.0 dan yang lebih baru memiliki dukungan untuk Redis™ Clusters. 'cluster' opsi perlu ditentukan selama inisialisasi koneksi, dan Anda dapat merujuk ke dokumentasi ini untuk semantik yang tepat. Berikut program yang sama dengan contoh Java di atas di Ruby:

require 'redis'
require 'pp'

NODES = ["redis://SG-example-1.servers.scalegrid.io:6379",
         "redis://SG-example-2.servers.scalegrid.io:6379",
         "redis://SG-example-3.servers.scalegrid.io:6379",
         "redis://SG-example-4.servers.scalegrid.io:6379",
         "redis://SG-example-5.servers.scalegrid.io:6379",
         "redis://SG-example-6.servers.scalegrid.io:6379"]
begin
    pp "Attempting connection..."
    redis = Redis.new(cluster: NODES, password: <auth>)
    100.times { |i| redis.set("key#{i}", "value#{i}") }
    pp "Done..."
    redis.close
rescue StandardError => e
    puts e.message
end

Terhubung Dengan Node.js

Node_redis adalah klien Redis paling populer di Node.js. Namun, itu belum secara resmi mendukung Redis™ Clusters. ioredis adalah klien Redis populer lainnya yang memiliki dukungan Redis™ Clusters, jadi kami akan menggunakan ini untuk contoh Node.js kami.

ioredis

Dokumentasi ioredis menjelaskan detail parameter tambahan yang harus diteruskan untuk menghubungkan ke Redis™ Clusters, dan contoh dasar juga disediakan di README. Berikut adalah contoh program yang meminta pengguna untuk memasukkan kunci dan membaca nilainya dari Redis™ Cluster:

const readline = require('readline');
const Redis = require('ioredis');

var cluster = new Redis.Cluster([{
    port: 6379,
    host: 'SG-example-1.servers.scalegrid.io'
},
{
    port: 6379,
    host: 'SG-example-2.servers.scalegrid.io'
},
{
    port: 6379,
    host: 'SG-example-3.servers.scalegrid.io'
},
{
    port: 6379,
    host: 'SG-example-4.servers.scalegrid.io'
},
{
    port: 6379,
    host: 'SG-example-5.servers.scalegrid.io'
},
{
    port: 6379,
    host: 'SG-example-6.servers.scalegrid.io'
}
], { redisOptions: { password: '<auth>' } });

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    prompt: 'enter key> '
});

console.log('Welcome to the Redis Cluster reader. Enter the key which you want to read [Ctrl D to Exit]');
rl.prompt();
rl.on('line', (line) => {
    if (line.trim()) {
        cluster.get(line, function (err, result) {
            if (err) {
                console.error(err);
            } else {
                console.log("value: " + result);
            }
            rl.prompt();
        });
    } else {
        console.error("No input received");
        rl.prompt();
    }
}).on('close', () => {
    console.log('\nterminating');
    cluster.quit();
    process.exit(0);
});

Anda seharusnya dapat menjalankan salah satu contoh berikut setelah menginstal versi terbaru driver Redis pada mesin klien Anda.

Jika Anda siap untuk memigrasikan penerapan Redis ke platform ScaleGrid yang terkelola sepenuhnya untuk hosting Redis™, lihat fitur luar biasa yang tersedia di konsol ScaleGrid melalui uji coba gratis selama 30 hari. Paket AWS hosting untuk Redis™ kami tersedia di 14 pusat data berbeda di seluruh dunia, dan kami adalah satu-satunya layanan untuk Redis™ yang memungkinkan Anda mengelola penerapan dalam akun cloud Anda sendiri.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Apakah ada alternatif Java yang dapat disematkan untuk Redis?

  2. Bagaimana Menerapkan Transaksi Terdistribusi Di Mysql, Redis, dan Mongo

  3. Apa strategi cache default saat menggunakan Redis dengan spring atau spring boot?

  4. Redis mengikat lebih dari satu IP

  5. Laravel - Caching Fasih dengan Pembaruan yang Sering