面试题答案
一键面试1. writeConcern配置对写入性能的影响
- 副本确认数量:
- writeConcern=1:写入操作仅需主节点确认,写入性能最高。但数据持久性相对较弱,若主节点故障,可能丢失未复制到从节点的数据。
- writeConcern=majority:写入操作需多数节点(超过一半节点)确认,性能低于writeConcern=1 。因为需要等待多个节点确认,网络和磁盘I/O开销增加。
- writeConcern=all:写入操作需所有副本集成员确认,写入性能最差。所有节点都要进行写操作确认,网络和磁盘I/O负担重。
- 选举超时:
- 选举超时时间(electionTimeoutMillis)设置较短时,若主节点故障,能更快进行选举产生新主节点。但可能导致不必要的选举,影响写入性能。因为在正常网络波动情况下也可能触发选举,写入操作会因主节点变更而中断。
- 选举超时时间设置较长时,写入性能相对稳定。但主节点故障时,故障恢复时间变长,在这段时间内无法正常写入。
2. writeConcern配置对读取性能的影响
- 副本确认数量:
- writeConcern=1:读取性能可能受数据一致性影响。若读操作发生在主节点故障且数据未及时复制到从节点时,从节点可能读到旧数据。
- writeConcern=majority:读取一致性相对较高,读性能基本不受writeConcern直接影响。多数节点确认保证数据在多数节点一致,读操作能获取较新数据。
- writeConcern=all:读取一致性最高,但写入延迟增加可能间接影响读性能。因为写入慢可能导致数据更新不及时,读操作等待数据最新状态的时间可能变长。
- 选举超时:
- 选举超时时间短,频繁选举可能使读操作短暂中断,影响读性能。因为选举期间节点角色变动,读请求路由可能出现问题。
- 选举超时时间长,读性能相对稳定,但主节点故障时,读操作可能长时间处于不可用状态,直到新主节点选举完成。
3. writeConcern配置对故障恢复能力的影响
- 副本确认数量:
- writeConcern=1:故障恢复能力较弱。主节点故障时,未复制到从节点的数据可能丢失,恢复后数据完整性受影响。
- writeConcern=majority:故障恢复能力较强。多数节点确认的数据在主节点故障后,能保证数据一致性,通过选举新主节点可快速恢复服务。
- writeConcern=all:故障恢复能力最强。所有节点确认的数据在任何节点故障时都能保证数据完整,但恢复时间可能因所有节点同步数据而变长。
- 选举超时:
- 选举超时时间短,能快速响应主节点故障进行选举,恢复速度快,但可能因误判导致不必要选举。
- 选举超时时间长,恢复速度慢,但可避免因短暂网络波动等原因导致的不必要选举。
4. 优化writeConcern配置提升整体性能的策略和思路
- 根据业务需求选择合适的writeConcern:
- 对于对数据一致性要求不高、追求高写入性能的业务,如日志记录,可选择writeConcern=1 。
- 对于对数据一致性要求较高的业务,如金融交易,选择writeConcern=majority 。
- 极少情况下,对数据完整性极其严格的业务,才选择writeConcern=all 。
- 动态调整writeConcern:
- 根据系统负载和网络状况动态调整writeConcern。在网络稳定、负载低时,可提高writeConcern保证数据一致性;在网络不稳定或负载高时,降低writeConcern提升写入性能。
- 结合读偏好(readPreference):
- 若writeConcern较低,可通过合理设置读偏好,如选择secondaryPreferred,在保证一定一致性前提下,将读操作分散到从节点,提升整体性能。
- 优化选举超时时间:
- 根据集群规模和网络状况合理设置选举超时时间。大规模集群网络复杂,可适当调长选举超时时间;小规模集群或网络稳定的环境,可适当缩短选举超时时间。