缓存-redis-主从延迟


主从延迟的产生

高并发场景下一半会采用主从架构,即:一个master主节点、多个slave从节点。主节点负责数据写入(也可以读取)、从节点负责数据读取

主从数据同步、可能会受网络延迟、数据同步阻塞等等,短则几秒、多则几十秒以上、这对我们的数据可靠性影响非常大

主从延迟导致的问题

如果存在主从延迟、程序在读取数据时可能会存在

1.已经写入到主库的数据、从库访问不到,最典型的是分布式锁,分布式系统中由于主库的延迟,导致其他机器程序同样访问到锁内的程序,结果就是上锁无效

2.主已删除的数据、从数据库却访问到了、就产生了幻读

3.已修改的数据,从节点读取历史数据,就产生了脏读

主从延迟的解决方案

快速解决

1、忽略这个数据不一致,在数据一致性要求不高的业务下,未必需要时时一致性。
2、强制读主库,使用一个高可用的主库,数据库读写都在主库,添加一个缓存,提升数据读取的性能。
3、选择性读主库,添加一个缓存,用来记录必须读主库的数据,将哪个库,哪个表,哪个主键,作为缓存的key,设置缓存失效的时间为主从库同步的时间,如果缓存当中有这个数据,直接读取主库,如果缓存当中没有这个主键,就到对应的从库中读取。

根本上解决

  1. 优化主从间的网络环境,通常放置在同一个机房部署,如使用阿里云等云服务器时要注意此现象
  2. 监控主从节点延迟(通过offset)判断,如果slave延迟过大,暂时屏蔽程序对该slave的数据访问

Categories:

Tags:

No Responses

发表回复

您的电子邮箱地址不会被公开。