哈希函数与一致性哈希

什么是 Hash

Hash(哈希),又称“散列”。

散列(hash)英文原意是“混杂”、“拼凑”、“重新表述”的意思。

在某种程度上,散列是与排序相反的一种操作,排序是将集合中的元素按照某种方式比如字典顺序排列在一起,而散列通过计算哈希值,打破元素之间原有的关系,使集合中的元素按照散列函数的分类进行排列。

在介绍一些集合时,我们总强调需要重写某个类的 equlas() 方法和 hashCode() 方法,确保唯一性。这里的 hashCode() 表示的是对当前对象的唯一标示。计算 hashCode 的过程就称作 哈希。

为什么要有 Hash

我们通常使用数组或者链表来存储元素,一旦存储的内容数量特别多,需要占用很大的空间,而且在查找某个元素是否存在的过程中,数组和链表都需要挨个循环比较,而通过 哈希 计算,可以大大减少比较次数

一致性哈希

        一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。

        简单的理解,一致性Hash算法将整个哈希值空间组织成一个虚拟的圆环,如假设某哈希函数H的值空间为0-2^32-1(即哈希值是一个32位无符号整形),整个哈希环如下,从 0 ~ 2^32-1 代表的分别是一个个的节点,这个环也叫哈希环。

hash(服务器A的IP地址) % 2^32

        哈希环可以解决:

1,当某个服务器节点宕机时,原来的数据存储更少的变动。

通过哈希环,利用哈希函数并对结果取模的操作,映射到哈希环上,按顺时针遇到的第一个节点即为该数据存储位置。这样增加或者减少服务器节点时候,只需要改变少部分数据的存储位置。

2,数据倾斜问题。

通过对实际的物理节点建立多个虚拟节点,将虚拟节点通过哈希函数映射到哈希环上。这样因为哈希函数保证了所有虚拟节点在2^32上均匀分布的,所以当服务器宕机或者新增节点后,能保证数据存储也是均匀的,解决了数据存储不平衡问题。

同时,还可以通过控制虚拟节点的数量来管理负载。服务器节点性能较好,分配多点虚拟节点
服务器性能较差,分配少一些虚拟节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Briwisdom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值