
Khi việc sử dụng Redis ngày càng tăng trong các hệ thống sản xuất, các nhóm cuối cùng sẽ phải đối mặt với một quyết định quan trọng về kiến trúc. Nên mở rộng quy mô Redis bằng Redis Sentinel hay Redis Cluster?
Quyết định này thường được đưa ra muộn và dưới áp lực, thường là sau khi xuất hiện các vấn đề về hiệu suất, cạn kiệt bộ nhớ hoặc sự cố về tính khả dụng. Thật không may, Redis Sentinel và Redis Cluster giải quyết các vấn đề rất khác nhau và việc chọn sai sẽ dẫn đến việc thiết kế lại khó khăn.
Redis Sentinel là về tính sẵn có. Redis Cluster là về khả năng mở rộng. Nhầm lẫn cả hai là một trong những lỗi phổ biến nhất trong kiến trúc Redis.
Vấn đề cốt lõi mà Redis Sentinel giải quyết
Redis Sentinel được thiết kế để cung cấp tính sẵn sàng cao cho một tập dữ liệu Redis.
Trách nhiệm chính của nó là:
-
Giám sát các nút chính và bản sao của Redis
-
Phát hiện lỗi
-
Thực hiện chuyển đổi dự phòng tự động
-
Cập nhật khách hàng về chủ mới
Redis Sentinel không phân mảnh dữ liệu. Vẫn còn chính xác một phiên bản Redis logic chứa tất cả các khóa.
Nếu bản gốc không thành công, Sentinel sẽ quảng cáo một bản sao. Từ góc độ ứng dụng, Redis tiếp tục hoạt động với mức độ gián đoạn tối thiểu.
Redis Sentinel hoạt động nội bộ như thế nào
Một thiết lập Redis Sentinel điển hình bao gồm:
-
Một bậc thầy Redis
-
Một hoặc nhiều bản sao Redis
-
Nhiều quy trình Sentinel giám sát chúng
Lính gác liên tục kiểm tra sức khỏe của chủ nhân. Khi số lượng Sentinels nhất trí rằng máy chủ không hoạt động, quá trình chuyển đổi dự phòng sẽ được kích hoạt.
Một bản sao được thăng cấp thành bản chính và các bản sao còn lại được cấu hình lại để tuân theo nó.
Điểm mấu chốt là dữ liệu vẫn giữ nguyên kích thước và hình dạng. Không có sự phân phối lại khóa.
Những gì Redis Sentinel không làm được
Redis Sentinel không:
-
Tăng dung lượng bộ nhớ vượt quá một nút
-
Tăng thông lượng ghi vượt quá một lõi
-
Phân chia hoặc phân phối dữ liệu
Nếu phiên bản Redis của bạn hết bộ nhớ hoặc CPU, việc thêm Sentinel sẽ không giúp ích gì. Sentinel giữ cho Redis có sẵn, không lớn hơn.
Cụm Redis giải quyết vấn đề cốt lõi
Redis Cluster giải quyết khả năng mở rộng chứ không chỉ tính khả dụng.
Nó giải quyết được:
-
Giới hạn bộ nhớ của một máy
-
Giới hạn thông lượng do thực thi đơn luồng gây ra
Redis Cluster phân chia dữ liệu trên nhiều nút chính. Mỗi chủ sở hữu một tập hợp con của không gian khóa.
Bản sao được sử dụng để đảm bảo tính khả dụng nhưng phân mảnh là tính năng xác định.
Cụm Redis hoạt động như thế nào ở mức cao
Redis Cluster chia không gian khóa thành 16.384 vùng băm.
Mỗi nút chính sở hữu một phần các vị trí này. Khóa được gán cho các vị trí dựa trên hàm băm.
Khi máy khách đưa ra lệnh, nó sẽ được chuyển đến nút chịu trách nhiệm về vị trí đó.
Nếu bản chính bị lỗi, một trong các bản sao của nó sẽ tự động được thăng cấp, tương tự như Sentinel, nhưng chỉ dành cho phân đoạn đó.
So sánh mô hình sẵn có
Redis Sentinel cung cấp:
-
Mỗi lần một chủ hoạt động
-
Tập dữ liệu đầy đủ trên một nút duy nhất
-
Tự động chuyển đổi dự phòng
Cụm Redis cung cấp:
-
Nhiều bậc thầy
-
Dữ liệu được phân phối trên các nút
-
Chuyển đổi dự phòng ở cấp độ phân đoạn
Sentinel bảo vệ khỏi lỗi nút. Cụm bảo vệ chống lại cả lỗi nút và giới hạn dung lượng.
Đặc điểm chia tỷ lệ
Redis Sentinel chia tỷ lệ theo chiều dọc.
Bạn có thể di chuyển Redis sang một máy lớn hơn, thêm nhiều bộ nhớ hơn hoặc sử dụng CPU nhanh hơn nhưng bạn vẫn đạt tới mức trần.
Cụm Redis chia tỷ lệ theo chiều ngang.
Bạn thêm các nút để tăng bộ nhớ và thông lượng. Mỗi nút chỉ xử lý một phần của tập dữ liệu.
Khi một nút Redis không còn đủ thì chỉ Sentinel thôi là không đủ.
Tác động của thiết kế ứng dụng
Redis Sentinel gần như minh bạch đối với các ứng dụng.
Các ứng dụng vẫn nghĩ rằng họ đang nói chuyện với một phiên bản Redis. Máy khách kết nối lại với máy chủ mới sau khi chuyển đổi dự phòng.
Redis Cluster yêu cầu các máy khách nhận biết cụm.
Ứng dụng phải:
-
Xử lý chuyển hướng
-
Tôn trọng ranh giới vùng băm
-
Tránh các thao tác nhiều phím không được hỗ trợ
Việc áp dụng cụm tác động đáng kể đến thiết kế chính và mô hình hóa dữ liệu.
Thao tác và giao dịch đa khóa
Với Redis Sentinel:
-
Tất cả các khóa đều tồn tại trên một khóa chính
-
Các thao tác đa phím hoạt động bình thường
-
Các giao dịch và tập lệnh Lua hoạt động như mong đợi
Với cụm Redis:
-
Khóa có thể tồn tại trên các nút khác nhau
-
Các thao tác nhiều phím chỉ hoạt động trong cùng một vùng băm
-
Hoạt động trên nhiều khe không thành công
Sự khác biệt duy nhất này thường là cú sốc lớn nhất đối với các nhóm chuyển sang Redis Cluster.
Độ phức tạp trong vận hành
Redis Sentinel giới thiệu độ phức tạp vận hành vừa phải.
Bạn quản lý:
-
Bản chính và bản sao
-
Số đại biểu trọng điểm
-
Hành vi chuyển đổi dự phòng
Redis Cluster có độ phức tạp cao hơn đáng kể.
Bạn quản lý:
-
Nhiều bản gốc và bản sao
-
Phân bổ và cân bằng vị trí
-
Hoạt động chia sẻ lại
-
Khả năng tương thích của máy khách
Cụm yêu cầu kỷ luật hoạt động mạnh mẽ hơn.
Khi Redis Sentinel là lựa chọn đúng đắn
Redis Sentinel phù hợp khi:
-
Tập dữ liệu vừa vặn thoải mái trên một máy
-
Thông lượng ghi phù hợp với một lõi duy nhất
-
Cần có tính sẵn sàng cao
-
Logic ứng dụng phụ thuộc vào thao tác nhiều phím
Nhiều hệ thống chạy thành công trong nhiều năm chỉ với Sentinel.
Khi cụm Redis là lựa chọn phù hợp
Redis Cluster phù hợp khi:
-
Yêu cầu bộ nhớ vượt quá một nút
-
Nhu cầu thông lượng tiếp tục tăng
-
Cần phải chia tỷ lệ theo chiều ngang
-
Các ứng dụng có thể được thiết kế để phân chia
Cụm là một chiến lược mở rộng quy mô, không chỉ là một cơ chế chuyển đổi dự phòng.
Các lỗi di chuyển phổ biến
Các đội thường xuyên:
-
Áp dụng Redis Cluster quá sớm
-
Giả sử Sentinel và Cluster có thể hoán đổi cho nhau
-
Bỏ qua những hàm ý thiết kế quan trọng
-
Khám phá những hạn chế của đa phím quá muộn
Những lỗi này thường dẫn đến việc tái cấu trúc vội vã.
Quy tắc quyết định đơn giản
Sử dụng Redis Sentinel khi:
-
Bạn muốn tính sẵn sàng cao mà không cần thay đổi mô hình dữ liệu của mình
Sử dụng Redis Cluster khi:
-
Bạn phải mở rộng quy mô Redis ra ngoài một máy
Nếu bạn chọn Cụm, hãy thiết kế nó sớm, ngay cả khi bạn không kích hoạt nó ngay lập tức.
Tóm tắt
Redis Sentinel và Redis Cluster là những công nghệ bổ sung nhằm giải quyết các áp lực hệ thống khác nhau. Sentinel đảm bảo tính liên tục của dịch vụ cho một tập dữ liệu. Cụm cho phép Redis mở rộng quy mô trên các máy. Việc chọn phương pháp tiếp cận chính xác phụ thuộc vào việc tính khả dụng hay khả năng mở rộng có phải là yếu tố thúc đẩy kiến trúc chính hay không.