面试题答案
一键面试优化思路
- 写入负载均衡:避免所有写入请求都集中在主库,分散压力以提升性能。
- 数据一致性保障:确保主从库之间数据的准确同步,减少延迟。
- 提升系统可用性:防止单点故障,保证系统持续提供服务。
技术手段
- 负载均衡:
- 数据库代理层:使用如 MyCAT、MaxScale 等中间件,在应用与数据库之间进行读写分离,将写请求均匀分配到多个主库(如果是多主架构)或优化主库的写入队列。
- SQL 层面:在应用代码中,通过特定算法(如哈希算法)根据业务数据(如用户 ID)将写入请求分发给不同的数据库实例。
- 数据一致性:
- 半同步复制:主库在接收到写请求并写入 binlog 后,等待至少一个从库接收并写入 relay log 后才返回成功给客户端,确保数据在主从库间尽快同步,减少数据丢失风险。
- 并行复制:从库开启并行复制功能,利用多核 CPU 的优势,加快从库应用 relay log 的速度,减少主从延迟。MySQL 5.6 引入基于库的并行复制,5.7 支持基于逻辑时钟的并行复制(MTS)。
- 高可用性:
- 主从切换:使用 MHA(Master High Availability)、Orchestrator 等工具,当主库出现故障时,能自动检测并快速将某个从库提升为主库,保证服务的连续性。
- 多数据中心部署:将主从库分布在不同的数据中心,避免因单个数据中心故障导致服务中断。可采用双活或多活架构,各数据中心间通过高速网络连接并进行数据同步。
- 缓存机制:
- 写入缓存:在应用层或数据库代理层使用缓存(如 Redis),对于一些非强一致性要求的写入,先写入缓存,再异步批量写入数据库,降低数据库直接写入压力。
- 读取缓存:利用缓存处理大量读请求,减轻数据库读压力,使数据库能更专注于处理写入请求。同时,在写入操作时,要注意合理更新缓存,以保证数据一致性。
- 数据库参数调优:
- 调整 innodb 相关参数:如 innodb_buffer_pool_size 适当增大,以缓存更多数据和索引,减少磁盘 I/O;innodb_log_file_size 合理设置,优化日志写入性能。
- 调整连接参数:如 max_connections 控制数据库允许的最大连接数,避免过多连接耗尽系统资源;wait_timeout 设置连接的等待超时时间,及时释放空闲连接。