Redis Sentinel vs Cluster. Chúng ta sẽ cùng tìm hiểu mô hình của chúng để có lựa chọn phù hợp.

Redis Sentinel cung cấp tính khả dụng cao cho Redis. Chúng ta có thể tạo ra một triển khai Redis Setinel tự động failover mà không cần sự can thiệp của con người.

Redis Cluster cung cấp một triển khai trong đó dữ liệu được tự động chia cắt (sharding) trên nhiều node Redis. Ứng dụng vẫn có khả năng tiếp tục hoạt động khi một số node thất bại hoặc không thể giao tiếp.

Redis Sentinel

Nếu ứng dụng của chúng ta phụ thuộc vào một Redis server duy nhất, nếu redis server này gặp sự cố hoặc lỗi kết nối do mạng chập chờn thì trường hợp nãy ứng dụng của chúng ta sẽ bị lỗi hoặc trường hợp xấu nhất là mất dữ liệu trên redis server.

Để giải quyết vấn đề này, chúng ta có thể cấu hình thêm redis slave node để sao chép dữ liệu từ redis master node, sau đó ứng dụng sẽ đọc dữ liệu từ redis slave node cho đến khi redis master node được khôi phục. Mặc dù đây là một giải pháp nhưng có một giải pháp đáng tin cậy hơn để làm điều này đó là sử dụng Redis Sentinel.

Redis Sentinel là một hệ thống được thiết kế để giúp quản lý các Redis server. Mục đích chính của việc sử dụng Sentinel là cung cấp một hệ thống có tính khả dụng cao bằng cách giám sát, thông báo và cung cấp khả năng chuyển đổi dự phòng. Sentinel thực hiện ba nhiệm vụ sau:

  • Monitor (Giám sát): Các Sentinel sẽ thường xuyên kiểm tra xem các redis master và redis slave có đang hoạt động như mong đợi.
  • Notification (Thông báo): Các Sentinel sẽ thông báo cho các Redis Sentinel khác khi giám sát thấy có điều gì đó không ổn đối với các redis server.
  • Automatic Failover (Chuyển đổi dự phòng tự động): Nếu redis master node có vấn đề (ví dụ down), các Sentinel sẽ thống nhất và bầu một redis slave node lên làm redis master.
    Chi tiết về HA với Redis Sentinel tại đây.

Đối với mô hình Redis Sentinel cần ít nhất 3 redis server (ví dụ 1 redis server đóng vai trò là master, 2 redis slave đóng vai trò là slave). Tương ứng với 3 redis server này sẽ có 3 sentinel giám sát. Các Redis sentinel này có thể chạy ở 3 node khác hoăc cùng node với redis server.

Redis Cluster

Redis Cluster là một giải pháp phân chia dữ liệu với các tính năng quản lý tự động, chuyển đổi dự phòng và nhân bản. Shard Data là một phương pháp để chia cơ sở dữ liệu lớn (DB) thành các phần nhỏ hơn, nó rẻ hơn vì có thể dể dàng mở rộng được theo theo chiều ngang bằng cách thêm nhiều node vào cụm thay vì mở rộng theo chiều dọc bằng cách thêm cấu hình máy chủ mạnh hơn.

Nói chung, chế độ cluster cung cấp tính khả dụng cao tương tự với chế độ Sentinel nhưng Sharding cho phép lưu trữ nhiều dữ liệu hơn trong cụm. Redis cluster cải thiện hiệu suất và khả năng mở rộng của ứng dụng của chúng ta khi dữ liệu tiếp tục tăng.

Redis Sentinel vs Redis Cluster

Architecture

Redis Cluster không có kiến trúc trung tâm. Nó tự động chia dữ liệu giữa các node khác nhau. Ngoài ra, chúng ta cần tối thiểu 3 master node và 3 slave node (6 node). Đối với Redis Sentinel, có thể xây dựng một triển khai Sentinel đầy đủ chức năng chỉ bằng 3 node.

Availability

Redis Sentinel cung cấp khả năng sẵn sàng rất cao mà không cần sự can thiệp của con người. Ngoài ra, với mô hình redis sentinel nếu tất cả các slave node chết nó vẫn tồn tại chỉ với một master node đang hoạt động. Mặt khác, Redis Cluster không cung cấp khả năng sẵn sàng cao được như vậy. Nếu hầu hết các master node chết thì cụm redis cluster sẽ không hoạt động.

Scalability

Đối với Redis cluster chúng ta có thể dễ dàng thêm hoặc xóa các node trong cụm. Redis Cluster cho phép chúng ta thêm hoặc xóa các node một cách linh hoạt. Ngoài ra, nó hỗ trợ tới một nghìn node trong hệ thống.

Ngược lại, Redis Sentinel không thể mở rộng. Các yêu cầu sẽ được điều hướng tới master node. Do đó, nó không thể giải quyết vấn đề phân tách đọc-viết.

Data Sharding

Trong mô hình Redis cluster, Sharding là quá trình chia dữ liệu thành các khối hoặc mảnh nhỏ hơn. Với cơ sở dữ liệu Sharding, chúng ta có khả năng chia dữ liệu cùng nằm trên một máy họăc nhiều máy. Nó chỉ là một kỹ thuật tối ưu hóa cho phép chúng ta chia dữ liệu của mình thành các phần nhỏ hơn. Do đó, chúng ta có được hiệu suất tốt hơn và lưu trữ dữ liệu nhiều hơn.

Redis Sentinel không có khả năng này.

Replication

Cả Redis Cluster và Redis Sentinel đều cho phép sao chép dữ liệu, nhưng cả hai đều có vấn đề của họ. Redis Cluster chỉ có thể sao chép từ master node sang slave node của nó.

Redis Sentinel cho phép sao chép dữ liệu tới nhiều slave node từ một master node.

Tuy nhiên, cả Redis Cluster và Redis Sentinel sao chép không đồng bộ dữ liệu, vì vậy ta cần thỏa hiệp với tính nhất quán dữ liệu.

Lời kết

Cả hai cung cấp tính khả dụng cao cho hệ thống.

Khi tốc độ không phải là mối quan tâm chính của chúng ta, chúng ta nên sử dụng Sentinel, đây là một lựa chọn tuyệt vời cho các triển khai nhỏ (về mặt dữ liệu và lượng request truy cập) với những lo ngại về tính khả dụng cao.

Mặt khác, Redis Cluster cung cấp tính khả dụng cao cộng với một giải pháp phân cụm. Đây là một lựa chọn hoàn hảo để đảm bảo tính khả dụng cao trong khi vẫn giữ tốc độ truy cập nhanh để truy cập dữ liệu (vì dữ liệu được dàn trải ở nhiều node nên lượng dữ liệu ở mỗi node sẽ nhỏ hơn tập trung ở 1 node, vì vậy mà truy cập dữ liệu sẽ nhanh hơn).

Nếu chúng ta cần một giải pháp chuyển đổi dự phòng tự động mà không cần đến một giải pháp cụm hoàn chỉnh, hãy sử dụng Sentinel. Để có được một giải pháp cụm hoàn chỉnh chia cơ sở dữ liệu của chúng ta giữa nhiều node, thì chúng ta nên sử dụng Redis Cluster.

Nguồn: