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

    一致性哈希设计目标用于解决热点问题。

    一致性哈希需要满足以下几个条件:
    1:均衡性(Balance),数据应该均匀地分布到所有的缓冲中
    2:单调性(Monotonicity),当缓冲发生变化时,能够保证部分内容被分配到新的缓冲中去(包括原有已分配的内容和新加入的内容)
    3:分散性(Spread),由不同终端映射相同内容时,应保证映射到相同的缓冲中,避免发生不一致的情况。
    4:负载(Load),能够尽量降低缓冲的负荷
    5:平滑性(Smoothness),服务器的数目平滑改变和缓冲对象的平滑改变。

    如果通过哈希取余HASH(Object)%N的方式来实现缓存,当某一节点出现故障时,故障节点对应的内容将无法映射到其他节点中,而当新增一节点时,也无法将部分内容映射到新缓冲中,因此不满足一致性哈希的单调性原则。
    为解决上述问题,使用HASH环来实现,按hash后的值查找临近的缓冲节点,因此无论是删除还是新增节点,都能保证内容被影射到特定一个缓冲节点上。

    对于上面的实现方式,存在一个问题,当某个节点被删除后,该节点上所对应的缓冲范围将移动到其邻居节点上,导致其邻居节点的负载增加;当新增一个节点后,新缓存节点只能分担其邻居节点的缓存压力,不满足一致性hash的负载性。
    为解决节点变动导致的缓存负载问题,可以采用虚拟缓冲节点来处理,将hashkey的范围均分到很多个虚拟节点上,再将这些虚拟节点映射到缓冲物理节点上,
    1>当删除物理节点时,可以将该物理节点对应的虚拟节点均匀地拆分到其余物理节点上;
    2>当新增物理节点时,可以将其余各个节点上的虚拟节点拆分一部分到新物理节点上;
  • 相关阅读:
    Win2003 远程控制管理工具tsmmc 移植到XP连接多个服务器远程桌面的方法
    c++中new char(10) 和 new char[10]的区别
    64位ubuntu上安装 hadoop2.4.0
    g++编译安装
    atoi()函数实现
    LRU Cache
    Longest Palindromic Substring
    Java 中 == 和 equal 的区别 (String)
    抓取HTML
    验证码居中
  • 原文地址:https://www.cnblogs.com/gaogao67/p/10390757.html
Copyright © 2011-2022 走看看