如果在项目中使用读写分离的方案,可能会对业务产生一定影响,例如用户在提交数据后立马刷新页面,刚才更新的数据并没有查到。或者是在一些业务处理中,前一秒写入的数据,后一秒读不到,可能会导致业务流转错误,产生脏数据等问题。 那么我们如何避免此类问题呢?

  1. 对于关键链路,强制走主库,例如用户刚提交了一笔订单,在跳转订单列表的时候强制走主库。缺点是主库压力稍大。
  2. 使用延迟检测,对于延迟较大的从库,主动切换到主库或延迟较低的从库(使用TDDL等中间件)。
  3. 短期内固定走主库:使用session、cookie的方式,标记最近的写请求,这之内走主库,几秒后再走从库。
  4. 极端:强同步,失去了读写分离的意义。
  • 总结
方法 一致性 性能 场景
关键读走主库 强一致 主库压力大 用户刚写完自己数据马上读
延迟检测 中等一致性 性能好 读多写少、一般业务
Session粘性 中等偏高 适中 写后短时间频繁读
强同步 最强 性能差 金融等高一致性场景