2019独角兽企业重金招聘Python工程师标准>>>

一致性哈希算法——虚拟节点

一致性哈希算法是分布式系统中常用的算法。比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数,如果有一个机器加入或退出这个集群,则所有的数据映射都无效了,如果是持久化存储则要做数据迁移,如果是分布式缓存,则其他缓存就失效了。

因此,引入了一致性哈希算法:

把数据用hash函数(如MD5),映射到一个很大的空间里,如图所示。数据的存储时,先得到一个hash值,对应到这个环中的每个位置,如k1对应到了图中所示的位置,然后沿顺时针找到一个机器节点B,将k1存储到B这个节点中。

如果B节点宕机了,则B上的数据就会落到C节点上,如下图所示:

这样,只会影响C节点,对其他的节点A,D的数据不会造成影响。然而,这又会造成一个“雪崩”的情况,即C节点由于承担了B节点的数据,所以C节点的负载会变高,C节点很容易也宕机,这样依次下去,这样造成整个集群都挂了。

为此,引入了“虚拟节点”的概念:即把想象在这个环上有很多“虚拟节点”,数据的存储是沿着环的顺时针方向找一个虚拟节点,每个虚拟节点都会关联到一个真实节点 ,如下图所使用:

图中的A1、A2、B1、B2、C1、C2、D1、D2都是虚拟节点,机器A负载存储A1、A2的数据,机器B负载存储B1、B2的数据,机器C负载存储C1、C2的数据。由于这些虚拟节点数量很多,均匀分布,因此不会造成“雪崩”现象。

================END================

转载于:https://my.oschina.net/xinxingegeya/blog/386103

一致性哈希算法——虚拟节点相关推荐

  1. 一致性hash算法虚拟节点_一致性哈希算法——虚拟节点

    一致性哈希算法--虚拟节点 一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是 ...

  2. Go -- 一致性哈希算法

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

  3. 一致性哈希算法及其在分布式系统中的应用

    摘要 本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用.首先本文会描述一个在日常开发中经常会遇到的问题场景,借此介绍一致性哈希算法以及这个 ...

  4. 一致性哈希算法——算法解决的核心问题是当slot数发生变化时,能够尽量少的移动数据...

    一致性哈希算法 摘自:http://blog.codinglabs.org/articles/consistent-hashing.html 算法简述 一致性哈希算法(Consistent Hashi ...

  5. 一致性哈希算法在分布式缓存中的应用

    一.应用场景 假设我们有一个网站,最近发现随着流量增加,服务器压力越来越大,之前直接读写数据库的方式不太给力了,于是我们想引入Redis作为缓存机制.现在我们一共有三台机器可以作为Redis服务器,如 ...

  6. 分布式一致性哈希算法

    一致性哈希算法及其在分布式系统中的应用 作者 张洋 | 发布于 2011-10-18 分布式 一致性哈希 摘要 本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及 ...

  7. 的一致性哈希_五分钟看懂一致性哈希算法

    作者简介: 华哥 10年+后端开发工作经验, 主要分享:关于java体系的知识,如:java基础知识/数据结算/算法,Spring/MyBatis/Netty源码分析,高并发/高性能/分布式/微服务架 ...

  8. (转)一致性哈希算法原理

    一致性Hash算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致 ...

  9. 一致性哈希算法--数据库应用

    背景   在分布式数据库中,尤其是Share nothing的MPP架构中,为了充分利用每台服务器的资源,通常会将超大表数据进行分片分布到多个数据节点中,提升数据库的查询性能.   分区并不是生成新的 ...

最新文章

  1. 2022-2028年中国喷涂速凝橡胶行业市场调研分析及未来前景分析报告
  2. JavaScript的应用
  3. c/c++中运行外部程序
  4. jsp页面间的传值方法
  5. SAP屏幕设计器专题:树控件的使用(九)
  6. Maven远程仓库:pom依赖以及jar包下载
  7. Nutch使用方法简介
  8. 限流中间件IpRateLimitMiddleware的使用
  9. springboot 事务统一配置_Spring Boot实现分布式微服务开发实战系列(五)
  10. (转)Arcgis for js加载天地图
  11. entsel约束条件lisp_autocad-plugin
  12. 安装wsl kali 遇到WslRegisterDistribution failed with error: 0x80070057 Error: 0x80070057解决
  13. 芬兰手游业25年发展史
  14. Ubuntu释放单张显卡显存
  15. proj4,七参数与坐标转换原理
  16. [2020首届祥云杯]带音乐家
  17. Java日志框架简介
  18. arista eos系统从零开始研究(1)
  19. Android 模拟点击、滑动、返回
  20. (知乎)你是如何变的自律的

热门文章

  1. ng-admin引用UEditor 插件 Angular-UEditor
  2. WebSocket 协议 RFC 文档(全中文翻译)
  3. centos7 安装vsftpd和配置以及虚拟用户权限分配
  4. xen虚拟化部署遇到的问题(持续更新)
  5. Densenet论文解读 深度学习领域论文分析博主
  6. 【字符串全排列】LeetCode 567. Permutation in String
  7. 【CV】如何使用Tensorflow提供的Object Detection API --2--数据转换为TFRecord格式
  8. python plot linestyle 线型颜色及线条控制(linestyle、marker、color)
  9. 部署和操作 Enterprise Library 加密应用程序块
  10. Python replace() 和 re.sub() 字符串字符替换