1.数据库层面:
最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行。还有就是主库是写,对数据安全性较高,比如 sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog,innodb_flushlog也可以设置为0来提高sql的执行效率。另外就是使用比主库更好的硬件设备作为slave。
2.引入缓存:
数据库的写操作,先写数据库,再写cache,但是有效期很短,就比主从延时的时间略微长一点。然后读请求的时候,先读缓存,缓存存在则直接返回。
假如缓存不存在(这时主从同步已经完成),再读数据库。
3.强制路由:
对应一致性要求较高的读写请求,直接对主库读写
4.读取入库之前的数据:
将要准备入库的数据,如设置在上下文内存中,读的时候读内存而不是读数据库插入的数据。
总结:建议从强制路由控制,这样才是正真的强一致性,而从数据库无法完全保证,且会牺牲数据安全等其他代价。