48

负载均衡策略之一致性哈希

 6 years ago
source link: https://mozillazg.com/2019/03/load-balancing-strategy-algorithm-consistent-hashing?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

所谓的一致性哈希策略指的是根据后端节点的某个固定属性计算 hash 值,然后把所有节点计算出来的 hash 值组成一个 hash 圆环。 请求过来的时候根据请求的特征(比如,来源 ip 、cookie、用户名等特定信息)计算该特征的 hash 值(使用跟计算后端节点 hash 值相同的 hash 函数进行计算), 然后顺时针查找 hash 环上的 hash 值,第一个比请求特征的 hash 值大的 hash 值所对应的节点即为被选中的节点。

RFZbQrI.png!web

(图片来源出处: memcached全面剖析--4. memcached的分布式算法

上面的 hash 圆环有一个问题就是节点的 hash 值不一定是均匀的分布在 hash 环上的,这样就会导致部分节点上承受太多的请求。

解决的办法也比较简单,然后就是引入虚拟节点:每个节点重复 n 次,把这些虚拟节点的 hash 值(跟实际节点的 hash 值不一样,也就是说需要在节点属性中加点东西保证每个虚拟节点跟实际节点的 hash 值不一样,互相之间也要不一样)也加入到 hash 环中以此来保证分布更均匀。

这里有一个需要注意的点那就是临界值的处理问题:可能会有部分请求处在 hash 环上最后一个点的后面,即 hash 环上找不到一个比请求特征的 hash 值更大的一个 hash。

对于这种无法在 hash 环上找到对应的下一个节点的情况,一般是把 hash 环上的第一个 hash 值作为被选中的点,即进行第二圈的顺时针查找。


Recommend

  • 31

    有没有好奇过redis、memcache等是怎么实现集群负载均衡的呢? 其实他们都是通过一致性hash算法实现节点调度的。 讲一致性hash算法前,先简述一下求余hash算法: hash(object)%N 一个缓存服...

  • 52
    • 掘金 juejin.im 6 years ago
    • Cache

    一致性Hash在负载均衡中的应用

    作者:不洗碗工作室 - Marklux 出处:Marklux's Pub 版权归作者所有,转载请注明出处 简介 一致性Hash是一种特殊的Hash算法,由于其均衡性、持久性的映射特点,被广泛的应用于负载均衡领域,如nginx和memcached都采用了一致性

  • 63
    • mozillazg.com 6 years ago
    • Cache

    负载均衡策略之轮询策略

    轮询选择 (Round Robin) 轮询选择指的是从已有的后端节点列表中按顺序依次选择一个节点出来提供服务。 一种轮询选择的方法是把所有的节点看做一个一个的点,并把这些点连起来组成一个圆, 轮询选择...

  • 46

    两次随机选择(Two Random Choices) 两次随机选择策略出自论文 《The Power of Two Random Choices: A Survey of Tech...

  • 58

    本文简单介绍一下有限负载一致性哈希(Consistent Hashing with Bounded Loads)(或者叫有界负载一致性哈希、有负载界限/上限的一致性哈希)这个负载均衡策略。 之前介绍的一致性哈希策略 有一个缺陷,那就是没有解决热点...

  • 26
    • blog.soliloquize.org 5 years ago
    • Cache

    RPC负载均衡策略学习

    RPC负载均衡策略学习 發表於 2019-10-01 09:59:15   负载均衡策略对于RPC的请求吞吐来说...

  • 24

    前言 上篇文章介绍了如何实现gRPC负载均衡,但目前官方只提供了 pick_first 和 round_robin 两种负载均衡策略,轮询法 round_robin 不能满足因服务器配置不同而承担不同负载量,这篇...

  • 14
    • studygolang.com 4 years ago
    • Cache

    负载均衡 | 一致性hash算法

    v2-3244e076d29c02565e07a29be205e91a_1440w.jpg 讲一致性hash算法前,先简述一下求余hash算法:

  • 3
    • my.oschina.net 3 years ago
    • Cache

    长文图解七种负载均衡策略

    欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我个人微信「java_front」一起交流学习 1 三组概念 负载均衡、集群容...

  • 3

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK