Cassandra 架構



Cassandra 的設計目標是在多個節點上處理大資料工作負載,而沒有任何單點故障。Cassandra 在其節點之間具有點對點分散式系統,資料分佈在叢集中的所有節點之間。

  • 叢集中的所有節點都扮演相同的角色。每個節點都是獨立的,同時又與其他節點互連。

  • 叢集中的每個節點都可以接受讀寫請求,無論資料實際位於叢集中的哪個位置。

  • 當一個節點宕機時,可以從網路中的其他節點提供讀/寫請求服務。

Cassandra 中的資料複製

在 Cassandra 中,叢集中的一個或多個節點充當給定資料片段的副本。如果檢測到某些節點返回了過期值,Cassandra 將向客戶端返回最新值。返回最新值後,Cassandra會在後臺執行**讀取修復**以更新過時值。

下圖顯示了 Cassandra 如何在叢集中的節點之間使用資料複製來確保沒有單點故障的示意圖。

Data Replication

**注意** - Cassandra 在後臺使用**Gossip 協議**,允許節點彼此通訊並檢測叢集中的任何故障節點。

Cassandra 的組成部分

Cassandra 的關鍵組成部分如下:

  • **節點** - 它是儲存資料的地方。

  • **資料中心** - 它是相關節點的集合。

  • **叢集** - 叢集是一個包含一個或多個數據中心的元件。

  • **提交日誌** - 提交日誌是 Cassandra 中的崩潰恢復機制。每個寫入操作都寫入提交日誌。

  • **Memtable** - Memtable 是一個記憶體駐留資料結構。提交日誌之後,資料將寫入 Memtable。有時,對於單個列族,將存在多個 Memtable。

  • **SSTable** - 當 Memtable 的內容達到閾值時,資料將從 Memtable 重新整理到磁碟檔案 SSTable。

  • **布隆過濾器** - 這只不過是快速、非確定性的演算法,用於測試元素是否為集合的成員。它是一種特殊的快取。每次查詢後都會訪問布隆過濾器。

Cassandra 查詢語言

使用者可以使用 Cassandra 查詢語言 (CQL) 透過其節點訪問 Cassandra。CQL 將資料庫(**Keyspace**)視為表的容器。程式設計師使用**cqlsh:** 一個提示符來使用 CQL 或單獨的應用程式語言驅動程式。

客戶端聯絡任何節點進行讀寫操作。該節點(協調器)充當客戶端和持有資料的節點之間的代理。

寫入操作

節點的每個寫入活動都由寫入節點的**提交日誌**捕獲。稍後,資料將被捕獲並存儲在**Memtable**中。每當 Memtable 滿了,資料將寫入**SSTable**資料檔案。所有寫入都將自動分割槽並在整個叢集中複製。Cassandra 定期合併 SSTable,丟棄不必要的資料。

讀取操作

在讀取操作期間,Cassandra 從 Memtable 獲取值並檢查布隆過濾器以查詢儲存所需資料的相應 SSTable。

廣告