面试题答案
一键面试处理写操作数据一致性的机制
- 复制因子与仲裁机制:
- 复制因子:Cassandra允许用户定义复制因子(RF),即数据副本的数量。例如,若RF设置为3,数据会在3个节点上进行复制。
- 仲裁机制:写操作需要达到一定数量的副本确认(写仲裁,W)才能成功。读操作也需要从一定数量的副本读取数据(读仲裁,R)。当W + R > RF时,就可以保证强一致性。比如RF = 3,若W = 2,R = 2,写操作需要2个副本确认,读操作从2个副本读取,能确保读到最新数据,实现强一致性。若W = 1,R = 1,就是最终一致性,因为写操作只需1个副本确认,读操作也只需从1个副本读取,可能读到旧数据,但最终所有副本数据会一致。
- ** hinted handoff**:当某个节点暂时不可用时,其他节点会将写给该不可用节点的数据保存为hints。一旦该节点恢复,这些hints数据会被发送给它,以确保数据一致性。例如,节点A不可用,节点B和C接收写操作,同时保存写给A的数据为hints,A恢复后,B和C将hints数据发送给A。
- 反熵修复:定期检查副本之间的数据差异并进行修复。主要有两种方式:
- Merkle树:每个节点为数据构建Merkle树,通过比较Merkle树的哈希值来发现数据差异,然后进行修复。
- Read - repair:读操作时,如果发现副本之间数据不一致,会在后台修复不一致的数据。比如读操作从3个副本读取数据,发现其中一个副本数据与其他两个不同,就会在后台将该副本数据修复为与其他两个一致。
相关机制的优缺点
- 复制因子与仲裁机制:
- 优点:
- 可以灵活控制一致性级别。通过调整W和R的值,能在性能和一致性之间进行平衡。例如,在对一致性要求不高但对性能要求高的场景下,可设置较低的W和R值。
- 实现相对简单,易于理解和配置。
- 缺点:
- 当W值较大时,写操作性能会受影响,因为需要等待更多副本确认。例如,若RF = 5,W = 5,写操作要等待5个副本全部确认,在网络延迟等情况下,写操作响应时间会很长。
- 读操作同理,R值较大时,读性能会降低。
- 优点:
- hinted handoff:
- 优点:
- 能在节点短暂故障时保证数据不丢失,有助于维护数据的最终一致性。即使某个节点暂时不可用,数据依然可以写入集群,不会因个别节点故障影响整个写操作。
- 缺点:
- 增加了其他节点的负担,因为要保存hints数据。如果不可用节点长时间不恢复,hints数据会占用较多存储资源。
- 可能导致数据不一致的窗口时间延长。例如,在不可用节点恢复前,其他节点继续接收写操作,当不可用节点恢复接收hints数据时,可能与当前最新数据有差异。
- 优点:
- 反熵修复:
- 优点:
- 能自动修复副本间的数据不一致,保证数据最终一致性。无需人工干预,系统定期检查和修复,减少了运维成本。
- Read - repair在不影响读操作主要流程的情况下修复数据,对业务影响较小。
- 缺点:
- Merkle树构建和比较会消耗一定的系统资源,包括CPU和内存。尤其在数据量较大时,资源消耗更为明显。
- Read - repair在高并发读场景下,后台修复操作可能会对读性能产生一定影响。
- 优点: