亿级流量场景下,大型缓存架构设计实现,你知道吗?( 八 )


------------------------------------------------------------------
解决方案:
在redis的配置文件配置参数:
min-slaves-to-write 1min-slaves-max-lag 10
要求至少有1个slave,数据复制和同步的延迟不能超过10秒,如果说一旦所有的slave,数据复制和同步的延迟都超过了10秒钟,那么这个时候,master就不会再接收任何请求了.
要求至少有1个slave,数据复制和同步的延迟不能超过10秒
如果说一旦所有的slave,数据复制和同步的延迟都超过了10秒钟,那么这个时候,master就不会再接收任何请求了
上面两个配置可以减少异步复制和脑裂导致的数据丢失

亿级流量场景下,大型缓存架构设计实现,你知道吗?

文章插图

亿级流量场景下,大型缓存架构设计实现,你知道吗?

文章插图
(1)减少异步复制的数据丢失
有了min-slaves-max-lag这个配置,就可以确保说,一旦slave复制数据和ack延时太长,就认为可能master宕机后损失的数据太多了,那么就拒绝写请求[可能redis会处理暂时写入,保存到自己一个缓存区,详见上边的“处理图”],这样可以把master宕机时由于部分数据未同步到slave导致的数据丢失降低的可控范围内
(2)减少脑裂的数据丢失
如果一个master出现了脑裂,跟其他slave丢了连接,那么上面两个配置可以确保说,如果不能继续给指定数量的slave发送数据,而且slave超过10秒没有给自己ack消息,那么就直接拒绝客户端的写请求
这样脑裂后的旧master就不会接受client的新数据,也就避免了数据丢失
上面的配置就确保了,如果跟任何一个slave丢了连接,在10秒后发现没有slave给自己ack,那么就拒绝新的写请求
因此在脑裂场景下,最多就丢失10秒的数据
------------------------------------------------------------------------------------------
如何在保持读写分离+高可用的架构下,还能横向扩容支撑1T+海量数据
1、redis cluster vs. replication + sentinal
replication + sentinal:如果你的数据量很少,主要是承载高并发高性能的场景,比如你的缓存一般就几个G,单机足够了一个mater,多个slave,要几个slave跟你的要求的读吞吐量有关系,
然后自己搭建一个sentinal集群,去保证redis主从架构的高可用性,就可以了 。
redis cluster:主要是针对海量数据+高并发+高可用的场景,海量数据,如果你的数据量很大,那么建议就用redis cluster
2、单机redis在海量数据面前的瓶颈
亿级流量场景下,大型缓存架构设计实现,你知道吗?

文章插图
3、怎么才能够突破单机瓶颈,让redis支撑海量数据?
亿级流量场景下,大型缓存架构设计实现,你知道吗?

文章插图
4、redis的集群架构
redis cluster
支撑N个redis master node,每个master node都可以挂载多个slave node
读写分离的架构,对于每个master来说,写就写到master,然后读就从mater对应的slave去读
高可用,因为每个master都有salve节点,那么如果mater挂掉,redis cluster这套机制,就会自动将某个slave切换成master
redis cluster(多master + 读写分离 + 高可用)
我们只要基于redis cluster去搭建redis集群即可,不需要手工去搭建replication复制+主从架构+读写分离+哨兵集群+高可用
*************redis clustor 介绍与搭建 *********
------针对海量数据+高并发+高可用的场景
讲解分布式数据存储的核心算法,数据分布的算法:
hash算法 -> 一致性hash算法(memcached) -> redis cluster,hash slot算法
用不同的算法,就决定了在多个master节点的时候,数据如何分布到这些节点上去,解决这个问题 。
简单的取模 hash函数实现:
【严重的弊端,对机器的个数进行取模】
亿级流量场景下,大型缓存架构设计实现,你知道吗?

文章插图
一致性hash算法:
亿级流量场景下,大型缓存架构设计实现,你知道吗?

文章插图
对于一致性hash算法热点问题的改进:
亿级流量场景下,大型缓存架构设计实现,你知道吗?

文章插图
redis slot的实现原理:
以前写的内容是master机器和slave机器分离,分别负责读写,但是到了 redis cluster之后,就不再读写分离,所有的读和写都是通过master进行的;
针对key进行hash slot运算找slot;
亿级流量场景下,大型缓存架构设计实现,你知道吗?

文章插图

亿级流量场景下,大型缓存架构设计实现,你知道吗?

文章插图


推荐阅读