MST

星途 面试题库

面试题:Cassandra数据模型在分布式系统中如何保证数据一致性

在Cassandra数据模型下,分布式系统可能面临网络分区等问题。请阐述Cassandra是通过哪些机制来保证数据一致性的,例如读写策略、复制因子等概念在其中起到什么作用?
43.0万 热度难度
数据库Cassandra

知识考点

AI 面试

面试题答案

一键面试

读写策略

  1. 读策略(Read Consistency Level)
    • ONE:客户端只需要从一个副本读取数据即可。这种策略读取性能最高,但一致性最差,可能读取到旧数据,适用于对一致性要求不高,更注重读取性能的场景。
    • TWO:客户端需要从至少两个副本读取数据。相对ONE策略,一致性有所提高,因为需要更多副本确认数据,降低了读取到旧数据的概率。
    • THREE:客户端从至少三个副本读取数据,进一步提高一致性。
    • QUORUM:读取的副本数为(复制因子 / 2) + 1 。例如复制因子为3,QUORUM表示需要读取2个副本。这种策略在一致性和性能之间取得较好平衡,大多数场景下能保证读取到最新数据。
    • ALL:客户端需要从所有副本读取数据,这提供了最高的一致性,但性能最差,因为需要等待所有副本响应,通常用于对数据一致性要求极高的场景。
  2. 写策略(Write Consistency Level)
    • ONE:只需要将数据写入一个副本,写入性能高,但一致性低,可能导致部分副本数据不一致。
    • TWO:数据需要成功写入至少两个副本,一致性高于ONE,但写入性能有所下降。
    • THREE:数据要成功写入至少三个副本。
    • QUORUM:写入的副本数为(复制因子 / 2) + 1 。这种策略确保大多数副本有新数据,在写入性能和一致性之间有较好平衡。
    • ALL:数据要成功写入所有副本,提供最高一致性,但写入性能最低,适用于对数据一致性要求非常严格的场景。

复制因子

  1. 概念:复制因子指的是数据在集群中被复制的份数。例如,设置复制因子为3,那么每一份数据在集群中会有3个副本。
  2. 作用
    • 数据冗余与可用性:通过增加副本数量,提高了数据的可用性。当部分节点出现故障时,只要还有足够的副本存活,数据仍然可以被读取和写入。例如,复制因子为3,若一个节点故障,剩下两个副本仍能提供服务。
    • 一致性保障:结合读写策略,复制因子影响数据一致性。如读策略为QUORUM,复制因子为3时,需要读取2个副本,能在一定程度上保证读取到最新数据。写策略同理,较高的复制因子配合合适的写一致性级别能确保更多副本数据一致。

其他机制

  1. Hinted Handoff
    • 原理:当某个节点故障,无法接收写入数据时,其他节点会暂存这些本该发往故障节点的数据,并记录相关信息(称为Hint)。当故障节点恢复后,这些暂存的数据会被发送给故障节点,从而保证数据一致性。
    • 作用:在节点临时故障场景下,确保故障节点恢复后数据与其他节点一致,提升系统整体数据一致性。
  2. Anti - Entropy
    • 原理:通过一种后台进程(如Merkle树比较算法)定期比较副本之间的数据,发现不一致时进行修复。Merkle树通过对数据块进行哈希计算构建树形结构,快速定位不一致的数据块。
    • 作用:主动检测并修复副本间的数据不一致问题,保证长期运行过程中数据的一致性。