一句话定义
主从复制延迟(Replication Lag)是指数据在主库(Primary,旧称 Master)写入成功后,从库(Replica,旧称 Slave)尚未完成同一条写入、还没跟上的那段时间差。它衡量的是“同一份数据在两个副本上相差多久”。
延迟是怎么产生的
写主库时,事务在本地提交就算成功;把这次改动同步到从库则是另一条链路:主库先记进日志(如 binlog),再通过网络传给从库,最后从库按顺序重放这些变更。这三步都要花时间,而多数系统默认采用异步复制(asynchronous replication):主库提交后不会等从库确认。
打个比方:主讲人在台上改 PPT,分店的投影仪要等文件传过去、再播放出来。台下分店的观众看到的永远是几分钟前的版本。主讲人说“改好了”,指的是自己那份改好了。
“刚提交就查不到”是怎么发生的
很多系统为了扛读流量,采用读写分离(read-write splitting):写请求走主库,读请求走从库。于是出现经典流程:用户提交表单,写入主库成功,页面跳转到详情页,详情页的查询被打到从库,而从库还没重放这条记录,页面就显示空白或“不存在”。用户刷新一下又好了,因为这几百毫秒里从库追上了。
和几个相邻概念的区别
| 概念 | 关注什么 |
|---|---|
| 主从复制延迟 | 同一份数据在两个副本上的时间差 |
| 网络延迟 | 一次请求往返的耗时 |
| 缓存不一致 | 缓存与数据库之间的过期时间窗口 |
| 分布式共识 | 多个副本就“算不算提交成功”达成一致的规则 |
复制延迟本质上是“已提交的数据暂时不可见”,数据并没有丢;网络延迟是单次通信慢;缓存不一致是缓存里留着旧值;共识关注的是提交语义,所以千万别混为一谈。
对从业者的意义
复制延迟是必须监控的指标,通常看“从库落后主库多少秒”。业务上常用的缓解手段有:对一致性敏感的读(如刚写完就看自己的数据,read-your-writes)临时走主库;按会话固定路由;关键链路使用半同步复制(semi-synchronous replication),等从库确认收到日志后再返回成功。做数据迁移、切库、扩容时,延迟也是判断“能不能切流量”的关键阈值。具体默认参数和超时设置各产品不同,以官方文档为准。
对普通人的意义
看到“提交成功”却查不到自己的订单,多半就是撞上了这个窗口,通常刷新或等一两秒即可,不必重复提交。产品设计上也该把这层不可见性挡住:提交后先给“处理中”,而不是直接跳到可能读不到数据的页面。
