读写分离

写请求路由到主库、读请求路由到从库,用复制扩展读吞吐;代价是复制延迟下的旧数据读,需要为“刚写就查”等场景保留走主库的路径。

路由

场景路由目标注意点
普通查询从库可接受秒级延迟
写入后的读主库会话内保持读己之写
报表统计专用从库避免抢占在线流量
事务内读主库需读到本事务的写

会话策略

会话策略
用户发生写操作后 N 秒内,该会话的读请求强制路由主库;
N 与复制延迟监控联动,延迟增大时自动放宽。

易错点

  • 读流量固定走从库,用户刚提交订单就查不到
  • 路由组件单点部署,故障时读路径与写路径同时不可用

数据来源与参考

  • 《数据密集型应用系统设计》(Kleppmann)第 5 章
  • MySQL 8.0 Reference Manual:Replication
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌