读写分离架构
面试官问:"你们项目里用了读写分离吗?怎么实现的?"
小陈说:"用了,主库写,从库读。"
面试官追问:"主从延迟怎么处理?"
小陈说:"...延迟监控?"
面试官继续追问:"如果业务要求读最新写入的数据,能用从库吗?"
小陈愣住了。
读写分离是 MySQL 架构中最常见的高并发优化方案之一。但这不只是一道"加个从库"那么简单的事。主从延迟、写完就读、数据一致性——这些问题处理不好,读写分离反而会成为性能瓶颈。
一、读写分离架构 🔴
1.1 基本架构
1.2 读写分离的实现方式
1.3 应用层实现
二、主从延迟问题 🔴
2.1 延迟的原因
常见原因:
- 大事务:主库一个事务操作 10 万行,从库需要重放很久
- 网络延迟:binlog 传输延迟
- 从库性能差:从库机器资源不足
- 从库配置差:缺少索引导致重放慢
2.2 延迟的影响
2.3 ❌ 错误示范
候选人原话:"读写分离后,读从库、写主库,不会延迟。"
问题诊断:太理想化。生产环境中主从延迟是常态,不是例外。
候选人原话 2:"从库延迟了就多等一会儿。"
问题诊断:这不是解决方案,而且用户不会等。
【面试官心理】 主从延迟是读写分离的核心问题。我会问:"用户下单后立即查订单查不到,你怎么办?"能说出"强制读主库"或"延迟确认"的候选人才是真正理解读写分离的。
三、延迟解决方案 🟡
3.1 强制读主库
3.2 延迟确认机制
3.3 GTID 追踪
四、生产避坑 🟡
4.1 大事务是延迟元凶
4.2 从库选择策略
4.3 监控告警
【面试官心理】 问读写分离的候选人里,能说清"哪些场景不能读写分离"的才是真正理解。金融交易类、写完就读的场景,都不适合读写分离。能说出这些边界条件的候选人,说明他有业务思维。