Redis的集群设计包括badlz和节点主从两部分,本文从三张图来理解Redis的集群设计。
主从设备:
主从的设计不太新鲜。 在数据库中,我们也曾用主进行过读写分离。 直接看看图吧。
图中显示的信息:
1、只有一个老板,可以有n个slaver,而且slaver也可以有自己的slaver,由于这种主从关系他们决定在配置阶段指定他们的上下级关系,Zookeeper这样的平行关系是自主的。
2 )读写分离,Master只负责向Slaver写入数据和同步,Slaver承担读取的作用,因此Slaver的扩展只能提高读取效率,不能提高写入效率。
3、Slaver将主服务器端获取的信息推入磁盘,然后加载到内存中。 Redis是内存数据库,因为客户端从内存中读取信息。
新的Slaver加入这个集群后,会积极地找Master看码头。 Master发现新的蜗牛后,将全部量的数据发送到新的Slaver。 数据量越大,性能消耗也越大,因此尽量避免在运行时扩展Slaver。
简单总结主从模式的设计:
优点:读写分离,增加Slaver可以提高同时阅读的能力。
缺点:主控器的写入能力是瓶颈。
虽然理论上对Slaver没有限制,但是维持Slaver的开销总是成为瓶颈。
主磁盘大小也是整个Redis群集的存储容量的瓶颈。
badlz :
这个艺名看起来像文艺,但不是新技术。 他的真名叫分表分库,在另一张图上。
图中显示的信息:
1、对象在保存到Redis之前,先经过CRC16散列保存到指定的Node。 例如,Object4最终散列到了节点1。
2 )对应于0-16384的Slot段被均匀分配给每个节点。 Slot不能重复也不能缺失。 否则,对象将被重复保存或不保存。
3、Node之间也互相监听,当Node结束或加入时,以Slot为单位进行数据的转移。 例如,如果节点1脱机,0-5640这个Slot将均匀分布在节点2和节点3上。 节点2和节点3自身维护的Slot不会自行重新分配,因此在迁移过程中不会影响5641-16384Slot段的使用。
简单总结badlz的优缺点。
缺点:各Node负责相互监听、高并发数据写入、高并发数据读取,工作负荷高
优点:可以将Redis写入操作分布在多个节点上,提高写入并发性,轻松扩展容量。
双剑合并:
看这里也可以看出,主从和哈希设计的优缺点正好互补。 使图中的所有主从对应于图2的所有节点是Redis集群的终极形式。 首先散列逻辑节点,然后各逻辑节点内部为主从。 图:
如果想扩展同时读的话就添加Slaver,如果想扩展同时写的话就添加Master,如果想扩展的话也就是添加Master。 任何Slaver或几个Master挂起都不会造成致命故障。