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

    一致性哈希算法四性(以多cache节点环境为例)


    1. 均衡性(Balance):哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。

    2. 单调性(Monotonicity):如果已经有一些内容通过哈希分派到了相应的缓冲节点中,又有新的缓冲节点加入到系统中,那么哈希的结果应能够保证原有已分配的内容(失效后)可以被映射到新的缓冲节点中去,而不会被(再次)映射到旧的缓冲节点中。在移除或添加一个 cache节点后,不损坏已有内容-节点间的映射关系。

    3. 避免分散(Spread):由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲节点中。这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓冲中去,降低了系统存储的效率。

    4. 避免负载(Load):既然不同的终端可能将相同的内容映射到不同的缓冲节点中,那么对于一个特定的缓冲节点而言,也可能被不同的终端映射为不同的内容。与分散性一样,这种情况也是应当避免的,因此好的哈希算法应能够尽量降低缓冲的负荷。

    一致性哈希算法路由


    1. 内容映射与节点映射:内容和节点都会被映射到同一个hash空间,并分别获得一个与他们唯一对应的key,所以他们的key处于同一值域,如都属于0000到9999的整数集合。内容可被存储到与其所获得的key最接近的节点上,例如key为1001的内容,系统中有key为1000,1010,1100的节点,该内容将被映射到1000节点。

    2. 虚拟节点:hash 算法并不是保证绝对的平衡,如果节点较少的话,内容并不能被均匀的映射到各节点上。为了满足平衡性的要求,而在hash空间中增加平衡虚拟节点,即物理节点在 hash 空间的复制品(replica)。一个物理节点对应若干个虚拟节点,每个虚拟节点在 hash 空间中也拥有自己唯一的key,凡落在虚拟节点范围的内容都将被映射到所属的物理节点。

    3. 上下行节点:上行节点指key值大于当前节点中最小值的节点,下行节点指key值小于当前节点中最大值的节点。一致性哈希要求每个节点存储其上下行节点信息(如IP)。

    4. 内容搜索:收到查询请求的节点如果发现自己拥有被请求的目标,可以直接向发起查询请求的节点返回确认;如果没有找到,可以转发请求到自己的上下行节点。

    5. 节点退出与加入:在节点退出或加入系统时,相邻的节点必须及时更新路由信息,这就要求节点不仅存储直接相连的上下行节点信息,还要知道一定深度n跳的间接上下行节点信息,并且动态地维护节点列表。


    一致性哈希基本解决了在P2P环境中最为关键的问题——如何在动态的网络拓扑中分布存储和路由。每个节点仅需维护少量邻近节点的信息,并且在节点加入/退出系统时,仅有相关的少量节点参与到拓扑的维护中。但是一致性哈希的路由算法尚有不足之处,在查询过程中,查询消息要经过O(N)步(N代表系统内的节点总数)才能到达被查询的节点。

  • 相关阅读:
    python做一个数独小游戏
    通过进程快照枚举进程的信息
    单向链表 malloc与free
    指针常量&指向常量的指针
    变量在不同区域的默认初始值
    数组指针和指针数组
    堆的首地址和堆的指针
    创建对象时,系统会自动调用构造函数和析构函数
    对象所占内存的大小与首地址
    范磊 C++ 第8章 指针
  • 原文地址:https://www.cnblogs.com/XiongMaoMengNan/p/7603996.html
Copyright © 2011-2022 走看看