原创

算法学习--------一致性哈希

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41298572/article/details/89675402

首先介绍一下传统的应对访问量数据量较大请求的时候 。

  电脑表示前端,服务器表示后台。

       前端每一台电脑都使用相同的哈希函数,当一个请求过来的时候,无论是到哪个前端哪个电脑,计算出请求的哈希都是一样的,哈希%3得到0-2,然后确定出他要归哪台服务器处理,所以一个用户的请求我们基本固定在一台服务器上,他的所有信息我都存在同一台服务器上。这是传统的处理方法,这里有一个问题,比如淘宝平时用户量是正常的,常规配置三台服务器处理请求。但是到了双11,三台是远远不够的,就要添加服务器处理,那么问题来了。添加了服务器,那之前的所有哈希都要重新计算,用户之前的所有缓存就要重新迁移 这样的数据量太大了。

     那么就引出了一致性哈希,一致性哈希是一种分布性算法,主要是为了解决负载均衡。

      之前我们需要将请求计算出取%,但是一致性哈希。我们将哈希的所有可能值均匀的赋值给一个圆环  

      图片内容参考引用于  https://www.cnblogs.com/lpfuture/p/5796398.html

       最左边的图表示了哈希的均匀分布,然后计算计算服务器的哈希,比如计算他的用户名,然后将它接入的圆的相应位置,然后有数据请求进来,也接入圆,顺时针离他最近的服务器负责处理他的请求,插入服务器的话,只需要把受影响的一部分传递给新的即可。

        当然这样也有一个问题,比如刚好三台服务器Hash差不多,那么三台挨着很近。那么有一台处理的请求特别多,其余特别少,不均衡。 这样的话,一个服务器配置出N个虚拟节点,假设100个,然后计算hash排列到圆上。当数量很大时候,哈希结果是均匀的,所以圆上的排列也是均匀的,就解决了负载均衡的问题

文章最后发布于: 2019-04-29 15:27:40
展开阅读全文
0 个人打赏

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览