一致性hash算法是一种很好的数据缓存设计方案,它满足平衡性、分散性、单调性、负载均衡。
1、平衡性(Balance):平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。
2、单调性(Monotonicity):单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中时,哈希的结果应能够保证原有已分配的内容可以被映射到原有的或者新的缓冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。
3、分散性(Spread):在分布式环境中,终端有可能看不到所有的缓冲,而是只能看到其中的一部分。当终端希望通过哈希过程将内容映射到缓冲上时,由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲区中。这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓冲中去,降低了系统存储的效率。分散性的定义就是上述情况发生的严重程度。好的哈希算法应能够尽量避免不一致的情况发生,也就是尽量降低分散性。
4、负载(Load):负载问题实际上是从另一个角度看待分散性问题。既然不同的终端可能将相同的内容映射到不同的缓冲区中,那么对于一个特定的缓冲区而言,也可能被不同的用户映射为不同的内容。与分散性一样,这种情况也是应当避免的,因此好的哈希算法应能够尽量降低缓冲的负荷。

一致性哈希算法的具体优点如下:

优点1

1.可以有效的处理机器的添加和删除,在保持了单调性的同时,将数据的迁移达到了最小,对分布式集群非常合适,可以避免大量的数据迁移,减小服务器的压力。

优点2

2.还可以解决机器负载不均的问题,引入了虚拟节点机制,即对每一台机器通过不同的哈希函数计算出多个哈希值,对多个位置都放置一个服务节点,称为虚拟节点。节点数变多了,根据哈希函数的性质,平衡性自然会好。此时数据定位算法不变,只是多了一步虚拟节点到实际节点的映射。

一致性hash算法学习相关推荐

  1. 一致性 Hash 算法学习(分布式或均衡算法)

    简介: 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的 ...

  2. 一致性Hash算法(KetamaHash)的c#实现

    Consistent Hashing最大限度地抑制了hash键的重新分布.另外要取得比较好的负载均衡的效果,往往在服务器数量比较少的时候需要增加虚拟节点来保证服务器能均匀的分布在圆环上.因为使用一般的 ...

  3. 从jredis中学习一致性hash算法

    jredis是redis的java客户端,通过sharde实现负载路由,一直很好奇jredis的sharde如何实现,翻开jredis源码研究了一番,所谓sharde其实就是一致性hash算法.其实, ...

  4. 对一致性Hash算法,Java代码实现的深入研究

    一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...

  5. 分布式一致性hash算法

    写在前面   在学习Redis的集群内容时,看到这么一句话:Redis并没有使用一致性hash算法,而是引入哈希槽的概念.而分布式缓存Memcached则是使用分布式一致性hash算法来实现分布式存储 ...

  6. 一致性 Hash 算法原理总结

    一致性 Hash 算法是解决分布式缓存等问题的一种算法,本文介绍了一致性 Hash 算法的原理,并给出了一种实现和实际运用的案例: 一致性 Hash 算法背景 考虑这么一种场景: 我们有三台缓存服务器 ...

  7. 什么是一致性Hash算法?

    原文链接:https://blog.csdn.net/bntX2jSQfEHy7/article/details/7954936 最近有小伙伴跑过来问什么是Hash一致性算法,说面试的时候被问到了,因 ...

  8. 什么是一致性Hash算法? 1

    最近有小伙伴跑过来问什么是Hash一致性算法,说面试的时候被问到了,因为不了解,所以就没有回答上,问我有没有相应的学习资料推荐,当时上班,没时间回复,晚上回去了就忘了这件事,今天突然看到这个,加班为大 ...

  9. 良好的分布式cahce系统中,一致性hash算法需要满足什么?

    良好的分布式cahce系统中,一致性hash算法需要满足什么?你知道吗?让我们来一起学习下吧. 良好的分布式cahce系统中,一致性hash算法应该满足哪些方面 平衡性(Balance).单调性(Mo ...

最新文章

  1. Java中的浅拷贝与深拷贝
  2. 4一20ma电流有源与无源区别_信号隔离安全栅与信号隔离器区别!
  3. 哪些是能安装mysql的文件_安装mysql详细步骤有哪些?
  4. 2013年4月20日 通用权限管理系统组件V3.8功能改进说明
  5. dos 必知八项命令
  6. 网络学习(三)安装VMware Workstation 7
  7. 流氓百度乱发短信的经历
  8. LINUX让环境变量立即生效的方法
  9. 【一周学术热点】预训练模型,文本生成,模型蒸馏
  10. 计算机桌面时间设置,桌面的时钟怎么设置
  11. Win10账户锁定的解除方法
  12. 深度互学习-Deep Mutual Learning:三人行必有我师
  13. 谷歌开源图片压缩算法Guetzli实测体验报告
  14. Thrift交流(二)thrift服务端和客户端实现 Nifty
  15. 手写识别ocr java,OCR 指的是手写文字技术_学小易找答案
  16. linux 进程 ksoftirqd/n 占用cpu 100%
  17. 用计算机处理图像属于啥技术,计算机图像处理技术在网页设计中的应用
  18. Windows10精简优化无人值守安装
  19. POND:高效的 Python 通用对象池库
  20. 排版设计之统一元素间隔

热门文章

  1. pyspider 数据存储到mongoDB中
  2. 过滤access日志前5条数据
  3. 用自动化构建工具增强你的工作流程——gulp
  4. 比较HTML元素和Native组件的区别
  5. KMP算法字符串模式匹配
  6. sed替换字符时 ' /等符号的处理
  7. 深入学习MongoDB
  8. centos7+jexus5.8.3部署ASP.NET的MVC项目
  9. 搬砖的也能学Python----if - elif 语句
  10. 浏览器启动__chrome浏览器