Để làm điều này, các cụm phải có khả năng chấp nhận các nútmới có thể bắt đầu tham gia bằng cách nhận được một bản sao của một số hoặc tất cả dữliệu và bắt đầu phục vụ yêu cầu người sử d
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA QUỐC TẾ VÀ ĐÀO TẠO SAU ĐẠI HỌC
*********
BÀI TẬP NHÓM
HỆ CƠ SỞ DỮ LIỆU PHÂN TÁN CASSANDRA
Nhóm thực hiện: Nguyễn Trường Giang
Hà Nội, tháng 06 - 2012
Trang 2MỤC LỤC
MỤC LỤC 2
MỞ ĐẦU 5
1 Những đặc trưng của Cassandra 6
1.1 Khái niệm 6
1.2 Phân tán và không tập trung hóa 6
1.3 Khả năng mở rộng mềm dẻo 6
1.4 Tính sẵn sàng cao và khả năng chịu lỗi 7
1.5 Tính nhất quán tùy chỉnh 7
1.6 Hướng dòng – Row oriented 8
1.7 Schema – Free (không bị ràng buộc về lược đồ) 8
1.8 Hiệu năng cao 9
2 Kiến trúc Cassandra 10
2.1 Kết nối giữa các nút (giao thức Gossip) 10
2.2 Các thành viên của cụm và các nút hạt giống 10
2.3 Trạng thái dò thất bạo và sự phục hồi 10
2.4 Phân vùng dữ liệu trong Cassandra 11
2.4.1 Giới thiệu về Phân vùng trong cụm Trung tâm đa dữ liệu 12
2.4.2 Hiểu biết về các loại phân vùng 14
2.5 Nhân bản trong Cassandra .16
Chiến lược xác định vị trí nhân bản 16
2.6 Kiến trúc liên kết mạng 17
2.7 Snitches 20
Các dạng Snitch 21
2.8 Yêu cầu từ phía Client trong Cassandra 23
2.8.1 Yêu cầu ghi 23
Trang 3Truy vấn ghi tới trung tâm đa dữ liệu 24
2.8.2 Truy vấn đọc 25
2.9 Lập kế hoạch triển khai cụm Cassandra 26
2.9.1 Lựa chọn phần cứng cho cài đặt doanh nghiệp 26
2.9.2 Lập kế hoạch cho một cụm Amazon EC2 29
2.9.3 Lựa chọn tùy chọn cấu hình nút 31
3 Mô hình dữ liệu Cassandra 35
3.1 So sánh mô hình dữ liệu Cassandra với cơ sở dữ liệu quan hệ 35
3.2 Keyspaces 37
3.3 Column Families 37
3.4 Columns 39
3.5 Các column đặc biệt (Counter, Expiring, Super) 40
3.5.1 Expiring Columns 40
3.5.2 Counter Columns 40
3.5.3 Super Columns 41
3.6 Các kiểu dữ liệu (Comparators và Validators) 42
3.6.1 Validators 43
3.6.2 Comparators 43
3.7 Nén column family 43
3.7.1 Khi nào sử dụng nén 44
3.7.2 Cấu hình nén cho một Column Family 44
3.8 Chỉ mục trong Cassandra 45
3.8.1 Chỉ mục chính 45
3.8.2 Chỉ mục thứ cấp 46
3.8.3 Tạo và sử dụng chỉ mục thứ cấp 46
3.9 Thiết kế mô hình dữ liệu 47
Trang 43.9.1 Dựa trên các truy vấn 47
3.9.2 Phi chuẩn hóa để tối ưu 48
3.9.3 Lập kế hoạch cho việc ghi trùng lặp 48
3.9.4 Sử dụng các khóa dòng tự nhiên hoặc thay thế 48
3.9.5 Các kiểu UUID cho tên cột 49
KẾT LUẬN 50
TÀI LIỆU THAM KHẢO 50
Trang 5MỞ ĐẦU
Ngày nay, các dịch vụ trên Internet phải xử lí khối lượng dữ liệu rất lớn Hầu hết
dữ liệu sẽ được lưu trữ phân tán trên nhiều máy chủ khác nhau Các cơ sở dữ liệu quan hệđang được triển khai hiện nay giải quyết rất tốt nhiệm vụ lưu trữ dữ liệu nhất định nào đó,nhưng vì tính tập trung đó mà chúng có thể gây ra vấn đề khi mở rộng Và, người sử dụngthường muốn tìm cách để bớt các thao tác join nữa các bảng, tức là phi chuẩn hóa dữ liệu– việc lưu trữ nhiều bản sao lưu của dữ liệu phá vỡ hoàn toàn thiết kế ban đầu, cả trong cơ
sở dữ liệu và ứng dụng Hơn nữa, chúng ta thường xuyên cần tìm đường xung quanh cácgiao dịch phân tán - nơi rất dễ hình thành nên các nút cổ chai Những hoạt động nàythường không được hỗ trợ trực tiếp trong bất cứ cơ sở dữ liệu quan hệ nào Vì vậy, các hệquản trị cơ sở dữ liệu quan hệ (RDBMS) tỏ ra không còn phù hợp với các dịch vụ như thếnày nữa Người ta bắt đầu nghĩ tới việc phát triển các DBMS mới phù hợp để quản lí cáckhối lượng dữ liệu phân tán này Các DBMS này thường được gọi là NoSQL Một đạidiện nổi bật của các NoSQL là Cassandra
Cassandra là hệ cơ sở dữ liệu phân tán mã nguồn mở được bắt đầu bởi Facebook.Năm 2008, Facebook chuyển nó cho cộng đồng mã nguồn mỡ và được Apache tiếp tụcphát triển đến ngày hôm nay Cassandra được coi là sự kết hợp của Amazon’s Dynamo vàGoogle’s BigTable Cassandra là một mô hình cơ sở dữ liệu phân tán hoàn toàn, có khảnăng chịu lỗi cực tốt Một tính chất nữa là nó rất linh hoạt, tốc độ đọc/ghi tăng tuyến tínhkhi bổ sung thêm hạ tầng mới
Trong bài tiểu luận này, nhóm xin trình bày về những đặc trưng của hệ cơ sở dữliệu phân tán Cassandra Tiếp theo là phần kiến trúc và mô hình dữ liệu mà Cassandra sửdụng
Trang 61 Những đặc trưng của Cassandra
1.1 Khái niệm
"Apache Cassandra là một mã nguồn mở, phân tán, không tập trung hóa, khả năng
mở rộng cao, tính sẵn sàng cao, chịu lỗi, tính nhất quán, cơ sở dữ liệu hướng cột dựa trên
cơ sở thiết kế phân tán trên Dynamo của Amazon và mô hình dữ liệu của nó trên Bigtablecủa Google Được tạo ra bởi Facebook, nó được sử dụng phổ biến nhất tại một số sitestrên Web"
1.2 Phân tán và không tập trung hóa
Cassandra là phân tán, có nghĩa là nó có khả năng chạy trên nhiều máy trong khixuất hiện trước người sử dụng như một thể thống nhất
Thực tế Cassandra không tập trung hóa có nghĩa là không có điểm lỗi duy nhấtnào Tất cả các nút trong một cluster Cassandra hoạt động như nhau Điều này đôi khigọi
là “máy chủ đối xứng” Bởi vì tất cả chúng đều làm những việc như nhau, và không cómột máy chủ đặc biệt được phối điều phối các hoạt động, như với mô hình chủ /tớ trongMySQL, Bigtable, và những nhiều hệ cơ sở dữ liệu khác
Do đó, đặc điểm không tập trung hóa có hai ưu điểm quan trọng: nó đơn giản hơn
sử dụng hơn mô hình chủ /tớ, và nó giúp bạn tránh việc hệ thống ngừng hoạt động Vì cácnode là giống nhau nên việc thao tác và duy trì lưu trữ không tập trung hóa dễ dàng hơn
so với mô hình chủ/tớ Điều đó có nghĩa bạn không cần bất kỳ kiến thức đặc biệt để mởrộng, thiết lập 50 nút không khác nhau nhiều lắm so với thiết lập một nút Hơn nữa, trongmột thiết lập master/slave, master có thể trở thành một điểm lỗi duy nhất (SPOF) Đểtránh điều này, bạn thường cần phải tăng thêm tính phức tạp để môi trường có nhiềumaster Bởi vì tất cả các bản sao trong Cassandra đều đồng nhất, một nút bị lỗi sẽ khônglàm gián đoạn dịch vụ
Theo một cách ngắn gọn hơn, bởi vì Cassandra được phân phối và không tập trung,
nó không có điểm lỗi duy nhất, và hỗ trợ sẵn sàng cao
Trang 7phục vụ Nhưng sau đó phần mềm bản thân nó phải có một cơ chế nội bộ để giữ dữ liệucủa nó đồng bộ với các nút khác trong cluster.
Khả năng mở rộng mềm dẻo, đề cập đến một đặc tính đặc biệt của mở rộng theochiều ngang Nó có nghĩa là cluster của bạn có thể mở rộng quy mô và giảm quy môxuống một cách liền mạch Để làm điều này, các cụm phải có khả năng chấp nhận các nútmới có thể bắt đầu tham gia bằng cách nhận được một bản sao của một số hoặc tất cả dữliệu và bắt đầu phục vụ yêu cầu người sử dụng mới mà không có sự gián đoạn lớn hoặccấu hình lại toàn bộ cluster.Bạn không cần phải khởi động lại quá trình của bạn.Bạnkhông cần thay đổi các truy vấn ứng dụng của bạn Bạn không phải tự cân bằng lại các dữliệu Chỉ cần thêm một máy - Cassandra sẽ tìm thấy nó và làm nó hoạt động
Mở rộng quy mô xuống, tất nhiên, có nghĩa là loại bỏ một số khả năng xử lý củacluster Bạn có thể phải làm điều này nếu bạn di chuyển một phần ứng dụng của bạn sangnền tảng khác, hoặc nếu ứng dụng của bạn bị giảm số lượng người dùng và bạn cần phảibắt đầu bán bớt phần cứng.Chúng ta hãy hy vọng điều đó không xảy ra.Nhưng nếu có,bạn sẽ không cần phải phá vỡ toàn hệ thống để có quy mô nhỏ lại
1.4Tính sẵn sàng cao và khả năng chịu lỗi
Trong thuật ngữ kiến trúc nói chung, tính sẵn sàng của một hệ thống được đánh giádựa trên khả năng đáp ứng các yêu cầu của hệ thống đó Nhưng máy tính có thể mắc phảirất nhiều kiểu lỗi, từ lỗi phần cứng đến việc đứt mạng Và đa số các máy tính không thểtránh khỏi các loại lỗi này Tất nhiên, có một số máy tính phức tạp có thẻ tự mình làmgiảm thiểu các lỗi này, vì chúng có nhiều phần cứng thay thế, và có khả năng gửi thôngbáo về các sự kiện lỗi để tự chuyển đổi các thành phần phần cứng của mình Nhưng bất
cứ ai có thể vô tình làm hỏng một cáp Ethernet, và nó sẽ cô lập một trung tâm dữ liệu duynhất Vì vậy, để một hệ thống được đánh giá là có tính sẵn sàng cao, nó thường phải baogồm nhiều máy tính nối mạng,và phần mềm mà họ đang chạy phải có khả năng điều hànhtrong một cluster và có một vài cơ chế nhận diện lỗi ở các node thông qua yêu cầu tới cácphần khác của hệ thống
Cassandra có tính sẵn sàng cao Bạn có thể thay thế các nút lỗi trong cluster màkhông gây ra thời gian chết, và bạn có thể sao chép dữ liệu đến nhiều trung tâm dữ liệucung cấp cải thiện hiệu năng và giảm thời gian dừng nếu một trung tâm dữ liệu phải đốimặt với một thảm họa như hỏa hoạn hoặc lũ lụt
1.5Tính nhất quán tùy chỉnh
Tính nhất quán cơ bản có nghĩa là thao tác đọc luôn được trả về giá trị bản ghi mới
Trang 8hàng của họ trên một trang web thương mại điện tử Nếu tôi đặt mặt hàng cuối cùng trongkho vào giỏ hàng của tôi ngay lập tức sau khi bạn làm việc đó, bạn sẽ nhận có hàng đượcthêm vào giỏ hàng của bạn, và tôi cần phải được thông báo rằng mặt hàng này đã hết.Điều này được đảm bảo để xảy ra khi trạng thái của thao tác ghi là nhất quán giữa tất cảcác nút có dữ liệu đó.
Tuy nhiên, việc mở rộng quy mô lưu trữ dữ liệu nghĩa là chúng ta phải đánh đổigiữa tính nhất quán, tính sẵn sàng và khả năng chịu lỗi (chúng ta chỉ có thể lựa chọn 2trong 3 đặc điểm này) Và Cassandra đã ưu tiên tính sẵn sàng hơn là tính nhất quán Vìthế, Cassandra có đặc điểm là “tùy chỉnh tính nhất quán”, tức là nó cho phép người dùngđiều chỉnh mức độ nhất quán theo yêu cầu, trong sự cân nhắc với mức độ sẵn sàng Mức
độ nhất quán là một thiết lập mà client phải chỉ ra trên mỗi thao tác và cho phép bạn quyếtđịnh bao nhiên bản sao trong cluster phải nhận biết thao tác ghi hay đáp ứng lại thao tácđọc để được xem là thành công
1.6 Hướng dòng – Row oriented
Cassandra thường được gọi là cơ sở dữ liệu hướng dòng, và điều này không sai
Nó không có quan hệ, và nó thể hiện cấu trúc dữ liệu của mình trong những hashtable đachiều rải rác Rải rác nghĩa là với một dòng bất kỳ, bạn có thể có một hoặc nhiều cột,nhưng mỗi dòng không cần phải có tất cả các cột giống nhau như trong cơ sở dữ liệu quan
hệ Mỗi dòng có một khóa riêng làm cho dữ liệu của nó có thể truy cập được
Cassandra lưu trữ dữ liệu trong bảng băm đa chiều nên bạn có thể không cần phảiquyết định trước cấu trúc dữ liệu của mình nên như thế nào, hoặc các bản ghi cần nhữngtrường gì… Điều này rất có lợi nếu bạn vừa mới bắt đầu phát triển ứng dụng, việc thêmvào hoặc loại bỏ các chức năng là khá thường xuyên Tuy nhiên, điều này không có nghĩa
là bạn hoàn toàn không phải suy nghĩ gì về cấu trúc dữ liệu Cassandra khiến bạn có suynghĩ khác đi về nó Thay vì thiết kế một mô hình dữ liệu ban đầu và sau đó thiết kế cáctruy vấn xung quanh mô hình đó như trong hệ cơ sở dữ liệu quan hệ, bạn có thể tự donghĩ về các truy vấn trước, và sau đó cung cấp dữ liệu để trả lời những truy vấn đó
1.7 Schema – Free (không bị ràng buộc về lược đồ)
Cassandra yêu cầu bạn định nghĩa một container gọi là keyspace chứa các columnfamily Keyspace thực chất chỉ là một namespace logic để giữ các column family vàthuộc tính cầu hình cụ thể Ngoài ra, các bảng dữ liệu rải rác bên bạn có thể chỉ cần đưa
dữ liệu vào đó, sử dụng cột mình muốn, và không cần phải định nghĩa trước các cột Thay
vì mô hình hóa dữ liệu bằng các công cụ mô hình hóa đắt tiền, và viết những câu truy vấn
Trang 9phức tạp, Cassandra cho phép bạn mô hình hóa các truy vấn mình cần, và sau đó cung cấp
dữ liệu cho nó
1.8 Hiệu năng cao
Cassandra được thiết kế nhằm mục đích tận dụng được ưu điểm của các máy đa xửlý/ đa lõi, và để chạy trên nhiều nhiều máy ở nhiều trung tâm dữ liệu với khối lượng dữliệu khổng lồ Cassandra có thể hoạt động tốt thậm chí dưới tải công việc cao Thao tácghi trong Cassandra cũng được thực hiện rất nhanh chóng Khi bạn thêm nhiều server,bạn có thể duy trì tất cả đặc tính mong muốn của Cassandra mà không phải hy sinh hiệunăng hoạt động
Trang 102 Kiến trúc Cassandra
Cassandra được thể hiện là một tập hợp của các nút độc lập được cấu hình lại vớinhau thành một cụm (Cluster).Trong một cụm, tất cả các nút là ngang hàng, có nghĩa làkhông có nút chính hoặc nút trung tâm quản lý các tiến trình Một nút có thể tham gia mộtcụm Cassandra dựa trên các khía cạnh nhất định trong cấu hình của nó Phần này giảithích những khía cạnh của kiến trúc cụm Cassandra
2.1 Kết nối giữa các nút (giao thức Gossip)
Cassandra sử dụng một giao thức gọi là tin đồn (Gossip) để khám phá vị trí vàthông tin trạng thái về các nút khác tham gia trong một cụm Cassandra Gossip là mộtgiao thức truyền thông ngang hàng, trong đó các nút định kỳ trao đổi thông tin trạng thái
về bản thân và về các nút khác mà chúng biết
Trong Cassandra, quá trình Gossip chạy mỗi giây và mỗi nút trao đổi các thôngbáo trạng thái của nó tối đa với 3 nút khác trong cluster Các nút thông tin trao đổi về bảnthân và về các nút khác mà họ nó đã được biết, do đó, tất cả các nút nhanh chóng tìm hiểu
về tất cả các nút khác trong cụm (cluster) Một Gossip có một phiên bản liên kết với nó,
do đó trong quá trình trao đổi tin đồn, với mỗi nút cụ thể thông tin cũ hơn bị ghi đè bằngcác trạng thái hiện tại cập nhật của nó
2.2 Các thành viên của cụm và các nút hạt giống
Khi một nút bắt đầu, nó nhìn vào tập tin cấu hình của nó để xác định tên của cụmCassandra chứa nó và nút được gọi là hạt giống để liên hệ, có được thông tin về các nútkhác trong cluster điểm liên lạc của các cụm được cấu hình trong file cassandra.yaml chomỗi nút
Để ngăn chặn sự đứt đoạn trong truyền thông tin đồn (gossip), tất cả các nút trongcluster phải có cùng một danh sách các nút hạt giống được liệt kê trong tập tin cấu hìnhcủa nó Điều này là quan trọng nhất khi một nút khởi động Theo mặc định, một nút sẽnhớ các nút khác, nó đã có giao tiếp kể cả khi khởi động lại
Chú ý: Các nút hạt giống được thiết kế không có mục đích nào khác hơn khởi động quátrình loan tin đồn cho các nút mới gia nhập nhóm
2.3 Trạng thái dò thất bạo và sự phục hồi
Dò thất bại là thông qua trạng thái của tin đồn (gossip), từ 1 nút xác định xem cácnút khác trong hệ thống đang online hay offline Thông tin dò thất bại cũng được sử dụng
Trang 11trong Cassandra để tránh định tuyến các yêu cầu từ máy khách đến các nút không thể truycập được (Cassandra cũng có thể tránh được các yêu cầu định tuyến các nút còn sống,nhưng hoạt động kém, qua dynamic snitch).
Trong quá trình truyền tải các bản tin từ các nút khác cả trực tiếp (các nút giao tiếptrực tiếp đến nó) và gián tiếp (thông tin có được khi nghe qua 2 nút, 3 nút …), Cassandra
sử dụng một cơ chế tính toán một ngưỡng cho mỗi nút dựa vào điều kiện mạng, khốilượng công việc, hoặc các điều kiện khác mà có thể ảnh hưởng đến quá trình truyền tải.Trong quá trình trao đổi tin đồn, mỗi nút duy trì một cửa sổ trượt báo các thông báo tinđồn từ các nút khác trong cluster Trong Cassandra, cấu hình phi_convict_threshold điềuchỉnh độ nhạy cho việc dò thất bại Các giá trị mặc định là fine cho hầu hết các tìnhhuống, nhưng DataStax đề nghị tăng đến 12 cho Amazon EC2 do tắc nghẽn mạng thườngxuyên xảy ra trên nền tảng đó
Node có thể thất bại do nhiều nguyên nhân khác nhau như thất bại phần cứng, mấtmạng… Để chính thức thay đổi nút thành viên trong một cluster, các quản trị viên sửdụng tiện ích nodetool để thêm hoặc loại bỏ các nút trong một cụm Cassandra
Khi một node trở lại trực tuyến sau khi không hoạt động, nó có thể đã bỏ lỡ việcsao chép các dữ liệu mà nó duy trì Một khi quá trình dò thất bại đánh dấu một nút làoffline, nếu như hinted handoff được kích hoạt thì quá trình ghi nhớ được thực hiện bởicác bản sao khác Tuy nhiên, nó có thể xảy ra tình huống việc ghi bị bỏ lỡ giữa khoảngthời gian của một nút thực sự offline cho tới khi nó bị phát hiện là offline Hoặc nếu mộtnút không hoạt động lâu hơn max_hint_window_in_ms (mặc định là một giờ), gợi ý sẽkhông còn được lưu lại Vì lý do đó, tốt nhất là thường xuyên chạy nodetool sửa chữa tất
cả các nút để đảm bảo chúng toàn vẹn dữ liệu, và cũng chạy repair sau khi hồi phục mộtnút đã offline trong một thời gian dài
2.4 Phân vùng dữ liệu trong Cassandra
Khi bạn khởi động một cụm Cassandra, bạn phải chọn cách thức dữ liệu sẽ đượcchia trên các nút trong cluster Điều này được thực hiện bằng cách chọn một phân vùngcho cluster
Trong Cassandra, tổng số dữ liệu được quản lý bởi 1 cụm được đại diện như là mộtkhông gian hoặc vòng tròn Vòng tròn được chia tương ứng với phạm vi và số lượng cácnút, mỗi nút chịu trách nhiệm cho một hoặc nhiều vùng của toàn bộ dữ liệu Trước khimột nút có thể tham gia vòng, nó phải được gán một thẻ bài Thẻ bài xác định vị trí củanút trên vòng tròn và phạm vi của dữ liệu nó chịu trách nhiệm
Trang 12Cá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ácnú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áchnhiệ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 đạidiệ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ớithẻ 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ặcnhó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àigá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ệcdịch chuyển vòng theo chiều kim đồng hồ cho đến khi nó tìm được nút đầu tiên trongbá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 chomỗ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 đềutrong mỗi trung tâm dữ liệu
Trang 13Mụ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 chiathẻ 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ỗitrung 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 1cụm không được xung đột với nhau (mỗi node phải có một thẻ duy nhất) XemCalculating 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.
Trang 142.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ùngchỉ 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ìnhphâ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ùngout-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 khaiCassandra
Phân vùng ngẫu nhiên
RandomPartitioner là phân vùng đã mặc định cho một cụm Cassandra, và tronghầ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àmbă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ụngmodulus-by-node-count, hàm băm phù hợp đảm bảo rằng khi các nút được thêm vàocluster, 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úttrong 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
Trang 15đó 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 khaitrung 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ượngcá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 chomỗ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ânbả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ờigian 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ằngtả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 trungbì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ânvù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ưutrữ 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ó xuhướ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ộtvấ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êucầ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ốikhó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 ứngvới phân phối thực tế của dữ liệu khi nó được tải
Trang 16Câ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 trongcù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ạnmuố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ã
UTF-8 Yêu cầu khóa hàng phải mã hóa theo UTF-UTF-8
CollatingOrderPreservingPartitioner – khóa hàng được lưu trữ theo thứ tự dựa trêntiế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) trongCassandra, 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áchnhữ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êncấ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 requestNhư 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úttrong cluster Tuy nhiên, có thể để tăng nhân tố nhân bản, và sau đó thêm số lượng mongmuố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ốikhô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 đượcthiế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êucủa bạn và các thông tin bạn có về vị trí các nút
Trang 17Chiế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ụngCassandra 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àngmộ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ềukim đồng hồ mà không xem xét vị trí các nút hoặc vị trí trung tâm dữ liệu
Trang 18Khi quyết định có bao nhiêu bản sao để cấu hình trong mỗi trung tâm dữ liệu, xemxét chính là (1) đảm bảo dữ liệu được đọc tốt tại mỗi trung tâm dữ liệu, không có trễ, và(2) kịch bản khi thất bại.
Hai cách phổ biến nhất để cấu hình các cụm trong nhiều trung tâm dữ liệu là:
Tạo hai bản sao trong mỗi trung tâm dữ liệu Cấu hình này đảm bảo khi 1 nút đơn
lẻ trong 1 nhóm nhân bản bị lỗi vẫn cho phép đọc được dữ liệu (ở một mức độ nhấtquán ONE)
Tạo ba bản sao trong mỗi trung tâm dữ liệu Cấu hình này sử dụng phục vụ các nhucầu truy cập thời gian thực
Trong Cassandra khái niệm trung tâm dữ liệu và nhóm nhân bản là tương tự nhau, nhómnhân bản là nhóm các nút được cấu hình lại với nhau phục vụ cho việc nhân bản
Với NetworkTopologyStrategy, vị trí bản sao được xác định độc lập trong mỗi trung tâm
dữ liệu (hoặc nhóm nhân bản) Bản sao đầu tiên tại mỗi trung tâm dữ liệu được đặt theocác phân vùng (giống như với SimpleStrategy) Bản sao sau đó trong cùng một trung tâm
dữ liệu được xác định bằng cách tiến theo chiều kim đồng hồ cho đến khi một nút ở 1rack khác từ nhân bản trước đó được tìm thấy Nếu không có nút như vậy, bản sao bổsung sẽ được đặt trong cùng một rack NetworkTopologyStrategy ưu tiên đặt các bản saolên các rack riêng biệt nếu có thể Các nút trong cùng một rack (hoặc tương đương nhómvật lý) có thể dễ dàng lỗi cùng 1 thời gian do nguồn, lỗi phần cứng hoặc các vấn đề mạng.Dưới đây là một ví dụ về cách NetworkTopologyStrategy đặt bản sao giữa hai trung tâm
dữ liệu với 4 nhân tố nhân bản (hai bản sao ở Trung tâm dữ liệu 1 và hai bản sao trongTrung tâm dữ liệu 2):
Trang 202.7 Snitches
Snitch là một thành phần cấu hình của một cụm Cassandra được sử dụng để xácđịnh các nút được nhóm lại với nhau như thế nào trong cấu trúc liên kết mạng tổng thể(rack và các nhóm trung tâm dữ liệu) Cassandra sử dụng thông tin này để định tuyến cácyêu cầu từ 1 nút một cách hiệu quả nhất có thể Snitch không ảnh hưởng đến các yêu cầugiữa các ứng dụng của khách hàng và Cassandra (Nó không kiểm soát client đang kết nốiđến nút nào)
Snitches được cấu hình cho một cụm Cassandra trong file cấu hình cassandra.yaml.Tất cả các nút trong một cluster nên sử dụng cùng một cấu hình snitch Khi gán thẻ bài,gán chúng luân phiên (so le) cho các Rack, ví dụ: rack1, rack2, rack3, rack1, rack2,rack3
Trang 21Các dạng Snitch
SimpleSnitch (Snitch đơn giản)
SimpleSnitch (mặc định) là thích hợp nếu bạn không có thông tin về rack hoặctrung tâm thông tin dữ liệu có sẵn Triển khai trung tâm dữ liệu duy nhất (hoặc một vùngtrong đám mây công cộng) thường rơi vào loại này Nếu sử dụng snitch, dùngreplication_factor = <#> khi xác định phạm vi khóa của bạn Snitch này không xác địnhđược thông tin về trung tâm dữ liệu hoặc rack
DseSimpleSnitch
DseSimpleSnitch được sử dụng khi triển khai DataStax Enterprise (DSE) Nó phùhợp với cấu hình Hadoop điều phối phân tích dữ liệu và các ứng dụng thời gian thực Nó
có thể được sử dụng cho các cụm DSE hỗn hợp nằm trong một trung tâm dữ liệu vật lý
Nó cũng có thể được sử dụng cho cụm DSE đa dữ liệu có chính xác 2 trung tâm dữ liệu,với tất cả các nút phân tích trong cùng một trung tâm dữ liệu và tất cả các nút Cassandrathời gian thực trong một trung tâm dữ liệu còn lại Nếu sử dụng snitch, sử dụng Analyticshoặc Cassandra là tên trung tâm dữ liệu mặc định khi định nghĩa khoảng không gian khóa
Trang 22RackInferringSnitch xác đinh cấu trúc liên kết của mạng bằng cách phân tích địachỉ IP của các nút Snitch này giả định rằng các octet thứ hai xác định các trung tâm dữliệu chứa nút đó, và các octet thứ ba xác định các rack
PropertyFileSnitch
PropertyFileSnitch xác định vị trí của các nút bằng cách sử dụng định nghĩa củangười dùng trong file: cassandra-topology.properties Snitch này là tốt nhất khi IP của cácnút là không thống nhất hoặc bạn có yêu cầu nhân bản phức tạp Xem Cấu hìnhPropertyFileSnitch để biết thêm thông tin Dùng Snitch này bạn có thể đặt tên trung tâm
dữ liệu của mình theo tên mong muốn được định nghĩa trong flie: topology.properties
cassandra-EC2Snitch
EC2Snitch dùng cho triển khai các cụm trên Amazon EC2, nơi mà tất cả cáccluster dàn trải trên nhiều vùng Thay vì sử dụng địa chỉ IP của nút để suy ra vị trí nút,Snitch này sử dụng API AWS để yêu cầu khu vực và phạm vi còn trống cho 1 nút Khuvực này được coi là trung tâm dữ liệu và các phạm vi còn trống chính là các rack trongtrung tâm dữ liệu Ví dụ, nếu một nút ở trung tâm dữ liệu có tên us-east-1a, us-east thì vịtrí rack là 1a
Dynamic Snitching (Snitching động)
Theo mặc định, tất cả snitches cũng sử dụng một lớp snitch động giám sát độ trễkhi đọc, định tuyến các yêu từ client tránh xa các nút hiệu năng thấp Snithc động đượckích hoạt theo mặc định, và được khuyến khích sử dụng trong tất cả các phạm vi.Snitching động được cấu hình trong file cassandra.yaml cho mỗi nút
Trang 232.8 Yêu cầu từ phía Client trong Cassandra
Các nút trong Cassandra là ngang hàng 1 client đọc hay viết các yêu cầu có thểlàm việc với bất kỳ nút nào trong cụm Khi một client kết nối đến một nút và đưa ra cácyêu cầu đọc hoặc viết, nút đóng vai trò là điều phối viên cho các hoạt động đó
Điều phối viên hoạt động như một proxy giữa các ứng dụng khách hàng và các nút(hoặc bản sao) chứa các dữ liệu được yêu cầu Điều phối viên xác định nút nào trong vòng
sẽ nhận được các yêu cầu dựa trên cấu hình phân vùng cụm và chiến lược đặt vị trí bảnsao
2.8.1 Yêu cầu ghi
Để ghi dữ liệu, điều phối viên gửi yêu cầu ghi cho tất cả các bản sao sở hữu hàngđang được ghi Miễn là tất cả các nút sao đang hoạt động và rảnh, chúng sẽ ghi dựa vàoconsistency level trong yêu cầu của client Mức độ nhất quán ghi xác định có bao nhiêunút nhân bản phải đáp ứng yêu cầu thì việc ghi mới được coi là thành công
Ví dụ, trong một trung tâm dữ liệu của 1 cụm có 10 nút với nhân tố nhân bản là 3,yêu cầu ghi sẽ đi đến tất cả 3 nút sở hữu hàng yêu cầu Nếu mức độ thống nhất ghi theoquy định của cliet là ONE, nút đầu tiên hoàn tất việc ghi sẽ báo về cho điều phối viên, sauđiều phối viên sẽ nhắn tin thành công lại cho client Một mức độ nhất quán ONE có nghĩarằng nó có thể có 2 trong 3 bản sao có thể bỏ lỡ việc ghi nếu chúng đang down tại thờiđiểm yêu cầu được đưa ra Nếu 1 bản sao bỏ việc ghi, hàng dữa liệu đó sẽ được thực hiệnphù hợp sau đó thông qua một cơ chế tự sửa lỗi của Cassandra
Trang 24Truy vấn ghi tới trung tâm đa dữ liệu
Trong sự triển khai trung tâm đa dữ liệu, Cassandra tối ưu hiệu năng ghi bằng việcchọn một nút điều phối trong mỗi trung tâm dữ liệu từ xa để xử lý những truy vấn tới cácbản sao trong trung tâm dữ liệu Nút điều phối được liên hệ bởi ứng dụng Client chỉ yêucầu chuyển tiếp truy vấn ghi tới mỗi nút trong trung tâm dữ liệu từ xa
Nếu sử dụng mức độ nhất quán là 1 hoặc LOCAL_QUORUM, thì chỉ những núttrong cùng trung tâm dữ liệu với nút điều phối phải phản hồi lại truy vấn của Client làtruy vấn thành công Theo cách này thì vị trí địa lý không ảnh hưởng tới thời gian phảnhồi truy vấn Client
Trang 25Do đó, trước tiên nút điều phối lên hệ với các bản sao được chỉ định bởi mức độnhất quán Nút điều phối sẽ gửi những truy vấn tới bản sao mà đang phản hồi nhanhchóng nhất Những nút được liên hệ sẽ phản hồi với dữ liệu đã truy vấn; nếu nhiều nútđược liên hệ, thì các hàng ở mỗi bản sao được so sánh trong bộ nhớ để xem liệu chúng cónhất quán Nếu chúng không nhất quán, thì bản sao có dữ liệu gần dây nhất (dựa vàokhoảng thời gian) sẽ được nút điều phối sử dụng để chuyển tiếp kết quả về cho Client.
Để đảm bảo rằng tất cả các bản sao đều có phiên bản gần đây nhất của dữ liệu đọcthường xuyên, thì nút điều phối cũng liên hệ và so sánh dữ liệu ở các bản sao mà khôngđược truy vấn đọc trực tiếp xem có nhất quán và không bị lỗi thời Nếu bị lỗi thời thì sẽđược cập nhật những giá trị được ghi gần đây nhất Tến trình này đuợc gọi là sửa đọc Sửa
đọc có thể được cấu hình đối với mỗi họ cột ( sử dụng read_repair_chance), và được cho
phép mặc định
Ví dụ, trong một cụm với số lượng bản sao là 3, và mức độ nhất quán làQUORUM, 2 trong 3 bản sao được liên hệ để thực hiện yêu cầu đọc trực tiếp Giả địnhrằng các bản sao được liên hệ có những phiên bản của các hàng khác nhau, thì bản sao cóphiên bản gần đây nhất sẽ trả lại dữ liệu được truy vấn Bản sao thứ ba được kiểm tra tính