Cassandra (masterless DB)

Cassandra trường phái vô chủ (masterless)
Một trong những NoSQL database tuyệt vời nhất hiện nay, cùng nhìn qua tại sao nói nó tuyệt vời…

Cassandra được thiết kế theo mô hình peer-to peer architecture, nghe là biết nó không giống với master-slave architecture rồi. Master-slave là rất hay rơi vào tình trạng đột tử (do bị cảm, tụt huyết áp xong không có ai đỡ) hay còn gọi là SPOF “single point of failure”. Cassandra có thể được triển khai trên rất nhiều máy vật lý khác nhau, mỗi máy là một node trong hệ thống.

Dữ liệu được phân tán đến các node một cách tự động theo cơ chế autosharded, để phân tán nó được xây dựng dựa trên key-based sharding. Có nghĩa là nếu phân tán data đi mọi nơi nó phải có cơ chế để biết được data đang nằm ở node nào trong mạng, chính vì vậy key-value element là một giải pháp tuyệt vời.

Cassandra thiết kế khá linh hoạt cho việc phân tán dữ liệu, nó vừa phân tán vừa tạo nhân bản dự phòng(Replication, mặc định là sẽ replicate tới 3 nodes – có thể tùy biến theo nhu cầu). Nếu 1 node ngẻo thì ngay lập tức 1 node khác đứng ra tiếp quản và phục vụ.

Bài trước mình có nói tới sharding (một khái niệm cũ rồi), sharding có thể mở rộng theo cả 2 chiều ngang hay dọc. RDBMS thực hiện sharding theo chiều ngang (horizontal sharding) data được phân tán theo các bản ghi (rows) ví dụ: từ row 1-99 nằm trên máy A, từ row 100-199 nằm trên máy B. Một số khác thực hiện sharding theo chiều dọc (vertical sharding) giống y như columnar storage. Nơi mà các columns có thể được phân tán trên các máy khác nhau.

HDFP (Hadoop Distributed File System) một hệ thống phân tán file system, cách nó sử dụng data-volumes-based sharding, giả sử nơi mà bạn có một file lớn 5GB bạn có thể xác định một block-size mà bạn muốn chia chẳng hạn 100MB/block-size thì bạn sẽ có 50 file được phân tán tới các máy.

Khi một node mới được thêm vào hệ thống tính năng autosharding mặc định là enabled. Con máy nào nắm giữ các Key-range là con đó có chìa khóa để tìm được data. Những node nắm giữ key-range này phải phối hợp với các nodes và chia sẻ key với các node khác thông qua việc sử dụng một giao thức gossip. Vậy bất kỳ khi nào một key-value được yêu cầu truy cập thì mỗi node sẽ nhanh chóng xác định được vị trí của cặp key-value này chỉ trong vài milliseconds

Điều đáng lo ngại nhất là cùng một data tuy nhiên sau khi phân tán nó lại có những trạng thái khác nhau phá vỡ tính nhất quán (consitency) của dữ liệu. Cassandra sử dụng một cơ chế gọi là anti –entropy và read repair để giải quyết vấn đề này và giúp đồng bộ hóa data ở mọi bản sao.
Hoàn toàn không giống như RDBMS khi bạn xóa toàn bộ data (all deletes) nó thực hiện đánh dấu các bản ghi bị xóa, chứ không thực hiện xóa ngay trên query của bạn điều này giúp tăng tốc độ đọc (numbers of seeks).

Cassandra giống với Amazon Dynamo nó cùng nằm trong nhóm AP của định lý CAP, nó là một định lý nhắm đến 2/3 mục tiêu: 1 là “Available”, 2 là “Consitency” 3 là “Parttioning” (các bạn xem bài về CAP trên @Gravity Model), tuy nhiên Cassandra cũng đề xuất một vài lựa chọn giúp đạt được một vài mức độ của tính consitency
Tổng quát

Cassandra là một trong những giải pháp tốt nhất cho việc mở rộng, có thể nói là ở tầm như Google BigTable và Amazon Dynamo. Gần đây Cassandra cũng cho ra đời thêm một ngôn ngữ truy vấn gọi là (Cassandra Query Language) hỗ trợ collection columns, triggers, lightweight transactions, hiện Cassandra đang là sự lựa chọn cho rất nhiều hệ thống trên toàn cầu

Có tới vài chục database các loại, nhưng nếu chúng ta nắm được bản chất thì sẽ hiểu cách thức mà nó hoạt động, từ đó mà có cách tiếp cần hợp lý hơn cho cả việc học và làm. Hy vọng qua bài viết này có thể giúp chúng ta có những góc nhìn sâu hơn về các core technologies.

Cảm ơn các bạn đã dành thời gian đọc bài, chúc các bạn học tốt và công tác tốt.

Các bạn nhớ Like/Share/Comment/Follow Gravity Model để đọc thêm các bài mới nhé!

Y Hoang,

#Cassandra
#Sharding
#ColumnarDatabase
#HDFS
#CQL
#Masterless
#Master-slave

Please follow and like us:

Leave a Reply

Your email address will not be published. Required fields are marked *