Cassandra的架構


Cassandra旨在處理多個節點之間的巨量資料工作負載,而無需擔心單點故障。 它在其節點之間具有對等分散式系統,資料分布在叢集中的所有節點上。

  • 在Cassandra中,每個節點是獨立的,同時與其他節點互連。 叢集中的所有節點都扮演著相同的角色。
  • 叢集中的每個節點都可以接受讀取和寫入請求,而不管資料實際位於叢集中的位置。
  • 在一個節點發生故障的情況下,可以從網路中的其他節點提供讀/寫請求。

Cassandra中的資料複製

在Cassandra中,叢集中的節點作為給定資料片段的副本。 如果某些節點以超時值響應,Cassandra會將最新的值返回給用戶端。 返回最新值後,Cassandra會在後台執行讀取修復,以更新舊值。

請參閱以下圖示,以了解Cassandra如何在叢集中的節點之間使用資料複製的原理圖,以確保沒有單點故障。

Cassandra的組成部分

Cassandra的主要組成部分主要有:

  • 節點(Node):Cassandra節點是儲存資料的地方。
  • 資料中心(Data center):資料中心是相關節點的集合。
  • 叢集(Cluster):叢集是包含一個或多個資料中心的元件。
  • 提交紀錄檔(Commit log):在Cassandra中,提交紀錄檔是一個崩潰恢復機制。 每個寫入操作都將寫入提交紀錄檔。
  • 儲存表(Mem-table):記憶體表是記憶體駐留的資料結構。 提交紀錄檔後,資料將被寫入記憶體表。 有時,對於單列系列,將有多個內容表。
  • SSTable:當內容達到閾值時,它是從記憶體表重新整理資料的磁碟檔案。
  • 布魯姆過濾器(Bloom filter):這些只是快速,非確定性的,用於測試元素是否是集合成員的演算法。 它是一種特殊的快取。 每次查詢後都會存取Bloom過濾器。

Cassandra查詢語言

Cassandra查詢語言(CQL)用於通過其節點存取Cassandra。 CQL將資料庫(Keyspace)視為表的容器。 程式員使用cqlsh:提示使用CQL或單獨的應用程式語言驅動程式。
用戶端可以接近任何節點進行讀寫操作。 該節點(協調器)在客戶機和儲存資料的節點之間扮演代理。

寫操作

節點的每個寫入活動都由寫入節點的提交紀錄檔捕獲。 之後,資料將被捕獲並儲存在記憶體表中。 每當記憶體表已滿時,資料將被寫入SStable資料檔案。 所有寫入在整個叢集中自動分割區和複製。 Cassandra定期整合SSTables,丟棄不必要的資料。

讀操作

在讀操作中,Cassandra從mem-table中獲取值,並檢查bloom過濾器以找到包含所需資料的適當SSTable。

有三種型別的讀請求被協調者傳送給副本。

  • 直接請求
  • 摘要要求
  • 讀修復請求

協調器傳送的直接請求到副本中的一個。 之後,協調器將摘要請求傳送到由一致性級別指定的副本數,並檢查返回的資料是否是更新的資料。

之後,協調器將所有剩餘的副本傳送摘要請求。 如果任何節點發出過期值,後台讀修復請求將更新該資料。 這個過程稱為讀修復機制。