一致性Hash算法

1.为什么要出现一致性Hash算法

1.1初探场景

        什么是一致性Hash?

        从分布式工程入手,假设我们现在正在架构一个大型互联网工程,现在我们的架构是这样的:

        前端有一堆机器组成前端集群,后端也有一堆机器组成后端集群,数据机器现在有三台机器组成数据集群。

        假设现在有一个请求打到了某一台前端机器,前端机器根据复杂均衡算法达到了后端集群的某一台机器上。

        后端集群将请求根据Hash函数,打到数据集群中的某一台机器上。

        Hash函数其实就是,算出请求对象的Hash值,然后对3取模,得到需要将请求对象打到哪台数据机器上,最终将查询请求打到对应的机器上。

d8930cae185949abada30e7262495ee2.png

        所以这里就会引出一个问题:后端机器向数据机器发起请求的Hash分配函数应该如何设计?

1.2传统设计

        假设现在使用传统设计方案,Hash函数的设计思路是:挑选出请求中的某个属性作为key,去根据key计算出对应的Hash值,再使用Hash值对3取模最终计算出请求应该打到那台数据机器上。

1.2.1Key的选择

        这里很关键的一点就是:key应该如何挑选的问题。

        如果我们挑选的key中有少量key是非常高频的,大量key是非常低频的,根据Hash函数中的特性,无随机性,相同的输入一定会导致相同的输出。这种设计无疑会导致Hash函数的输出会失去想要的离散性的特点。

        需要理解清楚:Hash函数离散性到底是怎么来的?

        Hash函数的离散性是由大量不同输入,得来的输出域离散性的特点。

        这里有几个关键点:1.输入。2.大量。3.不同。

        如果key被设计的不合理,很有可能导致Hash函数离散型消失,就会丧失了Hash函数原有的特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值