参照:https://www.cnblogs.com/moonandstar08/p/5405991.html

参照:http://www.cnblogs.com/haippy/archive/2011/12/10/2282943.html

以下内容,仅供自己理解复习,表达能力有限,还请您见谅!

hash一致性解决的问题:如经典的服务器负载均衡,在前端通过一个相同的hash函数计算出一个数值,取模总服务器数,然后把请求分发到相对应的服务器上,依次实现负载均衡。但是如果突然之间,流量增大,那么就会出现服务器数量要扩容的情况,这样的代价很大,需要重新计算出新的hash,迁移各服务器上的数据。hash一致性正是用来解决这个问题,花少量的代价。

首先我们抛弃原始的hash取模找服务器,而是把hash函数算出来的值用一个抽象的环来表示。假设hash值的范围是0~2^64-1。然后把服务器映射上去,那么每次数据key通过相同的hash算出来一个值,也映射到环上,顺时针查找离服务器最近的点,该服务器就存储着对应的数据,就可以查到了。具体的查找服务器,当然不是遍历,那太耗时了,因为这个每台服务器的hash值用一个有序数组存储起来(大于等于,最右边的),所以可以通过二分的方法来确定相应的最近服务器。

再分析加机器的代价,如果用hash一致性的话,那么每次只需要把前一台服务器对应的环上在其后面的数据给迁移进新加的服务器即可。减服务器,同理,只需把这台服务器的数据转移到环上的后面一台服务器上即可。

这也迎来了两个问题,其一如果服务器数量非常的少,假设只有三台,那么hash函数的概率平均性就很难体现出来了,可能出现三台服务器在环山的距离很近。那么负载就不均衡了,可能某一台服务器要处理90%的数据处理,而其余两台只需分担10%的数据处理。这就很难受了。其二,如果这三台服务器刚好负载均衡,那么再加一台服务器的时候就又不负载均衡了。解决的方法,就是引出一个新的概念,虚拟节点,每台服务器给分配(假设1000个虚拟节点)。每一个虚拟节点都在hash环上占一个值,但是这些虚拟节点对应哪台服务器,就去哪台服务器上找数据。这样就把hash环给均衡了,真的很美妙。

以上所描述的就是一致性hash。把握一下几点:1.抛弃hash取模,而是把hash值拿出来,形成一个环。2.把服务器映射到环上,顺时针找最近的服务器。3.虚拟节点,不把服务器映射上去了,而是把服务器对应的虚拟节点映射上去,用一个路由表记录相应的虚拟节点对应的服务器。这样虚拟节点就完全把hash值相均衡化了,依此,实现负载均衡。

hash一致性的更多相关文章

  1. nginx+php+memcache实现hash一致性memcache 集群

    我们工作中可能会遇到key-value数据库,如果我们面对的不止一台memcache服务器,而是很多台.那么现在就回出现一个问题: 当我们访问nginx服务器的时候,我们会判断memcache中是否有 ...

  2. 【java】安全加密MessageDigest的功能及用法【hash一致性算法】

    链接地址:https://blog.csdn.net/ma1kong/article/details/2662997 1.查看MessageDigest源码的注释说明 2.和hash一致性算法 什么关 ...

  3. 【hash】什么是hash,什么是哈希,什么是hash散列,什么是hash一致性算法【关于hash的详解】

    什么是hash,什么是哈希,什么是hash散列,什么是hash一致性算法

  4. consistent hash(一致性哈希算法)

    一.产生背景 今天咱不去长篇大论特别详细地讲解consistent hash,我争取用最轻松的方式告诉你consistent hash算法是什么,如果需要深入,Google一下~. 举个栗子吧: 比如 ...

  5. java实现hash一致性算法

    import org.apache.commons.lang3.RandomUtils; import org.apache.commons.lang3.StringUtils; import jav ...

  6. hash一致性算法

    一致性hash算法是,1097麻省理工提出的分布式hashDHT实现算法,极倔internet的热点问题 平衡性 hash结果尽可能的分布到所有的缓存中去,缓冲空间利用率最高 单调性 保持已有的缓存能 ...

  7. dht 分布式hash 一致性hash区别

    先有一致性hash :一致性哈希,似乎最早提出是在分布式缓存里面的,让节点震荡的时候,影响最小.不过现在已经应用在分布式存储和p2p系统里面. dht 是p2p领域的概念,内有三大概念是由keyspa ...

  8. 【Hash一致性算法】什么是Hash一致性算法

    目录 1. 一致性Hash算法简介 环形Hash空间 把数据通过一定的hash算法处理后映射到环上 将机器通过hash算法映射到环上 机器的删除与添加 平衡性 本文转载自博客 1. 一致性Hash算法 ...

  9. Hash一致性算法底层原理

    大纲 Hash取余算法 判定哈希算法好坏的四个定义 一致性Hash算法的两大设计 Hash取余算法 hash(Object.key)%N,hash值随Object.key.N的变化而变化. 如果有节点 ...

随机推荐

  1. .Net开发者必知的技术类RSS订阅指南

    目录 RSS订阅资源 .Net基金会 MSDN中文版 杂志 微软 Github 系列 微软DevBlog系列 InfoQ中文版系列 如何找到大佬的 Twitter/Youtube/Stackoverf ...

  2. 带着新人看java虚拟机07(多线程篇)

    这一篇说一下比较枯燥的东西,为什么说枯燥呢,因为我写这都感觉很无聊,无非就是几个阻塞线程的方法和唤醒线程的方法... 1.线程中断 首先我们说一说怎么使得一个正在运行中的线程进入阻塞状态,这也叫做线程 ...

  3. vue全家桶安装以及修改webpack配置新增vue项目启动方式

    一.安装node环境(自带npm) 下载地址 二.替换下载源 // 淘宝 NPM 镜像 npm install -g cnpm --registry=https://registry.npm.taob ...

  4. CSharpGL(46)用Billboard绘制头顶文字

    CSharpGL(46)用Billboard绘制头顶文字 本文介绍CSharpGL用Billboard绘制头顶文字的方法.效果如下图所示. 下载 CSharpGL已在GitHub开源,欢迎对OpenG ...

  5. hashCode()方法以及集合中Set的一些总结

    一.前言 本篇文章没有什么主题,就是一些零散点的总结.周末没事看了几道蚂蚁金服的面试题,其中有好几道都是特别简单的,基础性的题目,就是我们平时用到的,但是发现要是完全说出来还是有一些不清楚的地方,所以 ...

  6. 使用bootstrap table 数据绑定

    1.最近一直在用bootstrap table 这个前端框架做项目,下面是使用bootstrap table 的一些总结 这个使用.Net 中MVC做的: 2.这个是基本的boostrap table ...

  7. C# 设置Excel数据自适应行高、列宽的2种情况

    Excel表格中,由于各种数据的复杂性,可能存在单元格中的数据字号大小.数据内容长度不一而出现,列宽过宽.过窄或者行高过大.过小的问题.常见的解决方法是调整行高.列宽.在Microsoft Excel ...

  8. AI2(App Inventor 2)离线版服务器单机版

    注意:每次退出前导出自己的项目到本地做备份. 单机版特点: 1.同步官方最新版本,没有对java源代码进行修改,仅修改war\login.jsp及\war\WEB-INF\appengine-web. ...

  9. 从零开始学习和改造activiti流程引擎的13天,自己记录一下

    day#1(11.13) 尝试通过spring boot 集成最新版activiti 7,但是苦于官方的文档基本为空,无法完成spring boot的配置,最终按照activiti 6的文档,手工初始 ...

  10. mysql 表结构转excel表格

    最近需要写文档,由于开发模式是先开发后写文档(不想吐槽...),数据库表结构什么的都搞好了,然后写文档的时候需要贴表结构,什么字段,类型,相关说明需要一一对应起来,数据库表10多张,字段又多,手动复制 ...