redis 中分片的应用
在分布式集群中,对机器的添加删除,或者机器故障后自动脱离集群这些操作是分布式集群管理最基本的功能。如果采用常用的hash(object)%N算法,那么在有机器添加或者删除后,很多原有的数据就无法找到了,这样严重的违反了单调性原则。
Redis的分片底层原理:一致性hash算法
Hash一致性算法介绍
两大设计:
(1)hash环设计:非常大,从0到2^32(43亿个值),把对象(数据)和服务器映射到同一个哈希空间中;
(2)虚拟节点的设计:通过虚拟节点的引入,对象的分布就比较均衡了。
- 确定节点node的位置
- 对key进行hash运算.获取唯一的位置
- 之后顺时针找到最近的节点
- 之后链接节点进行set/get操作

平衡性
说明 : 为了解决数据分配不均,采用虚拟节点的方式实现数据的均衡(均衡性算法)
问题说明 : 如果没有虚拟节点平衡数据,则会造成数据负载不均
平衡性:尽量分散;
单调性
说明 : 当节点新增时,数据可以实现自动的迁移
重点 : 一旦节点宕机,则内存缺失,整个分片不能正常使用
原则 : 如果节点新增,则尽可能保证原有的数据不发生变化
已经分配的不能换地方
分散性
由于分布式的部署导致某些服务器不能使用全部的内存空间,同一个
key有多个位置
负载
由于分布式的部署导致某些服务器不能使用全部的内存空间.同一个
位置可能会有多个key
尽量避免分散性和负载
防止 : 尽可能使用全部的内存空间.能够有效的降低分散性和负载
总结
1、搭建缓存集群缓解服务器的访问压力;
2、通过hash算法将数据合理的分配到每一台缓存服务器中;
3、出现增减缓存服务器是hash算法存在问题;
4、引入一致性哈希算法解决这个问题:保持了单调性,避免了大量数据迁移,减小了服务器的压力;
5、通过虚拟节点方式解决哈希偏斜问题。
Redis的分片策略基于一致性Hash算法,旨在解决分布式集群中机器变动导致的数据迁移问题。该算法通过hash环和虚拟节点设计确保数据均衡分布,并维持单调性,即使在节点增减时也能尽量减少数据变化。此外,它还通过分散性和负载控制优化内存使用,避免服务器压力过大。
1359

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



