面试题答案
一键面试对一致性产生的挑战
- 网络延迟 在分布式系统中,当一个数据更新操作发生时,需要将更新传播到多个节点以保证数据一致性。网络延迟可能导致部分节点接收更新的时间显著晚于其他节点,在这期间,不同节点上的数据状态不一致,这与一致性要求的所有节点数据状态保持一致相冲突。例如,在一个电商库存系统中,当库存数量更新时,由于网络延迟,部分节点的库存显示已更新,而其他节点仍显示旧的库存数量,这就影响了数据一致性。
- 节点故障 节点故障可能导致数据无法及时同步。如果某个持有数据副本的节点发生故障,在其恢复之前,其他节点无法与其进行数据同步。例如,分布式文件系统中,一个存储文件副本的节点故障,其他节点在读取该文件时,可能获取到旧版本的数据,因为故障节点的更新没有同步过来,从而破坏了一致性。
常见应对策略 - 两阶段提交协议(2PC)
- 准备阶段
- 协调者向所有参与者发送事务预提交请求,并等待所有参与者的响应。
- 参与者接收到请求后,执行事务操作,但不提交,然后向协调者反馈事务执行结果(成功或失败)。
- 提交阶段
- 如果所有参与者都反馈事务执行成功,协调者向所有参与者发送提交事务的请求,参与者收到请求后正式提交事务。
- 如果有任何一个参与者反馈事务执行失败,协调者向所有参与者发送回滚事务的请求,参与者收到请求后回滚事务。通过这种方式,尽量保证所有节点要么都提交事务,要么都回滚事务,从而维护数据的一致性。但 2PC 也有一些缺点,比如单点故障(协调者故障可能导致整个事务无法继续)、同步阻塞(在等待参与者响应过程中,资源处于锁定状态)等。