hash一致性

1.散列算法在分布式中分片计算出现的问题
	1.1 所有的散列算法都存在数据倾斜;
        假设1000条数据存储
        node1:338
        node2:321;
        node3:341;
        少量数据可以接受,上亿条数据的存储需要,这一点点的数据倾斜,或造成其中某台机器承受大于其他服务器上千万的数据
    1.2 哈希取余的缺点
        会造成服务器节点扩容,减少节点时的数据迁移量过大的问题;
        如果使用hash取余算法完成分片计算,集群节点越多的情况下做扩容删除操作,数据未命中概率越大,雪崩越有可能发生
2.jedis实现了hash一致性的散列算法;
    介绍:1997出现的算法,由麻省理工学院的大二学生在数据竞赛中发明的;引入了一个43亿的正整数区间;被称之为hash环;利用散列算法,将节点信息,key值同事映射到这个区间之内,判断key与节点的对应关系,一旦对应上,key值将会保存在这个节点;
    ![hash散列算法](https://img-blog.csdnimg.cn/20190826150400267.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTkwMjk0,size_16,color_FFFFFF,t_70)
	记录中间结果后,利用key值做顺时针寻找最近的节点映射,把key对应到该节点:
	hash散列算法得出的结论
	node1保存key1
	node2保存key2
	node3保存key 3 4 5
	
	集群在扩容时,数据的迁移情况
	![集群扩容时的情况](https://img-blog.csdnimg.cn/20190826150847326.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTkwMjk0,size_16,color_FFFFFF,t_70)
	哈希环上绿色弧线对应的所有key需要迁移
	当集群的节点越多的时候,扩容的时候迁移数据量越小,未命中概率越小,小到一定程度时,无需关心
	
	解决数据平衡问题
	引入虚拟节点;不同实现hash一致性算法的语言,实现的过程不同
	jedis中,收集节点信息时,构造方法中有一个叫weight(权重值);权重值越大,节点保存的数据越多
	
	 默认情况下,每一个真是节点对应160*weight个虚拟节点,默认weight=1
	 node1是真实节点
	 node1:10.9.17.153:6379
	 node1-1:10.9.17.153:6379#1
	 node1-2:10.9.17.153:6379#2
	 node1-3:10.9.17.153:6379#3
	 虚拟节点的信息字符串也会进行散列计算,投影到hash环上
	 ![虚拟节点投影到hash环上](https://img-blog.csdnimg.cn/20190826152407482.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTkwMjk0,size_16,color_FFFFFF,t_70)
	 jedis实现的hash一致性,如果想要更好的平衡存储的keyzhi,可以在创建信息对象时,将weight值变大;
	 企业中将key值平衡性,将key值本身也做散列计算;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值