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. Django项目test中的mock概述
  2. 英特尔在移动市场另辟蹊径
  3. APUE读书笔记-第14章-高级I/O
  4. 线性系统的频率响应分析实验报告_动态系统的建模与分析
  5. WPF 分页控件添加路由事件
  6. live server插件怎么用_分享几个我日常使用的VS Code插件
  7. 【Pytorch神经网络实战案例】13 构建变分自编码神经网络模型生成Fashon-MNST模拟数据
  8. SignalR的Javascript客户端API使用方式整合
  9. python发音翻译-python实现在线翻译
  10. 二分法06:第一个错误的版本
  11. B站百万粉丝是如何做起来的?解密UP主成长之路
  12. 面试题53:vue数据的双向绑定原理(如何实现vue的双向绑定)
  13. WLAN/Wifi802.11协议简介
  14. 《神经网络与深度学习》—学习笔记
  15. Linux文件系统与持久性内存介绍:块设备、闪存(NAND/NOR)、NVDIMM(非易失性内存)、PMEM(PMDK)- ndctl
  16. 自定义springboot-starter,感受框架的魅力和原理
  17. 合泰单片机触摸例程_合泰单片机触摸按键数据手册自编写程序
  18. 为什么自学Java学不好?大概率是这3个原因
  19. python怎么查看安装了哪些库
  20. 如何使用VMware安装wim或gho格式镜像

热门文章

  1. 数据科学即将迎来“无代码”时代
  2. KVM 虚拟化原理探究(5)— 网络IO虚拟化
  3. 匿名管道(4种情况 )
  4. c/c++中指针数组和数组指针的区别
  5. MFCC里面的log energy和matlab实现
  6. 解决Mac按列浏览图加载慢的问题
  7. 先批标准化还是先激活
  8. [转载]Oracle中动态SQL详解
  9. JAVA重要基础之反射
  10. Linux网络和进程管理