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。

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

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

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

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


上一篇: Cassandra的特點 下一篇: Cassandra應用場景(案例)