背景:
一个历史比较悠久的服务出现了主从延迟。即写库写入n秒后,从库才能读到正确的数据。
主从延迟产生的原因:
- 当主库的TPS并发较高时,产生的DDL数量超过slave一个sql线程所能承受的范围。
- slave的大型query语句产生了锁等待。
主从延迟的解决方案
短期解决方案(治标)
- 优化 MySQL 配置。
- 提高 MySQL 到5.6版本以上。(5.6后支持多线程,提高了效率)。
- 增加从库,减少单从库的压力。(对原因2有效)
- 将时延要求高的场景,读写库。
长期解决方案(治本)
-
优化耗时SQL,优化索引。
-
写入主库的时候,确保数据都同步到从库了之后才返回这条数据写入成功,当然如果有多个从库,你也必须确保每个从库都写入成功。显然,这个方案对性能和时间的消耗是极大的,不推荐。
-
引入Redis或者其他NoSQL数据库,查的时候先查Redis,等从库数据库都同步完成,再清除Redis
-
预估吞吐量上限,采取缓存、限流、降级等方法,来应对大量流量。
网友评论