Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Giới thiệu về Redis Cluster Sharding - Ưu điểm, Hạn chế, Triển khai &Kết nối máy khách

Redis Cluster là triển khai sharding gốc có sẵn trong Redis cho phép bạn tự động phân phối dữ liệu của mình trên nhiều nút mà không cần phải dựa vào các công cụ và tiện ích bên ngoài. Tại ScaleGrid, gần đây chúng tôi đã bổ sung hỗ trợ cho Redis ™ * Clusters trên nền tảng được quản lý hoàn toàn của chúng tôi thông qua dịch vụ lưu trữ dành cho các gói Redis ™. Trong bài đăng này, chúng tôi sẽ giới thiệu cho bạn các cơ hội nâng cao của Redis Cluster, thảo luận về những ưu điểm và hạn chế của nó, khi nào bạn nên triển khai và cách kết nối với Redis Cluster của bạn.

Làm sắc nét với Redis Cluster

Toàn bộ không gian phím trong Redis Clusters được chia thành 16384 vị trí (được gọi là vị trí băm) và các vị trí này được gán cho nhiều nút Redis. Một khóa nhất định được ánh xạ tới một trong các vị trí này và vị trí băm cho một khóa được tính là:

HASH_SLOT =CRC16 (key) mod 16384

Các thao tác đa phím được hỗ trợ trên Redis Cluster miễn là tất cả các phím liên quan đến việc thực thi một lệnh đều thuộc cùng một rãnh băm. Điều này có thể được đảm bảo bằng cách sử dụng khái niệm thẻ băm.

Đặc tả cụm Redis là hướng dẫn cuối cùng để hiểu nội dung bên trong của công nghệ, trong khi Hướng dẫn cụm Redis cung cấp hướng dẫn triển khai và quản trị.

Ưu điểm

Kiểm tra các ưu điểm hàng đầu của Redis Clusters để xem nó có thể mang lại lợi ích như thế nào cho việc triển khai của bạn:

  • Hiệu suất cao

    Redis Cluster hứa hẹn cùng một mức hiệu suất như các triển khai Redis độc lập.

  • Tính khả dụng cao

    Redis Cluster hỗ trợ cấu hình Redis master-replica tiêu chuẩn để đảm bảo tính khả dụng và độ bền cao. Nó cũng triển khai phương pháp đồng thuận giống như Raft để đảm bảo tính khả dụng của toàn bộ cụm.

  • Khả năng mở rộng theo chiều ngang &chiều dọc

    Việc thêm hoặc xóa các nút Redis mới khỏi Cụm có thể diễn ra một cách minh bạch và không có bất kỳ thời gian chết nào. Điều này giúp việc thêm và xóa các phân đoạn, gỡ bỏ hoặc chia tỷ lệ các nút riêng lẻ trở nên dễ dàng.

  • Giải pháp gốc

    Việc triển khai Redis Clusters không yêu cầu proxy hoặc công cụ bên ngoài, vì vậy bạn không cần phải tìm hiểu hoặc lo lắng về công cụ mới nào. Nó cũng cung cấp khả năng tương thích gần như hoàn toàn với các triển khai Redis độc lập.

Hạn chế

Cũng hãy lưu ý những hạn chế để đảm bảo nó phù hợp cho việc triển khai của bạn:

  • Yêu cầu Hỗ trợ Khách hàng

    Khách hàng cần thực hiện các thay đổi để hỗ trợ Redis Clusters. Mặc dù Redis Clusters đã tồn tại được nhiều năm nhưng vẫn có những khách hàng không ủng hộ nó. Tham khảo tài liệu về ứng dụng Redis để đảm bảo ứng dụng mà bạn sử dụng được hỗ trợ trước khi chọn triển khai Redis Cluster.

  • Hỗ trợ thao tác nhiều phím có giới hạn

    Như đã đề cập trong phần trước, các thao tác đa phím chỉ được hỗ trợ khi tất cả các phím trong một thao tác duy nhất thuộc cùng một khe. Đây là điều cần cẩn thận khi thiết kế cấu trúc dữ liệu của bạn.

  • Chỉ hỗ trợ một cơ sở dữ liệu

    Không giống như cơ sở dữ liệu độc lập, Redis Clusters chỉ hỗ trợ một cơ sở dữ liệu (cơ sở dữ liệu 0) và lệnh SELECT không được phép. Vì hầu hết mọi người không sử dụng nhiều cơ sở dữ liệu nên đây cũng không phải là hạn chế lớn.

Khi nào bạn nên triển khai một cụm Redis?

Giải pháp Redis Cluster có thể phù hợp với bạn nếu bạn cần một giải pháp Redis phân đoạn. Redis Cluster là một giải pháp gốc đơn giản và mang lại hiệu suất tuyệt vời.

Thông thường, mọi người bắt đầu xem xét việc triển khai Redis của họ một cách sắc nét khi họ bắt đầu bão hòa một nút Redis độc lập bằng các lần ghi và muốn trải các lần ghi ra nhiều nút. Mặc dù Redis chủ yếu là một luồng đơn, I / O thường trở thành mạng hoặc bộ nhớ bị ràng buộc độc lập trước khi nó có thể bắt đầu bão hòa CPU. Giới hạn bộ nhớ có thể được khắc phục ở một mức độ nào đó bằng cách chọn thêm nhiều bộ nhớ hơn vào một hệ thống độc lập, nhưng nó bắt đầu trở nên nghiêm trọng về chi phí, thời gian sao lưu, khởi động lại, khởi động, v.v. vượt quá một điểm nhất định.

Mặt khác, nếu bạn chỉ muốn phân bổ số lượng đã đọc của mình trên nhiều nút, thì việc thêm các bản sao đã đọc vào độc lập sẽ dễ dàng hơn nhiều.

Khi so sánh với các giải pháp làm sắc nét khác cho Redis, việc tái cân bằng phân đoạn trong Redis Clusters là minh bạch đối với các ứng dụng. Điều này giúp bạn dễ dàng thêm hoặc xóa các phân đoạn mà không ảnh hưởng đến ứng dụng.

Giới thiệu về #Redis Cluster Sharding - Ưu điểm, Hạn chế, Khi nào Triển khai và Kết nối Máy khách Nhấp để Tweet

Kết nối với Redis Cluster

Nếu bạn chọn triển khai Redis ™ Cluster với ScaleGrid, bạn sẽ nhận được triển khai Redis Cluster đầy đủ tính năng hoàn toàn tương thích với bản phát hành tiêu chuẩn.

Nếu bạn mới bắt đầu, hãy đăng ký bản dùng thử miễn phí 30 ngày trên bảng điều khiển ScaleGrid và xem tài liệu này về cách tạo ScaleGrid đầu tiên của bạn để triển khai Redis ™.

Đây là những gì bạn cần để kết nối với Redis ™ Cluster tại ScaleGrid:

  • Danh sách các tên nút
  • Cổng
  • Chuỗi xác thực

Tab Tổng quan trên trang chi tiết triển khai Redis ™ của bạn có danh sách các bản gốc của mỗi phân đoạn, cùng với số cổng và thông tin xác thực:

Ngoài ra, danh sách tất cả các nút của cụm có sẵn trên tab Máy:

Như bạn có thể nhận thấy, không có nhiều ví dụ hướng dẫn bạn cách kết nối với Cụm Redis ™ hỗ trợ xác thực có sẵn trực tuyến, đây là một vài ví dụ sử dụng một số các khách hàng phổ biến.

Kết nối với Java

Trong số các ứng dụng khách Redis Java phổ biến, Jedis và Diếp cá hỗ trợ Redis ™ Cluster. Chúng tôi sẽ lấy Jedis làm ví dụ.

Jedis

Kết nối Cụm Redis ™ được tóm tắt bởi JedisCluster lớp. Có thể tìm thấy các ví dụ tốt nhất về việc sử dụng lớp này để kết nối với Redis ™ Clusters trong các bài kiểm tra của Jedis, mã nguồn của Jedis. Rất tiếc tại thời điểm này, khi xác thực được chỉ định, JedisCluster constructor không phải là rất sạch sẽ. Đây là một ví dụ ghi 100 phím vào Redis ™ Cluster. Lưu ý rằng vì các khóa không được gắn thẻ, chúng sẽ kết thúc ở các vị trí khác nhau trên các nút khác nhau:

...
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();
    }
}

Các đối số của hàm tạo được ghi lại trong tài liệu API của Jedis. Chúng tôi khuyên bạn nên chỉ định tất cả các nút của cụm trong quá trình tạo cụm với Jedis.

Kết nối với Ruby

Ứng dụng khách Redis phổ biến nhất trong Ruby là redis-rb. Nó cũng hỗ trợ Redis ™ Clusters, vì vậy chúng tôi sẽ sử dụng nó trong ví dụ của mình.

Redis-rb

redis-rb phiên bản 4.1.0 trở lên có hỗ trợ Redis ™ Clusters. 'cluster' tùy chọn cần được chỉ định trong quá trình khởi tạo kết nối và bạn có thể tham khảo tài liệu này để biết ngữ nghĩa chính xác. Đây là chương trình tương tự như ví dụ Java ở trên trong 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

Kết nối với Node.js

Node_redis là ứng dụng Redis phổ biến nhất trong Node.js. Tuy nhiên, nó chưa chính thức hỗ trợ Redis ™ Clusters. ioredis là một ứng dụng khách Redis phổ biến khác có hỗ trợ Redis ™ Clusters, vì vậy chúng tôi sẽ sử dụng ứng dụng này cho ví dụ Node.js của chúng tôi.

ioredis

Tài liệu ioredis mô tả chi tiết về các tham số bổ sung phải được chuyển để kết nối với Redis ™ Cluster và một ví dụ cơ bản cũng được cung cấp trong README. Đây là một chương trình ví dụ nhắc người dùng nhập một khóa và đọc giá trị của nó từ 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);
});

Bạn có thể thực thi bất kỳ ví dụ nào trong số này sau khi cài đặt phiên bản mới nhất của trình điều khiển Redis trên máy khách của mình.

Nếu bạn đã sẵn sàng chuyển các triển khai Redis của mình sang nền tảng được quản lý hoàn toàn của ScaleGrid để lưu trữ cho Redis ™, hãy xem các tính năng tuyệt vời có sẵn trên bảng điều khiển ScaleGrid thông qua bản dùng thử miễn phí 30 ngày. Dịch vụ lưu trữ AWS dành cho các gói Redis ™ của chúng tôi có sẵn trên 14 trung tâm dữ liệu khác nhau trên toàn thế giới và chúng tôi là dịch vụ duy nhất dành cho Redis ™ cho phép bạn quản lý việc triển khai trong tài khoản đám mây của riêng bạn.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. tắt máy chủ redis từ dòng lệnh

  2. Redis băm tốc độ ghi rất chậm

  3. Làm cách nào để đặt một cụm redis co giãn làm nô lệ?

  4. Celery cố gắng kết nối với người môi giới sai

  5. Khi bắt đầu hoa, tôi nhận được như sau:dbm.error:loại db là dbm.gnu, nhưng mô-đun không khả dụng