Cassandra的架構

第5章 Cassandra 的架構算法

5.1 system keyspace

            Cassandra有一個稱爲system的內部keyspace,用於存儲關於集羣的元數據。包括:節點令牌,集羣名,用於支持動態裝載的keyspace和schema的定義,遷移數據,節點是否自舉成功。數據庫

5.2 對等結構

            主從架構一般是主節點讀寫,從節點讀,數據從主節點向從節點單向複製,存在很嚴重的單點故障問題。數組

            Cassandra採用對等結構(P2P)的分佈式模型。全部節點地位相同,利於系統可用性和擴展性;任意節點的掉線會影響系統吞吐,可是不會中斷服務;支持動態增長節點。網絡

5.3 gossip與故障檢測

            gossip:Cassandra內部維護一個環形節點列表(Gossiper類)用於故障檢測。gossiper的流程以下:

(1)   gossiper 週期性運行,在環裏面隨機選擇一個節點(假設爲A)發起gossip會話,每輪發送三條消息。架構

(2)   gossip發起者先向A發送一個Sync消息tcp

(3)   A收到消息後回覆一條Ack1消息分佈式

(4)   發起者收到Ack1後再向A發送Ack2消息。至此完成本輪gossip性能

(是否是很像tcp三次握手?)url

一輪gossip能判斷一個節點的存活狀態,考慮到網絡的不穩定性,在死和活之間引入中間值——嫌疑級別。spa

            具體gossip細節《Cassandra權威指南》並無講明白。

5.4 逆商與讀修復

            逆商是Cassandra的副本同步機制,用於保障不一樣節點上數據都更新到最新的版本。

            具體細節《Cassandra權威指南》沒有講明白

5.5 commit log、memtable和SSTable

            簡要介紹下寫操做:

            先寫commit log(寫操做成功)——>

            寫內存memtable(每一個列族可能有多個memtable)——>

            memtable達到必定數量後,寫入SSTable文件

commit log有兩階段提交的意思,書翻譯描述不清楚。

以上寫操做都是順序進行的,性能很高;配合後續的壓緊操做得到更好的讀性能。

5.6 提示移交

            提示移交:在某個節點由於網絡、硬件等緣由致使不可寫入時,其餘節點會把這個寫入信息記錄下來,等待該節點從新上線後把記錄發給它。這使得Cassandra寫操做永遠可用。

5.7 壓緊

            壓緊操做用於合併SSTable。鍵進行合併,列被組合,丟棄墓碑,建立新索引。

            壓緊是後臺操做。

5.8 Bloom filter

            能判斷一個元素必定不在集合中(真陰性),可能在一個集合中(假陽性)。

大體原理,將一個元素映射到一個位數組,判斷位數組的0/1值來肯定元素在集合中的存在性。優點是內存佔用少,訪問速度遠遠大於磁盤掃描。

            好比,url白名單,快速判斷一個url在不在一個超大超大的集合中(當hash算法內存不足的時候)。

5.9 墓碑

            軟刪除,應用並不直接執行數據庫的delete刪除操做,而是使用update操做把某列值標記爲「已刪除」。

            Cassandra中,上述操做在刪除的值上放置墓碑。那麼,在執行壓緊操的的時候,比墓碑更舊的數據都會被清除。

5.10 分階段事件驅動

            沒太看明白

5.11 管理與服務

            Cassandra守護進程

            存儲服務

            消息服務

            提示移交管理器

相關文章
相關標籤/搜索