之前一篇文章讨论了Redis原生如何保证主从一致。
这是Redis为我们提供的方法,但是初次之外我们还可以使用一些工具来增强一致性
半同步复制
不一致性的根本原因是主从同步需要一定的时间,如果此时有读操作落在从服务器上就会造成不一致的情况。那解决这个问题最简单的思路就是使用半同步复制。
半同步复制就是,如果有一个写操作落在主服务器上,那么这个操作必须要等待主从同步完成之后才能返回。这个方法用一种类似于锁的机制,增强一致性,但缺点就是写操作的耗时会加大,降低吞吐量
使用数据库中间件
所有数据库请求都会落在中间件上,然后由中间件进行路由到服务器上。如果一个写操作到达,那么中间件会将其路由到主服务器上,同时记录这次写操作,并设置一个时间,这个时间的设置要以系统完成主从同步的平均时间作为参考,比如说系统主从同步完成时间平均是300ms,那么这个时间设为350ms,在这个时间窗口内,如果有对应的查询操作到达中间件,那么就会把这次查询操作路由到主服务器中,这样接近到达强一致性。
优点:一致性很强
缺点:引入了数据库中间件,成本较高,而且无法完全达到读写分离的目的,增大主服务器压力
使用缓存
数据库中间件的成本较高,使用缓存可以降低成本,思路也差不多。
当写操作落在主服务器上,此时要在缓存中设置对应的key,并且同样根据主从同步平均事件设置一个合适的过期时间,读操作会先落在缓存上,如果缓存命中了,读操作就去主服务器上进行,否则,就继续读写分离,落在从服务器上
2138

被折叠的 条评论
为什么被折叠?



