面试题答案
一键面试跨分片事务处理
- 两阶段提交(2PC)
- 原理:引入一个协调者,第一阶段,协调者向所有参与者发送事务预提交请求,参与者执行事务操作并记录日志,但不提交。如果所有参与者都回复成功,进入第二阶段,协调者向所有参与者发送提交请求,参与者正式提交事务;若有任何一个参与者失败,协调者向所有参与者发送回滚请求。
- 缺点:单点故障问题,如果协调者出现故障,整个事务处理流程可能会中断。同时,性能开销较大,因为需要等待所有参与者的响应。
- 最终一致性
- 策略:不追求强一致性,允许各分片的数据在短时间内存在不一致情况,但通过异步机制最终达到一致。例如使用消息队列,当一个跨分片事务发生时,先在本地完成事务,然后发送消息到消息队列,其他分片从消息队列获取消息并执行相应操作,最终使数据达到一致。
- 优点:性能较好,适用于对一致性要求不是特别高的场景,如电商的订单系统,订单创建成功后,库存、积分等相关操作允许一定时间的延迟。
数据迁移
- 停机迁移
- 步骤:先停止应用对数据库的读写操作,然后按照预先制定的迁移规则,将数据从原分片迁移到新分片。例如,按用户ID范围重新分配数据到不同分片。迁移完成后,启动应用。
- 缺点:会造成系统停机,影响业务可用性,适用于对停机时间要求不高的系统。
- 在线迁移
- 方法:采用双写机制,在应用层同时向原分片和新分片写入数据,同时记录原分片的更新操作。当新分片数据同步完成后,逐渐切换读操作到新分片,最后完全停止向原分片写入,完成迁移。
- 优点:迁移过程中系统仍可正常运行,对业务影响较小,但实现复杂度较高,需要处理好数据一致性和性能问题。
监控与调优策略
- 监控指标
- 性能指标:包括查询响应时间、吞吐量、连接数等。通过监控这些指标,可以及时发现性能瓶颈。例如,查询响应时间过长可能表示索引不合理或数据库负载过高。
- 分片状态:监控每个分片的存储使用情况、CPU 和内存利用率等。如果某个分片的存储接近上限,需要考虑扩容;若 CPU 利用率持续过高,可能需要优化查询语句或增加硬件资源。
- 调优策略
- 查询优化:分析慢查询日志,对执行时间较长的查询进行优化。如添加合适的索引,优化 SQL 语句结构,避免全表扫描。
- 负载均衡:根据各分片的负载情况,动态调整数据分布,使负载均匀。可以采用基于哈希算法或范围划分的负载均衡策略,确保每个分片都能高效处理请求。
- 硬件优化:根据监控数据,适时增加服务器资源,如内存、CPU 等,提升数据库的处理能力。同时,优化存储设备,采用高速磁盘阵列或分布式存储系统,提高数据读写速度。