MySQL的主从延迟对业务的影响及解决方法
如果在项目中使用读写分离的方案,可能会对业务产生一定影响,例如用户在提交数据后立马刷新页面,刚才更新的数据并没有查到。或者是在一些业务处理中,前一秒写入的数据,后一秒读不到,可能会导致业务流转错误,产生脏数据等问题。 那么我们如何避免此类问题呢?
- 对于关键链路,强制走主库,例如用户刚提交了一笔订单,在跳转订单列表的时候强制走主库。缺点是主库压力稍大。
- 使用延迟检测,对于延迟较大的从库,主动切换到主库或延迟较低的从库(使用TDDL等中间件)。
- 短期内固定走主库:使用session、cookie的方式,标记最近的写请求,这之内走主库,几秒后再走从库。
- 极端:强同步,失去了读写分离的意义。
- 总结
方法 | 一致性 | 性能 | 场景 |
---|---|---|---|
关键读走主库 | 强一致 | 主库压力大 | 用户刚写完自己数据马上读 |
延迟检测 | 中等一致性 | 性能好 | 读多写少、一般业务 |
Session粘性 | 中等偏高 | 适中 | 写后短时间频繁读 |
强同步 | 最强 | 性能差 | 金融等高一致性场景 |