Cassandra

Màu nền
Font chữ
Font size
Chiều cao dòng

Chương 1.GIỚI THIỆU

Ngày nay, các dịch vụ trêninternet phải xử lý một 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ênnhiều máy chủ khác nhau. . 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ớicá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ác khối lượng dữ liệu phân tán này. Các DBMS nàythường được gọi là NoSQL (Not only SQL). Một đại diệnnổi bật của các NoSQL là Cassandra.

1.1.Khái niệm

Cassandra là một quản trịhệ cơ sở dữ liệu phân tán mã nguồn mở được thiếtkế để sử lý một khối lượng lớn dữ liệu giàntrải trên nhiều node mà vẫn đảm bảo tính sẵn sàngcao (Highly Availability), khả năng mở rộng hay thu giảm sốnode linh hoạt (Elastic Scalability) và chấp nhận một sốsai sót (Fault Tolerant). Nó được phát triển bởi Facebookvà vẫn còn tiếp tục phát triển và sử dụng cho mạngxã hội lớn nhất thới giới này. Năm 2008, Facebook chuyểnnó cho cộng đồng mã nguồn mỡ và được Apache tiếptục phá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.

1.2.Các đặc trưng của Cassandra1.2.1.Tính phân tán

Khả năng phân chia dữ liệuthành nhiều phần đặt trên nhiều node khác nhau trong khingười dùng vẫn thấy được dữ liệu này là một khốihợp nhất

1.2.2.Tính co giãn (Elastic Scalability)

Khả năng của hệ thốngcó thể mở rộng số node trong cluster để có thể phụcvụ một số lượng request đến nhiều và thu giảm sốnode khi số lượng request đến ít.

1.2.3.Tính hướng cột (Column-Oriented)

Các RDBMS hướng dòng(row-oriented) phải định nghĩa trước các cột (column)trong các bảng (table). Đối với Cassandra các bạn khôngphải làm điều đó, đơn giản là thêm vào bao nhiêu cộtcũng được tùy theo nhu cầu của bạn.

1.2.4.Tính sẵn sàng cao (Highly Availability)

Dữ liệu được chia làmnhiều bản sao lưu ở nhiều node nên khi client thực hiệntác vụ đọc/ghi thì Cassandra có thể đáp ứng ngay lậptức bằng cách thực hiện trên bản sao gần nhất hoặctrên tất cả các bản sao (phụ thuộc vào thông sốConsitencyLevel do client thiết lập).

1.2.5.Chấp nhận sai (Fault Tolerant)

Dữ liệu của bạn đẽđược sao chép thành nhiều bản trên các node củacluster. Nếu chẳng may một node nào đó bị hỏng, bạnvẫn có thể truy xuất dữ liệu của bạn trên các nodekhác.

1.3.Mục đích của báo cáo

Mục đích của bài báo cáolà tìm hiểu hệ quản trị cơ sở dữ liệu phân tánCassandra ở các mặc:

Kiến trúc bên trong của Cassandra.

Mô hình dữ liệu trong Cassandra.

Đọc/ghi trong Cassandra.

Index trong Cassandra.

Sử lý giao tác, nhất quán dữ liệu, truy suất đồng thời trong Cassandra.

Ngôn ngữ truy vấn của Cassandra.

Đó là những vấn đề cầnphải xem xét khi tìm hiểu một hệ quản trị cơ sở dữliệu. Ngoài ra còn có một số vấn đề đặc trưng riêngcủa hệ phân tán cũng được bàn đến như phương thứctrao đổi thông điệp giữa các node, phương thức phânchia dữ liệu giữa các node, ...

1.4.Cấu trúc bài báo cáo:

Chương 1 giới thiệu kháiniệm, các đặc trưng của Cassandra và mục đính của bàibáo cáo.

Chương 2 trình bày kiếntrúc của Cassandra.

Chương 3 trình bày mô hìnhdữ liệu của cassandra.

Chương 4 trình bày cáchquản lý và truy xuất dữ liệu trong cassandra.

Chương 5 trình bày các hoạtđộng diễn ra trong cassandra.

Chương 6 trình bày ngôn ngữtruy vấn trong Cassandra (CQL) và giao diện lập trình bằngdòng lệnh (CLI)

Chương 2.KIẾN TRÚC CASSANDRA

Hệ thống Cassandra là hệthống tập hợp một hoặc nhiều node độc lập kết hợpvới nhau tạo thành một cluster. Trong một cluster Cassandra,tất cả các node đều ngang hàng với nhau, nghĩa là khôngcó một node đóng vai trò là master điều phối các requestđến các node còn lại.

2.1.Giao tiếp giữa các node (Gossip)

Cassandrasử dụng một giao thức gọi là gossip để tìm ra thôngtin về trạng thái và vị trí của những node thành viêntrong Cassandra cluster. Gossip là một giao thức giao tiếpngang hàng (peer to peer). Mỗi node định kì sẽ trao đổithông tin của chính nó cho những node khác trong cluster vàngược lại.

TrongCassandra, gossip chạy mỗi giây và trao đổi thông điệptrạng thái với 3 node khác trong cluster. Thông tin trao đổibao gồm thông tin về chính nó và về những node khác màchúng đã gossip cùng. Nhờ đó, mỗi node sẽ biết nhanhchóng về tất cả các node còn lại. Thông điệp gossip cómột thông số version kết hợp với nó để trong suốtquá trình trao đổi gossip, những thông tin cũ sẽ đượcthay thế cập nhật bởi những thông tin mới hơn.

2.1.1.Hiểu về cluster membership và seed nodes

Khimột node được khởi động, nó sẽ xem file cấu hình củanó để biết tên của cluster và những node khác trongcluster, quá trình này gọi là seed nodes. Những cấu hìnhnày được đặt trong file cassandra.yaml

Đểngăn chặn sự phân vùng trong truyền thông gossip, tất cảcác node trong cluster nên có cùng list của những seed nodeđược list trong file cấu hình. Đây là điều quan trọngnhất cho lần đầu tiên node khởi động.

Đểbiết được dãy dữ liệu mà node chịu trách nhiệm lưutrữ, nó phải biết token cửa nó và token của những nodekhác trong cluster. Khi khởi tạo một cluster mới, bạn nênkhởi tạo token cho toàn bộ cluster và gán token khởi tạocho mỗi node trước khi start nó. Mỗi node sau đó sẽgossip token của nó cho những node khác.

2.1.2.Hiểu về Failure Detection và Recovery

FailureDetection là phương pháp cho mỗi node để xác định cácnode khác trong hệ thống đang hoạt động hay không. Thôngtin của Failure Detection dùng bởi Cassandra để tránh địnhtuyến những yêu cầu của người dùng đến những nodekhông hoạt động này. Nó cùng dùng để tránh địnhtuyến đến những node vẫn còn hoạt động nhưng có hiệusuất thấp.

Quátrình gossip theo dõi hoạt động của các node dưới dạngtrực tiếp (thông qua những node gossip trực tiếp đếnnó) hoặc gián tiếp. Suốt quá trình gossip, mỗi node sẽduy trì một khoảng thời gian (interval) để cứ sau mộtkhoảng thời gian đó thì nó lại theo dõi một lần (quátrình gossip được chạy)

Sựhư hỏng của node có thể là kết quả từ nhiều nguyênnhân như là hư phần cứng, mạng ngừng hoạt động. Nodengừng hoạt động thường là ngắn thôi nhưng nó cũngkéo dài trong nhiều interval.Một node ngừng hoạt độngnhưng chưa được phát hiện ra thì những node khác vẫncứ định kì gossip với nó. Để thay đổi vĩnh viễnmembership giữa các node trong cluster người quản trị phảichỉnh sửa tường minh từ casssnadra cluster sử dụng tiệních nodetool

Khimột node hoạt động trở lại từ trạng thái ngừng, nócó thể thiếu những bản sao dữ liệu mà trong lúc nóngừng hoạt động được các node khác chuyển đến. KhiFailure Detection đánh dấu một node là ngừng hoạt độngthì việc những bản sao bị thiếu sẽ được ghi vàonhững node khác nếu hintedhandoff đượcenable. Mặc dầu vậy, có thể có một số bản sao bịmất giữa trong khoảng thời gian từ khi một node ngừnghoạt động đến khi nó được nhận dạng là không hoạtđộng. Hoặc nếu một node ngừng hoạt động lâu hơn mộtkhoảng thời gian cấu hình trong max_hint_window_in_mshintssẽ không được ghi lại những bản sao bị mất. Vì lýdo đó nên cách tốt nhất trong thực tế là chạy tiệních nodetool repairđịnh kì trên mỗi node để đảm bảo dữ liệu nhấtquán và cũng nên chạy repair sau khi phục hồi lại mộtnode vừa bị ngừng hoạt động.

2.2.Phân vùng dữ liệu (data partition) trong Cassandra2.2.1.Hiểu về phân vùng dữ liệu

Khibạn khởi động một Cassandra cluster, bạn phải chọncách để dữ liệu phân chia giữa các node trong cluster.Đây được gọi là chọn cách phân vùng cho cluster.

TrongCassandra, tổng dữ liệu được quản lý bởi cluster đượcbiểu diễn như một vòng (ring). Vòng được phân chiathành những khoảng bằng nhau cho tổng số node với mỗinode chịu trách nhiệm cho một hoặc một vài khoảng.Trước khi một node có thể join vào một vòng, nó phảiđược gán một token. Token quyết định vị trí của nodetrong vòng và khoảng dữ liệu nó sẽ chịu trách nhiệm.

Dữliệu của Column family được phân vùng dựa vào khóa củadùng (row key). Ví dụ một cluster với 4 node với row keyquản lý bởi cluster được đánh số từ 0-100. Mỗi nodeđược gán 1 token đại diện cho nó trong vòng. Trong ví dụnày, giá trị token là 0, 25, 50, 75. Node đầu tiên vớitoken 0 chịu trách nhiệm cho khoảng từ (75-0), tương tựcho các token tiếp theo.

2.2.2.Các loại phân vùng

Khônggiống với hầu hết các cấu hình được phép thay đổitrong Cassandra, partitioner có lẽ không thay đổi nếu khôngkhởi động lại toàn bộ hệ thống Cassandra của tất cảcác node trong cluster. Nó là một phần quan trọng và cấuhình partitioner đúng trước khi khởi tạo cluster của bạn

Cassandrahỗ trợ một số partitioner, nhưng mặt đinh RandomPartitioner là lựa chọn tốt nhất cho hầu hết các triểnkhai thực tế của Cassandra

Random Partitioner

Random Partitioner là loạiphân vùng mặc định trong Cassandra. Random partitioner sửdụng phương pháp băm để quyết định node nào sẽ lưutrữ một dòng phân biệt của dữ liệu không giống nhưphương pháp lấy số dư theo node. Phương pháp băm đảmbảo rằng khi những node được thêm vào hay lấy khỏi cluster thì dữ liệu vẫn được phân bố đồng đềugiữa các node

Để phân tán dữ liệuthông qua tập node, giải thuật hashing tạo một giá trịhash MD5 của row key trong phạm vi giá trị từ 0 đến 2127.Mỗi node trong cluster được gán một token đại diện chonó. Một node sau đó sẽ lưu trữ một khoảng những giátrị hash nhỏ hơn token.

Lợi ích chính của cáchtiếp cận này là một khi token được khởi tạo thíchhợp, dữ liệu từ tất cả các column family của bạn sẽđược phân tán đồng đều giữa các node trong cluster màko cần tốn nhiều công sức. Ví dụ, một column family cóthể dùng usernamenhư là row key và column family khác là timestamp,nhưng row key từ mỗi column family đơn sẽ vẫn đượcphân tán đồng đều giúp việc đọc ghi được phân tánđồng đều giữa các node.

Lợi ích khác của dùngrandom partitioner là đơn giản hóa load balancing trongcluster. Bởi vì mỗi phần của range hash sẽ nhận một sốbằng nhau của row, dễ dàng gán một row cho một node mới.

Ordered Partitioners

Dùng cái này có thể đảmbảo row key được lưu trữ theo thứ tự đã sắp xếp

Dùng cái này có thể chophép truy vấn một khoảng theo dòng như index truyền thống.Ví dụ nếu ứng dụng của bạn dùng usernameđể làm row key thì bạn có thể scan dòng cho những usernằm giữa Jake và Joe. Cái này thì không thể trong randomkhi mà thứ tự sắp xếp không biết được

Ta có thể thiết kế dữliệu sao cho vẫn có thể thực hiện những câu truy vấnkhoảng trên tập cột hơn là tập dòng

2.3.Hiểu về Snitches

Snitchlà một thành phần có thể cấu hình của Cassandra dùngđể định nghĩa cách mà những node được nhóm với nhautrong toàn cấu trúc mạng. Cassandra sẽ dùng thông tin nàyđể định tuyến giữa các node trong cluster sao cho hiệuquả nhất có thể. Snitch ko áp dụng cho những yêu cầutừ phía người dùng về node.

Snitchđược cấu hình trong Cassandra.yaml. Tất cả các node trongcluster nên dùng cùng một cấu hình snitch

Cónhiều loại snitch khác nhau: SimpleSnitch,DseSimpleSnitch, RackInferringSnitch, PropertyFileSnitch, EC2Snitch,EC2MultiRegionSnitch

2.4.Hiểu về Replica Placement Strategy

ReplicaPlacement là một loại cấu hình khi bạn tạo keyspace quyếtđịnh vị trí của những bản sao cho keyspace phân tántrong cluster.

Mộtsố loại phụ thuộc vào mục đích của bạn và thôngtin mà bạn có về nơi những node được cấp phát.

2.4.1.SimpleStrategy

Mặcđịnh khi tạo keyspace trong Command Line Interface CLI (CommandLine Interface) và phải khai báo tường minh trong CQL(Cassandra Query Laguage). SimpleStrategy đặt bản sao đầutiên lên node được quyết định bởi partitioner. Bảnsao tiếp theo được đặt ở node tiếp theo theo chiều kimđồng hồ mà không cần phải phải xem xét nó thuộc vịtrí nào trong cluster


2.4.2.NetworkTopologyStrategy

Được dùng khi bạn cóthông tin về cách các node được nhóm trong cluster củabạn hoặc bạn có cluster của bạn triển khai trên nhiềucluster. Cái này cho phép bạn đặt tả có bao nhiêu bảnsao bạn muốn trong mỗi cluster.

2.5.Hiểu về yêu cầu của client trong Cassandra

Tấtcả node trong Cassandra là ngang hàng. Một yêu cầu đọc/ghicủa client có thể đến với mỗi node trong cluster thì đềunhư nhau. Khi một client kết nối tới node và đưa cho mộtyêu cầu đọc/ghi, node đó phục vụ như là một điềuphối viên (coordinator) đến các node còn lại. Côngviệc của nó giống như một proxy giữa client và cácnode. Client gửi yêu cầu đến coordinator và coordinatorquyết định node nào trong ring nên nhận yêu cầu dựa vàocấu hình partitioner và replica placement strategy


Bạn đang đọc truyện trên: Truyen2U.Pro