第 208 题:主从复制的延迟,读写分离的数据新鲜度保证?
题目
主从复制的延迟,读写分离的数据新鲜度保证?
完整讲解
一、主从复制与读写分离
主从复制:主库写,从库异步复制主库的变更(binlog/log 同步),从库提供读以分担主库压力,即读写分离。延迟:从库相对主库存在复制延迟(秒级甚至更长),读从库可能读到旧数据,即数据新鲜度问题。
二、复制延迟的成因
- 异步复制:主库提交后即返回,从库异步拉取或接收日志并重放,存在时间差;网络、从库负载、大事务会拉长延迟。
- 半同步/同步:可配置为「至少一个从库确认后才返回」,延迟会转嫁到写延迟,换取读从库的更新鲜;全同步成本高,生产常用异步或半同步。
三、数据新鲜度保证
- 强一致读:读主或「写后关键读走主」,保证写后读必见最新;牺牲读扩展性。
- 会话/路由级:同一会话内写后一段时间内读走主,之后走从;或按用户/请求路由到主或从,写后短时路由到主。
- 时间戳/GTID:写时记录位置或时间戳,读从库时等到从库复制超过该位置再返回,或若从库未追上则降级读主;需客户端或中间件配合等待或重试。
- 监控与降级:监控主从延迟,超过阈值时读请求降级到主或告警;从库故障时自动走主。
四、工程要点
- 业务需明确可接受的陈旧度(如 1s 内可接受);路由策略(主/从、等待从库追上)与监控、降级配合,在一致性与读扩展间权衡。
面试要点
- 能说明主从复制与读写分离;能解释复制延迟的成因及对「读从库」新鲜度的影响。
- 能列举保证新鲜度的方式:读主、会话内写后读主、等从库追上、监控降级;能说明各自取舍。
- 能简述半同步与异步的差异;能给出业务选型建议(可接受陈旧度、路由策略)。
记忆要点
- 主从复制=主写从读;延迟=从库落后主库,读从可能旧。保证新鲜度=读主、写后读主、等从库追上、监控降级。
- 半同步可减小延迟但写变慢;业务需明确可接受陈旧度与路由策略。