jobBox
Cẩm nang nghề nghiệp

Cassandra là gì? Vì sao Facebook tạo ra Cassandra

Article Image

Cassandra là gì?

Apache Cassandra là một cơ sở dữ liệu mã nguồn mở, phân tán và phi tập trung (distributed, decentralized), được thiết kế để xử lý một lượng dữ liệu cực kỳ lớn với khả năng mở rộng linh hoạt. Cassandra được xây dựng để đảm bảo tính sẵn sàng cao (high availability), khả năng chịu lỗi tốt (fault tolerance), và có thể điều chỉnh mức độ nhất quán dữ liệu (tunable consistency). Hệ thống này hoạt động theo mô hình column-family và tối ưu hóa cho các ứng dụng yêu cầu khả năng ghi nhanh và truy vấn dữ liệu hiệu quả.

Cassandra được phát triển tại Facebook vào năm 2008 và hiện nay đang được sử dụng bởi nhiều công ty công nghệ lớn như Netflix, Apple, Uber, và Instagram. Mô hình dữ liệu của Cassandra lấy cảm hứng từ Bigtable của Google, trong khi kiến trúc phân tán của nó dựa trên nguyên lý của Dynamo của Amazon.

Kiến trúc của Cassandra

Kiến trúc phân tán (Distributed Architecture):

Dữ liệu trong Cassandra được chia thành các partition bằng cách sử dụng hàm băm (hash function) (thường là Murmur3). Mỗi partition key xác định nơi lưu trữ dữ liệu trên các node trong cluster.

Dữ liệu được sao chép (replica) đến nhiều node trong hệ thống theo chỉ số Replication Factor. Điều này giúp duy trì tính sẵn sàng của dữ liệu ngay cả khi một số node gặp sự cố.

Ví dụ:

Trong RDBMS, một bảng dữ liệu (ví dụ bảng orders) được lưu trữ trên một máy chủ. Nếu máy chủ gặp sự cố, hệ thống sẽ bị ảnh hưởng toàn diện.

Trong Cassandra, bảng dữ liệu orders sẽ được chia nhỏ thành nhiều partition và phân phối trên nhiều node trong cluster. Nếu một node gặp sự cố, các bản sao (replica) từ các node khác sẽ vẫn đảm bảo rằng dữ liệu có thể truy cập được.

Phi tập trung (Decentralized):

Cassandra không có kiến trúc master-slave. Mỗi node trong cluster đều ngang hàng (peer-to-peer), nghĩa là không có node nào là node chủ chốt (master), và tất cả các node đều tham gia vào việc xử lý dữ liệu.

Các node giao tiếp với nhau thông qua giao thức gossip để đảm bảo rằng mỗi node đều biết được trạng thái của các node khác trong hệ thống.

So sánh với RDBMS:

Trong một hệ thống RDBMS truyền thống, nếu node master gặp sự cố, hệ thống phải thực hiện failover sang một slave, dẫn đến thời gian chết (downtime).

Với Cassandra, các yêu cầu sẽ được chuyển tới các node khác mà không cần phải trải qua downtime, đảm bảo tính liên tục của dịch vụ.

Khả năng mở rộng linh hoạt (Linear Scalability):

Cassandra được thiết kế để mở rộng theo chiều ngang. Điều này có nghĩa là bạn chỉ cần thêm một node mới vào cluster để mở rộng khả năng xử lý mà không cần phải thay đổi cấu trúc dữ liệu hay tốn thời gian để nâng cấp phần cứng.

Hệ thống có thể mở rộng vô hạn mà không làm ảnh hưởng đến hiệu suất hoặc độ tin cậy.

Tính sẵn sàng cao (Highly Available) và Chịu lỗi tốt (Fault Tolerant):

Replication: Dữ liệu được sao chép lên nhiều node trong cluster để đảm bảo tính sẵn sàng cao. Nếu một node gặp sự cố, dữ liệu vẫn có thể được truy cập từ các replica.

Hinted Handoff: Khi một node không khả dụng, các node khác sẽ giữ bản ghi tạm thời cho đến khi node gốc khôi phục và đồng bộ lại dữ liệu.

Read Repair: Khi thực hiện một thao tác đọc dữ liệu, Cassandra sẽ kiểm tra và sửa chữa các bản sao bị lỗi hoặc không đồng bộ.

Điều chỉnh mức độ nhất quán (Tunable Consistency):

Một trong những điểm mạnh của Cassandra là khả năng điều chỉnh mức độ nhất quán của dữ liệu sao cho phù hợp với nhu cầu của ứng dụng. Cassandra hỗ trợ các mức độ nhất quán từ Strong Consistency (đảm bảo tính nhất quán ngay lập tức giữa các replica) đến Eventual Consistency (đảm bảo tính nhất quán cuối cùng).

Consistency Level có thể được điều chỉnh cho mỗi thao tác (đọc/ghi) tùy theo yêu cầu của ứng dụng, từ ONE (chỉ cần một replica phản hồi) cho đến ALL (tất cả các replica phải phản hồi).

Column-Oriented:

Cassandra lưu trữ dữ liệu dưới dạng column family, giúp tối ưu hóa việc lưu trữ và truy vấn dữ liệu theo column thay vì row như trong các hệ thống cơ sở dữ liệu truyền thống. Điều này giúp việc tìm kiếm và truy xuất dữ liệu hiệu quả hơn, đặc biệt trong các ứng dụng cần xử lý khối lượng dữ liệu lớn.

Cassandra và Bài Toán Inbox Search

Cassandra đáp ứng được các yêu cầu của một hệ thống Inbox Search nhờ vào các đặc điểm sau:

Hiệu suất ghi cao:

Trong một hệ thống Inbox Search, mỗi tin nhắn mới cần được lưu trữ ngay lập tức để đảm bảo tính sẵn sàng của dữ liệu. Cassandra có khả năng ghi dữ liệu vào node gần nhất mà không cần phải truy tìm node master, giúp giảm độ trễ khi ghi và đảm bảo khả năng ghi nhanh.

Tìm kiếm nhanh:

Người dùng yêu cầu kết quả tìm kiếm nhanh chóng và chính xác trong hộp thư đến của họ. Cassandra tối ưu hóa truy vấn nhờ vào việc kết hợp partitioning và column-oriented data model, giúp truy vấn và tìm kiếm dữ liệu trong các ứng dụng yêu cầu tốc độ cao.

Giao tiếp giữa các khu vực khác nhau:

Cassandra hỗ trợ việc sao chép dữ liệu giữa các trung tâm dữ liệu (DC) ở các khu vực địa lý khác nhau. Ví dụ, khi người dùng ở Mỹ gửi tin nhắn, Cassandra ghi bản sao vào các replica trong trung tâm dữ liệu cục bộ tại Mỹ. Với mức Consistency Level thích hợp như LOCAL_QUORUM, Cassandra chỉ yêu cầu các replica trong cùng một khu vực ghi thành công trước khi xác nhận với người dùng.

Việc sao chép dữ liệu giữa các trung tâm dữ liệu, ví dụ từ Mỹ sang Việt Nam, sẽ được thực hiện asynchronously (không đồng bộ) để đảm bảo hiệu suất và tránh độ trễ.

Khi người nhận tại Việt Nam yêu cầu tin nhắn, Cassandra sẽ tìm kiếm dữ liệu từ trung tâm dữ liệu gần nhất (tại Việt Nam). Nếu bản sao chưa được đồng bộ, Cassandra sẽ sử dụng cơ chế hinted handoff hoặc read repair để đảm bảo dữ liệu được cập nhật chính xác.

Kết Luận

Cassandra là một lựa chọn lý tưởng cho các hệ thống cần xử lý dữ liệu lớn với yêu cầu về sự sẵn sàng cao, khả năng mở rộng linh hoạt, và chịu lỗi tốt. Mô hình dữ liệu column-family cùng khả năng điều chỉnh mức độ nhất quán giúp Cassandra phù hợp với các ứng dụng đòi hỏi khả năng ghi và truy vấn nhanh. Hệ thống này đặc biệt hữu ích trong các ứng dụng yêu cầu sự phân tán dữ liệu và không ngừng mở rộng mà không ảnh hưởng đến hiệu suất, như các hệ thống Inbox Search hoặc các dịch vụ trực tuyến lớn.

Bình luận

Chưa có bình luận nào

Từ khóa nổi bật

joxBox

Luôn nhận thông tin mới nhất
Từ chúng tôi

joxBox