参照: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. JDK--box和unbox

    目录 什么是装箱.拆箱 基本类型和包装类型 为什么会有基本类型? 为什么还要有包装类型 两者区别 两者互转 源码分析(JDK1.8版本) valueOf方法 1.Integer.Short.Byte. ...

  2. Asp.net Core 2.2关于AutoMapper更初级的入门教程

    今天刚看到老张的哲学博客关于AutoMapper的教程,从壹开始前后端分离[ .NET Core2.0 +Vue2.0 ]框架之十三 || DTOs 对象映射使用,项目部署Windows+Linux完 ...

  3. Protobuf 语言指南(proto3)

    Protobuf 语言指南(proto3) Protocol Buffer是Google的语言中立的,平台中立的,可扩展机制的,用于序列化结构化数据 - 对比XML,但更小,更快,更简单.您可以定义数 ...

  4. java并发编程(2) --Synchronized与Volatile区别

    Synchronized 在多线程并发中synchronized一直是元老级别的角色.利用synchronized来实现同步具体有一下三种表现形式: 对于普通的同步方法,锁是当前实例对象. 对于静态同 ...

  5. Golang 入门 : 结构体(struct)

    Go 通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型.试图表示一个现实世界中的实体. 结构体由一系列命名的元素组成,这些元素又被称为字段,每个字段都有一个名称和 ...

  6. Python:游戏:五子棋之人机对战

    本文代码基于 python3.6 和 pygame1.9.4. 五子棋比起我之前写的几款游戏来说,难度提高了不少.如果是人与人对战,那么,电脑只需要判断是否赢了就可以.如果是人机对战,那你还得让电脑知 ...

  7. [Inside HotSpot] C1编译器优化:全局值编号(GVN)

    1. 值编号 我们知道C1内部使用的是一种图结构的HIR,它由基本块构成一个图,然后每个基本块里面是SSA形式的指令,关于这点如可以参考[Inside HotSpot] C1编译器工作流程及中间表示. ...

  8. Android版数据结构与算法(三):基于链表的实现LinkedList源码彻底分析

    版权声明:本文出自汪磊的博客,未经作者允许禁止转载. LinkedList 是一个双向链表.它可以被当作堆栈.队列或双端队列进行操作.LinkedList相对于ArrayList来说,添加,删除元素效 ...

  9. 第13章 Base64 URL编码 - IdentityModel 中文文档(v1.0.0)

    JWT令牌使用Base64 URL编码进行序列化. IdentityModel包括Base64Url帮助编码/解码的类: var text = "hello"; var b64ur ...

  10. 设计模式之行为类模式PK

    行为类模式包括: 责任链模式 命令模式 解释器模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 策略模式 模板方法模式 访问者模式 行为型模式涉及到算法和对象间职责的分配 行为类模式关注 ...