Cassandra - Kiến trúc
Mục tiêu thiết kế của Cassandra là xử lý khối lượng công việc dữ liệu lớn trên nhiều nút mà không có bất kỳ điểm lỗi nào. Cassandra có hệ thống phân phối ngang hàng trên các nút của nó và dữ liệu được phân phối giữa tất cả các nút trong một cụm.
Tất cả các nút trong một cụm đóng vai trò như nhau. Mỗi nút là độc lập và đồng thời kết nối với các nút khác.
Mỗi nút trong một cụm có thể chấp nhận các yêu cầu đọc và ghi, bất kể dữ liệu thực sự nằm ở đâu trong cụm.
Khi một nút gặp sự cố, các yêu cầu đọc / ghi có thể được phục vụ từ các nút khác trong mạng.
Sao chép dữ liệu trong Cassandra
Trong Cassandra, một hoặc nhiều nút trong một cụm hoạt động như bản sao cho một phần dữ liệu nhất định. Nếu phát hiện thấy một số nút phản hồi với giá trị lỗi thời, Cassandra sẽ trả về giá trị gần đây nhất cho máy khách. Sau khi trả về giá trị gần đây nhất, Cassandra thực hiệnread repair trong nền để cập nhật các giá trị cũ.
Hình dưới đây cho thấy sơ đồ về cách Cassandra sử dụng sao chép dữ liệu giữa các nút trong một cụm để đảm bảo không có điểm lỗi nào.
Note - Cassandra sử dụng Gossip Protocol trong nền để cho phép các nút giao tiếp với nhau và phát hiện bất kỳ nút nào bị lỗi trong cụm.
Các thành phần của Cassandra
Các thành phần chính của Cassandra như sau:
Node - Là nơi lưu trữ dữ liệu.
Data center - Nó là một tập hợp các nút liên quan.
Cluster - Một cụm là một thành phần chứa một hoặc nhiều trung tâm dữ liệu.
Commit log- Nhật ký cam kết là một cơ chế khôi phục sự cố trong Cassandra. Mọi thao tác ghi đều được ghi vào nhật ký cam kết.
Mem-table- Bảng ghi nhớ là một cấu trúc dữ liệu thường trú trong bộ nhớ. Sau khi đăng nhập cam kết, dữ liệu sẽ được ghi vào bảng ghi nhớ. Đôi khi, đối với một họ cột đơn, sẽ có nhiều bảng ghi nhớ.
SSTable - Đây là một tệp đĩa mà dữ liệu được xóa khỏi bảng ghi nhớ khi nội dung của nó đạt đến một giá trị ngưỡng.
Bloom filter- Đây không phải là những thuật toán nhanh chóng, không xác định, để kiểm tra xem một phần tử có phải là thành viên của một tập hợp hay không. Nó là một loại bộ nhớ cache đặc biệt. Bộ lọc Bloom được truy cập sau mỗi truy vấn.
Ngôn ngữ truy vấn Cassandra
Người dùng có thể truy cập Cassandra thông qua các nút của nó bằng Ngôn ngữ truy vấn Cassandra (CQL). CQL xử lý cơ sở dữ liệu(Keyspace)như một vùng chứa các bảng. Lập trình viên sử dụngcqlsh: lời nhắc làm việc với CQL hoặc trình điều khiển ngôn ngữ ứng dụng riêng biệt.
Khách hàng tiếp cận bất kỳ nút nào cho các hoạt động đọc-ghi của họ. Nút đó (điều phối viên) đóng vai trò proxy giữa máy khách và các nút đang giữ dữ liệu.
Viết hoạt động
Mọi hoạt động ghi của các nút được ghi lại bởi commit logsđược viết trong các nút. Sau đó, dữ liệu sẽ được ghi lại và lưu trữ trongmem-table. Bất cứ khi nào bảng ghi nhớ đầy, dữ liệu sẽ được ghi vào SStabletập tin dữ liệu. Tất cả các lần ghi được tự động phân vùng và sao chép trong toàn bộ cụm. Cassandra định kỳ hợp nhất các SSTables, loại bỏ dữ liệu không cần thiết.
Đọc hoạt động
Trong các hoạt động đọc, Cassandra lấy các giá trị từ bảng ghi nhớ và kiểm tra bộ lọc bloom để tìm SSTable thích hợp chứa dữ liệu cần thiết.