Redis Sharding

Redis Sharding



Khi bạn lần đầu tiên bắt đầu sử dụng Redis, thật dễ dàng để tin rằng bạn sẽ không bao giờ cần mở rộng nó ra ngoài các cài đặt mặc định. Vấn đề là khi ứng dụng của bạn phát triển, cuối cùng bạn sẽ cần thêm bộ nhớ, CPU và khả năng thông lượng để hỗ trợ nhu cầu kinh doanh của mình. Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách cụm Redis mở rộng quy mô với sharding để cung cấp cho bạn khả năng bổ sung cần thiết để vận hành doanh nghiệp của mình suôn sẻ và phát triển trong tương lai. Chúng ta sẽ tìm hiểu cụ thể cách cụm Redis cung cấp thông lượng cao với sharding.

khả năng mở rộng

Có hai cách phổ biến để mở rộng quy mô máy chủ: chia tỷ lệ theo chiều dọc và chia tỷ lệ theo chiều ngang. Mở rộng quy mô hoặc mở rộng quy mô theo chiều dọc là nơi bạn bổ sung thêm sức mạnh và tài nguyên cho máy chủ của mình, chẳng hạn như nhiều CPU, bộ nhớ và bộ lưu trữ hơn, điều này rất tốn kém. Mặt khác, chia tỷ lệ theo chiều ngang là thêm nhiều nút vào nhóm tài nguyên hiện có của bạn. Điều này được gọi là mở rộng quy mô. Vì vậy, dựa trên các giới hạn và yêu cầu của bạn, bạn có thể có một phiên bản máy chủ lớn hơn hoặc triển khai nhiều nút máy chủ.

Giả sử bạn có 100 GB RAM và cần lưu trữ 200 GB dữ liệu. Trong trường hợp này, bạn có hai lựa chọn:







  • Mở rộng quy mô bằng cách bổ sung thêm RAM cho hệ thống
  • Mở rộng quy mô bằng cách thêm một phiên bản máy chủ khác có 100 GB RAM

Nếu bạn đã đạt đến giới hạn RAM tối đa trong cơ sở hạ tầng của mình thì mở rộng quy mô là phương pháp lý tưởng. Ngoài ra, việc mở rộng quy mô sẽ tăng thông lượng cơ sở dữ liệu lên một mức rất lớn.





Redis Sharding

Một thực tế đã biết là Redis hoạt động trên một luồng duy nhất. Vì vậy, Redis không có khả năng sử dụng nhiều lõi CPU của máy chủ của bạn để xử lý các lệnh. Do đó, việc thêm nhiều lõi CPU không mang lại cho bạn nhiều thông lượng hoặc hiệu suất với Redis. Đây không phải là trường hợp chia tách dữ liệu của bạn giữa nhiều phiên bản máy chủ. Việc thêm một số máy chủ và phân phối tập dữ liệu giữa các máy chủ đó cho phép xử lý song song các yêu cầu của máy khách, giúp tăng thông lượng. Ngoài ra, hiệu suất tổng thể có thể tăng gần tuyến tính.





Cách tiếp cận chia tách hoặc phân phối dữ liệu giữa nhiều máy chủ có lưu ý đến quy mô này được gọi là sharding . Tất cả các máy chủ lưu trữ các phần dữ liệu được gọi là mảnh vỡ .



Quá trình Sharding được thực hiện như thế nào — Sharding thuật toán

Một trong những mối quan tâm chính với sharding là làm thế nào để định vị một khóa nhất định trong số nhiều nút Redis. Vì một khóa nhất định có thể được lưu trữ trong bất kỳ phân đoạn có sẵn nào nên việc truy vấn tất cả các phân đoạn để tìm một khóa cụ thể không phải là lựa chọn tốt nhất. Vì vậy, cần có một cách để ánh xạ từng khóa tới một phân đoạn cụ thể và Redis sử dụng chiến lược phân đoạn thuật toán.

Cách tiếp cận phổ biến nhất là tính giá trị băm bằng cách sử dụng tên khóa Redis và modulo. Sau đó, chia nó cho các phân đoạn Redis có sẵn trong hệ thống.

HASH_SLOT = CRC16(phím) mod 16384

Đó là một giải pháp khá tốt miễn là tổng số phân đoạn không đổi. Bất cứ khi nào bạn thêm một phiên bản máy chủ Reids mới, giá trị kết quả cho một khóa nhất định có thể thay đổi do tổng số phân đoạn đã tăng lên. Nó sẽ kết thúc việc truy vấn sai phân đoạn Redis. Do đó, bạn nên tuân theo quy trình chia lại phân đoạn bằng cách tính toán phân đoạn mới cho mỗi khóa và truyền dữ liệu đến đúng máy chủ, đây là một nhiệm vụ cồng kềnh và không hề nhỏ nếu tổng số phân đoạn của bạn thỉnh thoảng tăng lên.

Redis sử dụng một thực thể logic mới được gọi là khe băm để ngăn chặn vấn đề này. Một số vị trí băm có sẵn cho một phân đoạn nhất định và một vị trí băm duy nhất có thể chứa nhiều khóa Redis. Có 16384 vị trí băm trong cụm cơ sở dữ liệu Redis không thay đổi. Việc phân chia modulo được thực hiện với số lượng vị trí băm thay vì số lượng phân đoạn. Nó cung cấp vị trí chính xác của vị trí băm cho khóa được chỉ định ngay cả khi số lượng phân đoạn đã tăng lên. Nó đơn giản hóa quá trình chia lại phân đoạn bằng cách di chuyển các vị trí băm từ một phân đoạn này sang phân đoạn mới để phân chia dữ liệu trên các phiên bản Redis khác nhau theo yêu cầu.

Lợi ích của Redis Sharding

Redis sharding mang lại một số lợi ích cho hệ thống cơ sở dữ liệu của bạn với những thay đổi tối thiểu.

Thông lượng cao

Vì Redis là đơn luồng nên việc xử lý nhiều yêu cầu của máy khách không thể xử lý song song bằng cách sử dụng nhiều lõi CPU. Vì vậy, việc thêm các phân đoạn hoặc phiên bản máy chủ mới đảm bảo rằng bạn có thể thực hiện song song các thao tác Redis. Nó tăng các thao tác mỗi giây trong cơ sở dữ liệu Redis của bạn, điều này cuối cùng mang lại cho bạn thông lượng cao.

Tính khả dụng cao

Với phương pháp sharding, cụm Redis có thể thiết lập kiến ​​trúc bản sao chính để đảm bảo tính khả dụng và độ bền cao.

Đọc bản sao

Sharding cho phép bạn giữ một bản sao chính xác dữ liệu của mình và cung cấp các thao tác đọc thông qua các phiên bản Redis riêng biệt, giúp tăng hiệu suất thực thi truy vấn đọc của bạn.

Ngoài những lợi ích này, sharding có thể gây ra các tình huống chia rẽ khi bạn có số lượng phân đoạn chẵn trong cụm Redis. Vì vậy, nên giữ một số lượng lẻ các phân đoạn trong cụm Redis của bạn.

Sự kết luận

Tóm lại, Redis sharding đang phân chia dữ liệu giữa nhiều máy chủ, cho phép mở rộng quy mô và thông lượng cao cho cơ sở dữ liệu của bạn. Như đã thảo luận, Redis sử dụng chiến lược phân đoạn theo thuật toán để hướng các yêu cầu của khách hàng đến đúng phân đoạn. Điều này có một số hạn chế khi tổng số lượng phân đoạn tăng lên. Vì vậy, thay vì tổng số phân đoạn, Redis sử dụng số lượng vị trí băm để tính toán phân đoạn thích hợp. Với sharding được giới thiệu, cơ sở dữ liệu Redis cung cấp tính sẵn sàng cao, thông lượng cao và hiệu suất cao.