MST

星途 面试题库

面试题:分布式系统下数据分片对存储架构一致性的挑战及应对

数据分片后,分布式存储架构在保持数据一致性方面面临诸多挑战。请详细说明这些挑战是什么,并且描述至少两种常见的应对策略及其原理,如在使用分布式事务和不使用分布式事务场景下如何保证一致性?
18.9万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

数据分片后分布式存储架构保持数据一致性的挑战

  1. 网络分区:网络可能会出现故障,将分布式系统分割成多个子网,不同子网间无法通信,导致数据更新在不同子网产生不一致。
  2. 节点故障:某个存储节点可能会发生故障,使得部分数据无法正常读写,可能导致一致性问题。例如故障前有未完成的更新操作,故障恢复后数据状态难以协调。
  3. 并发更新:多个节点同时对同一数据分片进行更新操作,若没有合适的控制机制,很容易产生数据冲突,破坏一致性。
  4. 复制延迟:为了提高可用性,数据通常会在多个节点复制。但不同节点间的数据同步可能存在延迟,在延迟期间数据状态不一致。

应对策略及其原理

使用分布式事务场景

  1. 两阶段提交(2PC)
    • 原理:第一阶段(准备阶段),协调者向所有参与者发送事务内容,询问是否可以提交事务,参与者执行事务操作但不提交,并反馈给协调者。第二阶段(提交阶段),如果所有参与者都反馈可以提交,协调者向所有参与者发送提交指令,参与者正式提交事务;若有任何一个参与者反馈不能提交,协调者向所有参与者发送回滚指令,参与者回滚事务。通过这种方式确保所有相关节点要么都提交事务,要么都回滚事务,维持数据一致性。
  2. 三阶段提交(3PC)
    • 原理:在2PC基础上增加了一个预提交阶段。第一阶段(CanCommit阶段),协调者询问参与者是否可以执行事务操作,参与者回复是否可以。第二阶段(PreCommit阶段),如果CanCommit阶段所有参与者都回复可以,协调者向参与者发送预提交请求,参与者执行事务操作但不提交,然后反馈执行结果。若有参与者在CanCommit阶段回复不可以,协调者发送中断请求。第三阶段(DoCommit阶段),若PreCommit阶段所有参与者反馈成功,协调者发送提交指令,参与者提交事务;若有参与者反馈失败,协调者发送回滚指令,参与者回滚事务。3PC解决了2PC中协调者单点故障导致数据不一致的问题,在一定程度上提高了系统的容错性。

不使用分布式事务场景

  1. 最终一致性 - 基于日志的异步复制
    • 原理:每个节点将数据更新操作记录在本地日志中,同时异步地将日志发送给其他副本节点。副本节点按照日志顺序应用更新操作,虽然在更新过程中可能存在短暂不一致,但最终所有副本节点的数据会达到一致。这种方式通过牺牲强一致性来换取系统的高可用性和性能,适用于对一致性要求不是特别高的场景。
  2. 乐观锁机制
    • 原理:在数据读取时,记录数据的版本号。当进行数据更新时,将当前版本号与读取时的版本号进行比较,如果版本号一致则允许更新,并将版本号加1;如果版本号不一致,说明数据在读取后已被其他操作修改,更新失败,需要重新读取数据并进行操作。通过这种方式在不使用分布式事务的情况下,解决并发更新导致的数据一致性问题。