zoukankan      html  css  js  c++  java
  • 一致性哈希算法

    Cassandra,memcached,redis等分布式系统中,使用一致性哈希算法来保证数据的一致性。

    在redis中,为了在server node增加或减少时,尽量均匀的将缓存分布到多个server node上,同时尽可能少的移动数据,提高缓存命中率,可以使用一致性哈希算法。

    数据定位过程:

    将整个Hash值空间视作一个虚拟圆环,整个空间按顺时针方向组织。

    使用hash函数对server node进行hash,确定各node在圆环上的位置。

    使用同样的hash函数对data进行hash,确定data在圆环上的位置。从data所在位置沿环顺时针“行走”,遇到的第一个server node就是其应该定位到的server node,即为存储该data的server。

    容错性和可扩展性:

    在一致性哈希算法中,如果一台服务器不可用,则受影响的数据仅仅是此服务器到其环空间中前一台服务器。

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

    解决数据倾斜问题:

    一致性哈希算法在服务节点太少时,容易因为节点分部不均匀而造成数据倾斜问题。

    为了解决这种数据倾斜问题,一致性哈希算法引入了虚拟节点机制,即对每一个服务节点计算多个哈希,每个计算结果位置都放置一个此服务节点,称为虚拟节点。在实际应用中,通常将虚拟节点数设置为32甚至更大,因此即使很少的服务节点也能做到相对均匀的数据分布。

    Refs:

    https://www.cnblogs.com/lpfuture/p/5796398.html

  • 相关阅读:
    今天又能去健身了
    今天招受情感打击
    js实现菜单命令
    爱好者
    杂七杂八
    wu
    后缀数组学习笔记——罗穗骞倍增算法代码
    POJ 3261 Milk Patterns
    URAL 1158 Censored!
    POJ 1743 Musical Theme
  • 原文地址:https://www.cnblogs.com/cnsec/p/13547567.html
Copyright © 2011-2022 走看看