Cassandra如何保证数据最终一致性:
1、逆熵机制(Anti-Entropy)
使用默克尔树(Merkle Tree)来确认多个副本数据一致,对于不一致数据,根据时间戳来获取最新数据。
2、读修复机制(Read Repair)
当Cassandra读数据时,需要根据读一致级别设定读取N个节点的副本数据,并按照时间戳返回最新数据给用户后,会对所有副本数据进行检测和修复,确保所有副本数据一致。
3、提示移交机制(Hinted Handoff)
当Cassandra写数据时,需要根据写一致性级别将数据写入到N个节点数据副本中,只有N个节点写入成功才会给用户返回操作成功,为防止要写入节点宕机导致操作失败,Cassandra采用提示移交机制将操作相关数据写入到随机节点,宕机节点恢复后可根据这些数据进行重放,最终获得数据一致性。
Gossip(闲话)协议会将宕机节点恢复的消息传递给其他节点,并及时进行数据修复。
提示移交机制产生的数据保存在系统表(system.hints)中,默认保存3小时。
4、分布式删除(Distributed Deletes)
由于Cassandra在多个节点上保存数据副本,如果直接对记录进行删除,在所有副本数据完全删除前,多个节点间数据不一致且无法按照时间戳判断该记录需要被修复还是被删除。Cassandra采用分布式删除机制,在删除记录时插入一条关于该记录的墓碑(tombstone),墓碑中包含接受客户端请求的存储节点执行请求的时间(Local delete time),通过墓碑来标识该记录已被删除。
Cassandra中压缩过程中实现垃圾回收机制,清理这些被墓碑标记的记录,以释放这些记录占用空间。
=======================================================
参考链接:
https://www.cnblogs.com/xxdfly/p/5641684.html
http://www.sohu.com/a/230312547_100123121
https://www.cnblogs.com/bozhang/articles/3114678.html
=======================================================