学习算法时候突然想到这个问题,先留个大致印象好了。

看了几篇博文,仍然不知所云,而这篇:

http://www.jiacheo.org/blog/174

通过比较普通集群、哈希集群与一致性哈希集群,得出了一致性哈希的优点。进而阐述一致性哈希为什么要具备四个条件:

1、平衡性

2、单调性

3、负载

4、分散性

简单说,传统的集群方式是通过普通映射(例如1-->1,2-->2)或者哈希映射(例如1 mod 3 = 1,2 mod 3 = 2,N mod M),但是缺点在于,如果节点挂掉,需要进行大量的数据迁移。普通映射的迁移代价类似数组中插入或删除元素,需要整体迁移;哈希映射变动后需要重新选择M,并对存在的节点数据进行迁移。

一致性哈希的优点在于,先将节点映射到2^32这样一个超级大环中,然后将需要cache的对象计算hashCode() mod 2^32也映射到这个环上,接着按照事先定好的顺序(如顺时针或逆时针)将对象一一存储到节点上,创造性地提出了将存储节点与存储对象放到同一个环上的思想。这样做的好处在于,当其中某个节点挂掉后,受影响的仅仅是映射到本节点的这些对象,我们只需要将这些对象重新映射到下一个节点上。增加节点的时候同理。

在映射量不是很大的时候,可能造成不平衡,这里可以引入虚拟节点来对对象进行二次映射,即Object--->virtual node--->real node

有空再附上自己理解的图片。

那么问题来了:

1、如何解决冲突?

2、如果节点的哈希和对象的哈希相等时候怎么处理?

3、如何保证数据迁移的可靠性?

参考资料:

每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)   http://blog.csdn.net/cywosp/article/details/23397179

一致性哈希算法(Consistent Hashing)http://blog.csdn.net/x15594/article/details/6270242

一致性哈希的学习和理解相关推荐

  1. 一致性哈希算法学习及JAVA代码实现分析

    1,对于待存储的海量数据,如何将它们分配到各个机器中去?---数据分片与路由 当数据量很大时,通过改善单机硬件资源的纵向扩充方式来存储数据变得越来越不适用,而通过增加机器数目来获得水平横向扩展的方式则 ...

  2. java一致性hash api_一致性哈希算法学习及JAVA代码实现分析

    戳上面的蓝字关注我们哦! 本文作者:hapjin 欢迎点击下方阅读原文 1,对于待存储的海量数据,如何将它们分配到各个机器中去?---数据分片与路由 当数据量很大时,通过改善单机硬件资源的纵向扩充方式 ...

  3. 5分钟读懂一致性哈希算法原理

    目录 一.普通 hash 算法 (取模算法) 1.普通 hash算法 与 使用场景描述 2.普通 hash 算法的缺陷 二.一致性哈希算法 2.一致性 hash 算法的优点 3.hash 环的倾斜与虚 ...

  4. 一致性哈希算法的理解

    关于一致性哈希算法,网上有很多博文都有讲解.推荐2个. http://blog.codinglabs.org/articles/consistent-hashing.html http://blog. ...

  5. 深入理解分布式技术 - 负载均衡实现之一致性哈希算法

    文章目录 概述 常见的负载均衡策略 及优缺点 哈希取模路由 一致性哈希 小结 概述 在业务开发中,缓存服务和其他数据服务一样,需要满足高可用性,而高可用最常用的手段就是集群扩展. 目前 Redis 流 ...

  6. 5分钟理解一致性哈希算法

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取近百本电子书入口 来源:22j.co/b7Qq 一致性哈希算法在1997年由 ...

  7. 理解一致性哈希算法(consistent hashing)

    出处:http://blog.csdn.net/cywosp/article/details/23397179     一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法, ...

  8. 哈希分布与一致性哈希算法简介

    前言 在我们的日常web应用开发当中memcached可以算作是当今的标准开发配置了.相信memcache的基本原理大家也都了解过了,memcache虽然是分布式的应用服务,但分布的原则是由clien ...

  9. 面试必会系列 - 3.1 Redis知识点大汇总(数据类型,内存模型,持久化,缓存击穿,集群,一致性哈希等等)

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  10. 先来先服务算法代码_一致性哈希算法编写

    今天我想先给大家科普下一致性哈希算法这块,因为我下一篇文章关于缓存的高可用需要用到这个,但是又不能直接在里面写太多的代码以及关于一致性hash原理的解读,这样会失去对于缓存高可用的理解而且会造成文章很 ...

最新文章

  1. Microbiome:NGLess语言实现快速可重复分析宏基因组的流程NG-meta-profiler
  2. recyclerview 滑动到当前_Android recyclerview的滑动到指定的item
  3. 统计学习基础:数据挖掘、推理和预测_数据挖掘——智能财务进阶之梯(含视频、PPT)...
  4. 三问JavaBean
  5. GDCM:gdcm::CompositeNetworkFunctions的测试程序
  6. GIT 中同时 push 代码到多个远程仓库
  7. qt超强精美绘图控件 - QCustomPlot一览
  8. Elasticsearch版本控制理解
  9. 2019年保研夏令营复试经验分享(浙大软件/南大软件/南航计算机)
  10. Opencv 傅立叶变换 傅立叶逆变换
  11. cmos逻辑门传输延迟时间_【转载】CMOS与TTL电路的区别
  12. python英文词频统计软件_英语词频统计软件功能介绍
  13. HTML5页面结构标签
  14. HDMI接口是什么?HDMI接口的基础知识讲解
  15. 2345浏览器如何启用过滤弹窗广告
  16. 松柏先生:制胜的一拳靠的不是运气,而是洞察力!
  17. Linux系统编程——alarm函数
  18. windows 运维工具
  19. 灰度共生矩阵(Gray-level Co-occurrence Matrix,GLCM)
  20. 千锋教育python2104期总结day4

热门文章

  1. Android性能优化之修复游戏中内存泄漏(java层)
  2. 基于nginx容器的动态流量管理方案
  3. openssl安装问题合辑
  4. 大学生如何增强网络安全意识?
  5. 论如何成为一个技术大咖?
  6. 2022年新能源汽车报告-智能座舱产业链将迎来全面重构
  7. Ubuntu释放VirtualBox虚拟硬盘文件大小
  8. 青少年爱晚睡 忧郁症易找上身
  9. c 语言中字符与数字的转化,关于字符串与数字的转化(C语言)
  10. 来看室内外一体化导航,体验AR+GIS,酷不酷?