• 一致性哈希学习


    转自:https://developer.huawei.com/consumer/cn/forum/topic/0203810951415790238?fid=0101592429757310384

    https://blog.csdn.net/weixin_43217065/article/details/107659713

    1.普通哈希存在的问题

     

     对服务器的数量取模,当服务器数量变动的时候,所有缓存的位置都要发生改变。

    当增加或者减少一台服务器(故障),hash(a.png) % 5 = ?或者hash(a.png) % 3 = ?结果肯定不会映射到第2台服务器上,那么所有缓存在一定时间内是失效的,当应用无法从缓存中获取数据时,则会向后端数据库请求数据,会出现雪崩的情况?

    2.一致性哈希

    一致性哈希是指将「存储节点」和「数据」都映射到一个首尾相连的哈希环上。

    一致性Hash算法也是使用取模的方法,对2^32取模,将整个哈希值空间组织成一个虚拟的圆环,将各个服务器使用Hash进行一个哈希,具体可以选择服务器的IP或主机名作为关键字进行哈希。【那需要先将ip或者主机名的字符串转换为整型之后再对2^32取模?那string->int需要自己定义?】每次根据要缓存的对象计算得到hash值,在hash环上顺时针查找距离最近的缓存服务器节点:

     根据一致性Hash算法,数据A会被定为到Node A上,B被定为到Node B上,C被定为到Node C上,D被定为到Node D上。

    2.1 容错性和可扩展性

    减少服务器:

    (对应到网络抖动判断服务不可用的情况)

    假设Node C不幸宕机,可以看到此时服务器A、B、D中原有的缓存对象不会受到影响,仍可正常访问,只有C对象被重定位到Node D。

    一般的,在一致性Hash算法中,如果一台服务器不可用,则受影响的数据仅仅是此服务器到其环空间中前一台服务器(即沿着逆时针方向行走遇到的第一台服务器)之间的数据,其它不会受到影响。

    增加服务器: 

    (对应到部署一个新服务的情况)

     假设在服务区B和C之间增加一台,那么受影响的数据仅仅是新服务器到其环空间中前一台服务器(即沿着逆时针方向行走遇到的第一台服务器)之间数据,其它数据也不会受到影响。

    一致性Hash算法对于节点的增减都只需重定位环空间中的一小部分数据,具有较好的容错性和可扩展性。

    3. 哈希环数据倾斜问题

    一致性哈希算法不能够均匀地分布节点,会出现大量请求都集中在一个节点的情况,在这种情况下进行容灾与扩容时,容易出现雪崩的连锁反应。

    之后再继续了解。

  • 相关阅读:
    史上最全最新java面试题合集二(附答案)
    史上最全最新Java面试题合集一(附答案)
    修改vsftpd的默认根目录/var/ftp/pub到其他目录
    重置密码解决MySQL for Linux错误:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    虚拟机下的Linux连接校园网上网问题
    CentOS7 安装Chrome
    CentOS7 卸载Firefox
    100个写作高级词
    【二叉搜索树】的详细实现(C++)
    【红黑树】的详细实现(C++)
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/16565095.html
Copyright © 2020-2023  润新知