1. Trang chủ >
  2. Kỹ thuật >
  3. Điện - Điện tử - Viễn thông >

4 Phân vùng dữ liệu trong Cassandra

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.52 MB, 50 trang )


Các cột dữ liệu được phân chia qua các nút dựa trên khóa hàng. Để xác định các

nút bản sao đầu tiên của một dòng còn sống, vòng tròn được quay theo chiều kim đồng hồ

cho đến khi nó định vị các nút với một giá trị thẻ lớn hơn giá trị khóa hàng. Mỗi nút có

trách nhiệm đối với 1 khu vực xác định trong vòng tròn giữa bản thân và nút chịu trách

nhiệm ở khu vực liền kề nó.Với các nút được sắp xếp theo thứ tự thẻ bài, nút cuối cùng

được coi là tiền thân của nút đầu tiên.

Ví dụ, hãy xem xét một cụm đơn giản gồm 4 nút, nơi tất cả các dữ liệu được quản

lý bởi 1 cụm được đánh số trong khoảng từ 0 đến 100. Mỗi nút được gán một thẻ bài đại

diện cho một điểm trong phạm vi này. Trong ví dụ đơn giản này, các thẻ có giá trị là 0,

25, 50, và 75. Nút đầu tiên, với token 0, chịu trách nhiệm về phạm vi gói (75-0). Nút với

thẻ bài thấp nhất cũng chấp nhận khóa hàng ít hơn so với các mã thẻ bài thấp nhất và

nhiều hơn với các mã thẻ bài cao nhất.



2.4.1 Giới thiệu về Phân vùng trong cụm Trung tâm đa dữ liệu

Trong triển khai trung tâm đa dữ liệu, vị trí bản sao được tính cho mỗi trung tâm

dữ liệu dựa vào chính sách NetworkTopologyStrategy. Trong mỗi trung tâm dữ liệu (hoặc

nhóm nhân bản), bản sao đầu tiên cho một hàng cụ thể được xác định bởi giá trị thẻ bài

gán cho một nút. Các bản sao trong cùng một trung tâm dữ liệu được xác định bằng việc

dịch chuyển vòng theo chiều kim đồng hồ cho đến khi nó tìm được nút đầu tiên trong

bánh răng (rack) khác.

Nếu bạn không tính toán thẻ phân vùng để đảm bảo dữ liệu được phân bố đều cho

mỗi trung tâm dữ liệu, bạn có thể gặp phải tình trạng phân phối dữ liệu không đồng đều

trong mỗi trung tâm dữ liệu.

12



Mục đích là để đảm bảo rằng các nút tại mỗi trung tâm dữ liệu đều được phân chia

thẻ bài trên phạm vi tổng thể. Nếu không, bạn có thể gặp tình trạng các nút trong mỗi

trung tâm dữ liệu sở hữu một số lượng không cân xứng các khóa hàng. Mỗi trung tâm dữ

liệu phải được phân chia một cách độc lập, tuy nhiên việc gán thẻ bài trong phạm vi 1

cụm không được xung đột với nhau (mỗi node phải có một thẻ duy nhất). Xem

Calculating Tokens for a Multi-Data Center Cluster cho các chiến lược về việc làm thế

nào để sinh các thẻ cho các cụm trung tâm đa dữ liệu.



13



2.4.2 Hiểu biết về các loại phân vùng

Không giống như hầu hết các lựa chọn cấu hình khác trong Cassandra, phân vùng

chỉ có thể thay đổi được khi tải lại tất cả các dữ liệu. Bởi vậy cần lựa chọn và cấu hình

phân vùng chính xác trước khi khởi tạo cluster. Cassandra cung cấp một số phân vùng

out-of-the-box, nhưng các phân vùng ngẫu nhiên là sự lựa chọn tốt nhất khi triển khai

Cassandra.

Phân vùng ngẫu nhiên

RandomPartitioner là phân vùng đã mặc định cho một cụm Cassandra, và trong

hầu hết các trường hợp là sự lựa chọn đúng. Việc phân vùng ngẫu nhiên sử dụng hàm

băm phù hợp để xác định xem nút nào sẽ lưu trữ hàng nào. Không giống như việc sử dụng

modulus-by-node-count, hàm băm phù hợp đảm bảo rằng khi các nút được thêm vào

cluster, số lượng dữ liệu bị ảnh hưởng là ít nhất.

Để phân phối các dữ liệu đều qua các nút, một thuật toán băm tạo ra một giá trị

MD5 hash của khóa hàng. Phạm vi có thể của giá trị băm là từ 0 đến 2 ** 127. Mỗi nút

trong cụm được gán một thẻ bài đại diện một giá trị hash trong phạm vi này. Một nút sau

14



đó sở hữu các hàng với một giá trị hash ít hơn số thẻ bài của nó. Đối với việc triển khai

trung tâm dữ liệu đơn lẻ, các thẻ bài được tính bằng cách chia phạm vi băm bởi số lượng

các nút trong cluster. Đối với việc triển khai nhiều trung tâm dữ liệu, thẻ được tính cho

mỗi trung tâm dữ liệu (khoảng băm nên được chia đều cho các nút trong mỗi nhóm nhân

bản).

Lợi ích chính của phương pháp này là một khi thẻ của bạn được đặt phù hợp, dữ

liệu từ tất cả các cột được phân bố đều trên toàn cụm mà không tốn nhiều thời gian xử lý.

Ví dụ, một cột có thể được sử dụng tên người dùng như là khóa hàng và một nhãn thời

gian cột, các khóa hàng từ mỗi cột riêng lẻ vẫn luân chuyển đồng đều. Điều này có nghĩa

là đọc và viết các yêu cầu của cluster cũng sẽ được phân bố đều.

Một lợi ích của việc sử dụng phân vùng ngẫu nhiên là đơn giản hóa việc cân bằng

tải tại mỗi cụm. Bởi vì mỗi một phần trong phạm vi băm sẽ nhận được một số lượng trung

bình cộng các hàng, nó làm cho việc gán thẻ bài cho các nút mới được dễ dàng hơn.

Phân vùng theo thứ tự

Việc phân vùng theo thứ tự đảm bảo rằng các khóa hàng được lưu trữ theo thứ tự

sắp xếp. DataStax khuyến cáo bạn lựa chọn cách phân vùng ngẫu nhiên trên một phân

vùng trừ khi ứng dụng của bạn thực sự cần cách phân vùng khác.

Sử dụng một phân vùng đã được sắp xếp cho phép quét số lượng hàng lớn, có

nghĩa là bạn có thể quét các hàng như thể bạn đang di chuyển con trỏ thông qua một chỉ

số truyền thống. Ví dụ, nếu ứng dụng của bạn có tên người sử dụng như là khóa hàng, bạn

có thể quét hàng cho người sử dụng có tên ở giữa Jake và Joe. Đây là loại truy vấn sẽ

không thực hiện được với các phân vùng có khóa hàng ngẫu nhiên, vì các khóa được lưu

trữ trong thứ tự của bảng băm MD5 của nó (không phải theo tuần tự).

Phân vùng theo thứ tự không được khuyến khích vì những lý do sau:

Việc tuần tự ghi dữ liệu có thể gây ra điểm nóng. Nếu ứng dụng của bạn có xu

hướng ghi hoặc cập nhật một khối liên tục các hàng tại một thời điểm mà việc viết không

được phân phối trên cluster, đều thực hiện trên một nút. Điều này thường xuyên là một

vấn đề với các ứng dụng xử lý dữ liệu nhãn thời gian.

Cần phí quản lý cao để cân bằng tải trong cluster. Một phân vùng theo thứ tự yêu

cầu quản trị viên tự tính toán phạm vi thẻ bài dựa trên các ước tính của họ về phân phối

khóa hàng. Trong thực tế, điều này đòi hỏi các nút tích cực di chuyển thẻ bài để thích ứng

với phân phối thực tế của dữ liệu khi nó được tải.

15



Cân bằng tải không đồng đều giữa các cột liên quan. Nếu ứng dụng của bạn có

nhiều cột, rất có thể là những cột có khóa hàng khác nhau và phân phối dữ liệu khác nhau.

Một phân vùng theo thứ tự có thể dẫn đến phân phối không đồng đều cho các cột trong

cùng một cụm.

Với Cassandra, có ba sự lựa chọn trong việc xây dựng phân vùng theo thứ tự:

ByteOrderedPartitioner – khóa hàng được lưu trữ theo thứ tự các raw byte thay vì

chuyển đổi chúng sang các chuỗi mã hóa. Tokens được tính bằng cách nhìn vào các giá trị

thực tế của dữ liệu, sử dụng hệ thập lục phân cho các ký tự đầu trong khóa. Ví dụ, nếu bạn

muốn hàng phân vùng theo thứ tự bảng chữ cái, bạn có thể chỉ định thẻ A bằng cách sử

dụng hệ thập lục phân đại diện là 41.

OrderPreservingPartitioner – khóa hàng được lưu trữ theo thứ tự dựa trên mã UTF8. Yêu cầu khóa hàng phải mã hóa theo UTF-8.

CollatingOrderPreservingPartitioner – khóa hàng được lưu trữ theo thứ tự dựa trên

tiếng Anh Mỹ. Cũng yêu cầu các khóa hàng phải mã hóa theo UTF-8



2.5 Nhân bản trong Cassandra.

Nhân bản là quá trình lưu trữ các bản sao của dữ liệu trên nhiều nút để đảm bảo độ

tin cậy và khả năng chịu lỗi. Khi bạn tạo một keyspace (không gian khóa) trong

Cassandra, bạn phải có chính sách quyết định vị trí các bản sao: số lượng bản sao và cách

những bản sao được phân phối trên các nút trong cluster. Chiến lược nhân bản dựa trên

cấu hình của cụm để giúp xác định vị trí vật lý của các nút và khoảng cách giữa chúng.

Tổng số bản sao trên cluster thường được gọi là nhân tố nhân bản. Một nhân tố

nhân bản của 1 có nghĩa là chỉ có một bản sao của mỗi hàng. Một nhân tố nhân bản của 2

có nghĩa là có hai bản sao cho mỗi hàng. Tất cả các bản sao được quan trọng như nhau,

không có bản sao nào được coi là chính, phụ về cách đọc và ghi khi xử lý các request

Như một quy luật chung, các nhân tố nhân bản không được vượt quá số lượng các nút

trong cluster. Tuy nhiên, có thể để tăng nhân tố nhân bản, và sau đó thêm số lượng mong

muốn của các nút sau đó. Khi nhân tố nhân bản vượt quá số lượng các nút, lệnh ghi sẽ bị

từ chối, nhưng lệnh đọc sẽ được phục vụ miễn là đáp ứng được mức độ nhất quán

(consistency level).

Chiến lược xác định vị trí nhân bản.

Replica placement strategy (chiến lược xác định vị trí bản sao) cách thức phân phối

không gian khóa giữa các bản sao trên cluster. chiến lược xác định vị trí bản sao được

thiết lập khi bạn tạo một keyspace. Có một số chiến lược để lựa chọn dựa trên mục tiêu

của bạn và các thông tin bạn có về vị trí các nút.

16



Chiến lược đơn giản

SimpleStrategy là cách mặc định khi tạo một keyspace bằng cách sử dụng

Cassandra CLI. Công cụ khác, chẳng hạn như CQL, yêu cầu bạn phải xác định rõ ràng

một chiến lược.

SimpleStrategy đặt bản sao đầu tiên trên một nút được xác định bằng partitioner

(cách phân vùng). Bản sao bổ sung được đặt trên các nút tiếp theo trong vòng theo chiều

kim đồng hồ mà không xem xét vị trí các nút hoặc vị trí trung tâm dữ liệu.



2.6 Kiến trúc liên kết mạng

NetworkTopologyStrategy là chiến lược nhân bản được ưa thích khi bạn có thông

tin về cách thức các nút được nhóm lại trong trung tâm dữ liệu của bạn, hoặc bạn có (hoặc

kế hoạch có) cluster triển khai trên nhiều trung tâm dữ liệu. Chiến lược này cho phép bạn

xác định có bao nhiêu bản sao bạn muốn trong mỗi trung tâm dữ liệu.

17



Xem Thêm
Tải bản đầy đủ (.pdf) (50 trang)

×