hash一致性
参照: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一致性的更多相关文章
- nginx+php+memcache实现hash一致性memcache 集群
我们工作中可能会遇到key-value数据库,如果我们面对的不止一台memcache服务器,而是很多台.那么现在就回出现一个问题: 当我们访问nginx服务器的时候,我们会判断memcache中是否有 ...
- 【java】安全加密MessageDigest的功能及用法【hash一致性算法】
链接地址:https://blog.csdn.net/ma1kong/article/details/2662997 1.查看MessageDigest源码的注释说明 2.和hash一致性算法 什么关 ...
- 【hash】什么是hash,什么是哈希,什么是hash散列,什么是hash一致性算法【关于hash的详解】
什么是hash,什么是哈希,什么是hash散列,什么是hash一致性算法
- consistent hash(一致性哈希算法)
一.产生背景 今天咱不去长篇大论特别详细地讲解consistent hash,我争取用最轻松的方式告诉你consistent hash算法是什么,如果需要深入,Google一下~. 举个栗子吧: 比如 ...
- java实现hash一致性算法
import org.apache.commons.lang3.RandomUtils; import org.apache.commons.lang3.StringUtils; import jav ...
- hash一致性算法
一致性hash算法是,1097麻省理工提出的分布式hashDHT实现算法,极倔internet的热点问题 平衡性 hash结果尽可能的分布到所有的缓存中去,缓冲空间利用率最高 单调性 保持已有的缓存能 ...
- dht 分布式hash 一致性hash区别
先有一致性hash :一致性哈希,似乎最早提出是在分布式缓存里面的,让节点震荡的时候,影响最小.不过现在已经应用在分布式存储和p2p系统里面. dht 是p2p领域的概念,内有三大概念是由keyspa ...
- 【Hash一致性算法】什么是Hash一致性算法
目录 1. 一致性Hash算法简介 环形Hash空间 把数据通过一定的hash算法处理后映射到环上 将机器通过hash算法映射到环上 机器的删除与添加 平衡性 本文转载自博客 1. 一致性Hash算法 ...
- Hash一致性算法底层原理
大纲 Hash取余算法 判定哈希算法好坏的四个定义 一致性Hash算法的两大设计 Hash取余算法 hash(Object.key)%N,hash值随Object.key.N的变化而变化. 如果有节点 ...
随机推荐
- 跟我一起学opencv 第四课之图像的基本操作
1.图像是由像素组成的,所以修改了像素就可以实现图像的改变. 2先看灰度图像(单通道): *****2.获取灰度图像的像素值使用: int gray = gray_src.at<uchar&g ...
- 分布式日志框架Exceptionless之生产环境部署步骤
Exceptionless 是一个开源的实时的日志收集框架,它将日志收集变得简单易用并且不需要了解太多的相关技术细节及配置.本篇基于我的上一篇<基于Exceptionless实现分布式日志> ...
- JS原型--原型链
构造函数-->原型--->prototype-->__proto__-->constructor-->原型链 构造函数 什么是构造函数?我理解构造函数就是可以用来生 ...
- 包装类及 LeetCode 每日一题
1.包装类与创建对象 Java 为8大数据类型都提供了相应的包装类,并提供属性和方法,更方便的操作基本数据类型.包装类位于java.lang包中. 对于这几种类型的基本数据,都有相似的方法实现基本数据 ...
- js初级入门
javascript的数据类型 (symbol)一.原始数据类型 或 基本数据类型 6种 1,undefined (1,申明未赋值,2,函数没有返回值)2,null (空,不存在)3,number ( ...
- Android6.0 源码修改之 仿IOS添加全屏可拖拽浮窗返回按钮
前言 之前写过屏蔽系统导航栏功能的文章,具体可看Android6.0 源码修改之屏蔽导航栏虚拟按键(Home和RecentAPP)/动态显示和隐藏NavigationBar 在某些特殊定制的版本中要求 ...
- SqlServer_查看SQLServer版本信息
方法一: 执行sql语句 SELECT @@VERSION 方法二: 连接SQL Server Management Studio利用Object Explorer显示的主要版本号信息,显示当前实例产 ...
- ceph 高级运维
追查系统故障,需要找到问题的根源安置组和相关的OSD. 一般来说,归置组卡住时 ceph 的自修复功能往往无能为力,卡住的状态细分为: 1. unclean 不干净:归置组里有些对象的复制数未达到期望 ...
- 阿里巴巴excel工具easyexcel 助你快速简单避免OOM
Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有 ...
- Android Studio导出JavaDoc时中文乱码问题解决
导出过程中,如果出现JavaDoc中文乱码的问题,可以在Other command line arguments栏目添加命令参数:-encoding UTF-8 -charset UTF-8(如果是G ...