赞
踩
本文首发自「慕课网」(www.imooc.com),想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"或慕课网公众号!
作者:一凡 | 慕课网讲师
Redis 是一种开源(BSD 许可)、数据结构存储在内存中的系统,用作数据库、缓存和消息队列。Redis 提供了诸如字符串、散列、列表、集合、带范围查询的排序集合、位图、超级日志、地理空间索引和流等数据结构。Redis 内置复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久化,并通过 Redis Sentinel 和 Redis Cluster 自动分区提供高可用性。
下面是redis集群的几个明显优势。
单实例模式:只能垂直扩展,增大机器内存的容量;
集群模式:支持垂直扩展,也支持水平扩展,有更好的灵活性,也可以支持更大的容量;
单实例模式:故障转移前100%不可用(slave转换为master之前);
集群模式:故障转移前部分不可用(集群规模越大,故障影响越小);
单实例模式:查询可以分散在多个slave,写入却只有一个master;
集群模式:查询有多个master和多个slave,写入也有多个master;
实现redis集群的核心点,是针对数据的分片,这里的一致性hash算法就非常关键。
node=hash(key)%number
数量变化和node顺序变化,导致node选择的差异性巨大,造成巨大的缓存失效。
hash(node) 形成虚拟节点环,hash(key)落在虚拟节点环,找到对应的node。
由于hash(node)的稳定性,与node顺序无关。node变更只影响一小部分数据。
关系: 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 校验和。
按照槽来进行分片,通过为每个节点指派不同数量的槽,可以控制不同节点负责的数据量和请求数。
依赖外部的集中式存储服务,比如:zookeeper, etcd等,会增加运维负担和系统复杂度。
集中式的好处在于,元数据的读取和更新,时效性非常好,一旦元数据出现了变更,就立即更新到集中式的存储中,其它节点读取的时候就可以感知到;不好在于,所有的元数据的更新压力全部集中在一个地方,可能会导致元数据的存储有压力。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。