面试题答案
一键面试数据一致性面临的挑战
- 复制延迟:主节点写入数据后,从节点同步数据存在延迟。在读写分离场景下,读操作可能读取到旧数据。例如在电商系统订单创建后,用户查询订单,若从节点同步不及时,可能看不到刚创建的订单。
- 网络分区:当网络出现分区,集群被分割成多个部分,各部分间无法通信。可能导致不同分片的数据不一致。如支付系统中,不同分片记录支付状态可能因网络分区产生差异。
- 写操作优先级:一些情况下,写操作优先级高,可能会延迟读操作的数据同步,增加一致性风险。比如在社交平台高并发写评论场景下,读评论时可能获取不到最新写入的评论。
应对策略和技术手段
- 设置读偏好:通过设置合适的读偏好来控制读操作从哪个节点读取数据。如使用“primaryPreferred”读偏好,优先从主节点读数据,在主节点不可用时从从节点读,能减少读取旧数据的概率。在金融交易记录查询场景,可优先从主节点读取确保数据准确性。
- 配置复制因子:适当增加复制因子,提高数据冗余度,增强数据同步可靠性,减少因节点故障导致数据不一致。在大型文件存储系统中,较高复制因子保障数据一致性。
- 使用因果一致性读:利用MongoDB提供的因果一致性读功能,保证读操作能看到之前写操作的结果。在实时聊天系统中,用户发送消息后能及时看到自己刚发的消息。
实际应用场景举例
以在线教育平台为例,学生提交作业是写操作,教师批改作业后查看学生提交记录是读操作。通过设置读偏好为“primaryPreferred”,教师在批改作业后查看提交记录时大概率从主节点读取,能及时看到最新提交作业。同时配置较高复制因子,保障数据在多个节点存储,减少因节点故障导致数据不一致,确保作业数据的一致性和可靠性。