当前位置:   article > 正文

redis集群的架构、问题,附脑洞_redis集群模式的问题

redis集群模式的问题

本文首发自「慕课网」(www.imooc.com),想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"或慕课网公众号!

作者:一凡 | 慕课网讲师


Redis 是一种开源(BSD 许可)、数据结构存储在内存中的系统,用作数据库、缓存和消息队列。Redis 提供了诸如字符串、散列、列表、集合、带范围查询的排序集合、位图、超级日志、地理空间索引和流等数据结构。Redis 内置复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久化,并通过 Redis Sentinel 和 Redis Cluster 自动分区提供高可用性。

1 集群的优势

下面是redis集群的几个明显优势。

1.1 伸缩性,数据规模不断增大的时候,容易扩容

单实例模式:只能垂直扩展,增大机器内存的容量;

集群模式:支持垂直扩展,也支持水平扩展,有更好的灵活性,也可以支持更大的容量;

1. 2 高可用,服务故障的情况,影响范围小

单实例模式:故障转移前100%不可用(slave转换为master之前);

集群模式:故障转移前部分不可用(集群规模越大,故障影响越小); 

1. 3 高性能,查询和写入的性能 

单实例模式:查询可以分散在多个slave,写入却只有一个master;

集群模式:查询有多个master和多个slave,写入也有多个master;

2 数据分片,一致性hash

实现redis集群的核心点,是针对数据的分片,这里的一致性hash算法就非常关键。

2.1 普通的hash 算法

node=hash(key)%number

数量变化和node顺序变化,导致node选择的差异性巨大,造成巨大的缓存失效。

2.2 一致性hash

hash(node) 形成虚拟节点环,hash(key)落在虚拟节点环,找到对应的node。

由于hash(node)的稳定性,与node顺序无关。node变更只影响一小部分数据。

2.3 redis cluster的hash slot算法

关系: cluster > node > slot > key

Redis Cluster在设计中没有使用一致性哈希(Consistency Hashing),而是使用数据分片引入哈希槽(hash slot)来实现。

一个 Redis Cluster包含16384(0~16383)个哈希槽,存储在Redis Cluster中的所有键都会被映射到这些slot中。

集群中的每个键都属于这16384个哈希槽中的一个,集群使用公式slot=CRC16(key)/16384来计算key属于哪个槽,其中CRC16(key)语句用于计算key的CRC16 校验和。

按照槽来进行分片,通过为每个节点指派不同数量的槽,可以控制不同节点负责的数据量和请求数。

3 集群元数据的一致性

3.1 对比:集中式存储元数据

依赖外部的集中式存储服务,比如:zookeeper, etcd等,会增加运维负担和系统复杂度。

集中式的好处在于,元数据的读取和更新,时效性非常好,一旦元数据出现了变更,就立即更新到集中式的存储中,其它节点读取的时候就可以感知到;不好在于,所有的元数据的更新压力全部集中在一个地方,可能会导致元数据的存储有压力。

3.2 gossip 协议来广播自己的状态以及自己对整个集群认知的改变

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/170446?site
推荐阅读
相关标签
  

闽ICP备14008679号