第5章 Cassandra 的架構算法
Cassandra有一個稱爲system的內部keyspace,用於存儲關於集羣的元數據。包括:節點令牌,集羣名,用於支持動態裝載的keyspace和schema的定義,遷移數據,節點是否自舉成功。數據庫
主從架構一般是主節點讀寫,從節點讀,數據從主節點向從節點單向複製,存在很嚴重的單點故障問題。數組
Cassandra採用對等結構(P2P)的分佈式模型。全部節點地位相同,利於系統可用性和擴展性;任意節點的掉線會影響系統吞吐,可是不會中斷服務;支持動態增長節點。網絡
(1) gossiper 週期性運行,在環裏面隨機選擇一個節點(假設爲A)發起gossip會話,每輪發送三條消息。架構
(2) gossip發起者先向A發送一個Sync消息tcp
(3) A收到消息後回覆一條Ack1消息分佈式
(4) 發起者收到Ack1後再向A發送Ack2消息。至此完成本輪gossip性能
(是否是很像tcp三次握手?)url
一輪gossip能判斷一個節點的存活狀態,考慮到網絡的不穩定性,在死和活之間引入中間值——嫌疑級別。spa
具體gossip細節《Cassandra權威指南》並無講明白。
逆商是Cassandra的副本同步機制,用於保障不一樣節點上數據都更新到最新的版本。
具體細節《Cassandra權威指南》沒有講明白
簡要介紹下寫操做:
先寫commit log(寫操做成功)——>
寫內存memtable(每一個列族可能有多個memtable)——>
memtable達到必定數量後,寫入SSTable文件
commit log有兩階段提交的意思,書翻譯描述不清楚。
以上寫操做都是順序進行的,性能很高;配合後續的壓緊操做得到更好的讀性能。
提示移交:在某個節點由於網絡、硬件等緣由致使不可寫入時,其餘節點會把這個寫入信息記錄下來,等待該節點從新上線後把記錄發給它。這使得Cassandra寫操做永遠可用。
壓緊操做用於合併SSTable。鍵進行合併,列被組合,丟棄墓碑,建立新索引。
壓緊是後臺操做。
能判斷一個元素必定不在集合中(真陰性),可能在一個集合中(假陽性)。
大體原理,將一個元素映射到一個位數組,判斷位數組的0/1值來肯定元素在集合中的存在性。優點是內存佔用少,訪問速度遠遠大於磁盤掃描。
好比,url白名單,快速判斷一個url在不在一個超大超大的集合中(當hash算法內存不足的時候)。
軟刪除,應用並不直接執行數據庫的delete刪除操做,而是使用update操做把某列值標記爲「已刪除」。
Cassandra中,上述操做在刪除的值上放置墓碑。那麼,在執行壓緊操的的時候,比墓碑更舊的數據都會被清除。
沒太看明白
Cassandra守護進程
存儲服務
消息服務
提示移交管理器