参照: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. SpringBoot整合SpringCloud搭建分布式应用

    什么是SpringCloud? SpringCloud是一个分布式的整体解决方案.SpringCloud为开发者提供了在分布式系统中快速构建的工具,使用SpringCloud可以快速的启动服务或构建应 ...

  2. BI基础知识

  3. Windows下docker的安装以及遇到的问题

      最近因为业务的需要,需要在本地搭建服务环境测试,不想去安装各种软件,于是就想到了用docker来满足我的需要.由于第一次在Windows下安装(以前一直是在linux下使用,但由于内存等硬件的限制 ...

  4. 解决 mac 10.14.4 无法 sublime text 3207 安装 Package Control,以及安装第三方包报错 `Package Control There are no packages available for installation`

    下载最新的 sublime text 3207,无法安装 Package Control. 根据官方提示,手动安装 Package Control. 手动安装 Package Control 后,无法 ...

  5. MSP430F149串口收发程序的学习(一)

    首先将用到的IO口设置为第二模式: ①使用串口USART0则设置P3.4 P3.5 ,使用USART1则设置P3.6,P3.7 (P3SEL |= BIT3+BIT4:P3SEL |= BIT6+BI ...

  6. 测试 ASP.NET Core API Controller

    本文需要您了解ASP.NET Core MVC/Web API, xUnit以及Moq相关知识. 这里有xUnit和Moq的介绍: https://www.cnblogs.com/cgzl/p/917 ...

  7. RomUtil【Android判断手机ROM,用于判断手机机型】

    参考资料 Android判断手机ROM 正文 有时候需要判断手机系统的ROM,检测ROM是MIUI.EMUI还是Flyme,可以使用getprop命令,去系统build.prop文件查找是否有对应属性 ...

  8. java~使用自己的maven本地仓库

    本地仓库 主要是一种缓存,当你使用远程仓库中下载组件后,它下一次会优先从本地进行加载,一般位于USER_HOME/.m2目录下,我们自己也可以建立公用的包,把包发布到本地仓库,自己在其它项目里直接可以 ...

  9. 接口自动化:HttpClient + TestNG + Java(一) - 接口测试概述+自动化环境搭建

    1.1 接口测试简介 1.1.1 什么是接口测试 开始学习接口自动化测试之前,我们先要来了解什么是接口,以及什么是接口测试. 我们都知道,测试从级别上划分可以分为 组件测试 集成测试 系统测试 验收测 ...

  10. 使用 线性规划 解决 数字 排序问题, +Leapms模型

    问题 将如下一组数字从大到小排序. {10, 20, -32, 177, 0, -11.5, 19, 7, 6.2, -6.28, -2.71, 44} 解决办法 建立数学模型,给出各个数字的次序值. ...