当前位置: 首页 > news >正文

分方式缓存常用的一致性hash是什么原理

分方式缓存常用的一致性hash是什么原理

一致性hash是用来解决什么问题的?

先看一个场景

有n个cache服务器,一个对象object映射到哪个cache上呢?

可以采用通用方法计算object的hash值,然后均匀的映射到到n个cache

hash(object) % n

初始阶段运行正常,但当cache服务器发生变动后就会出现问题

例如

(1)一个cache服务器down掉了,这样所有映射到此cache的对象都会失效,需要把此cache移除,这时候映射公式变成了 

hash(object) % (n-1) 

(2)由于访问加重,需要添加cache ,这时候映射公式变成了 

hash(object) % (n+1)

这两种情况几乎会使所有的cache都失效,大量的访问都会直接访问后台服务器,造成极大的压力

一致性hash算法就是为了解决普通hash的不足,把损失降到最低

一致性hash的原理

一致性hash将整个哈希值空间组织成一个虚拟的圆环

假设某哈希函数H的值空间为0-2^32-1(2^32为2的32次方)

整个空间按顺时针方向组织,0和232-1在零点中方向重合



把各个cache服务器通过hash计算,根据hash值顺时针排列到圆环上,可以根据服务器的IP或者主机名进行计算

例如有 A B C 三台服务器



现在可以映射object了,映射规则为:

将key使用相同的hash计算出值,并确定此数据在环上的位置,从此位置顺时针行走,第一台遇到的cache服务器就是其应该定位到的服务器

例如有4个object需要映射到cache服务器



根据映射规则

object 1 -> A
object 2、3 -> B
object 4 -> C

下面看cache服务器的增减情况

(1)移除

例如A出现异常,需要移除



object 1 失效,需要映射到B

受影响的只有object 1

(2)添加

cache压力增加,需要添加服务器,新增cache服务器D



object 2 需要重新映射到D

受影响的只有object 2

可以看到一致性hash比普通hash高效了很多

转载于:https://www.cnblogs.com/jun1019/p/6260623.html

相关文章:

  • webbench压力测试工具
  • 飞天5K实战经验:大规模分布式系统运维实践
  • 我的jQuery动态表格插件
  • ExcelReport第一篇:使用ExcelReport导出Excel
  • select空间提交form表单传递参数
  • 反射:InvokeMethod 活动调用多种方法的方法配置要点
  • wampserver配置https
  • 小型软件项目开发流程探讨
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • iOS根据网络图片的size大小设置UIImageView的大小
  • sqlmap 本地安装
  • Ubuntu server 14.04升级16.04
  • 提取CString中的汉字及个数
  • connect-flash 用法详解
  • JavaScript的arguements
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【Linux系统编程】快速查找errno错误码信息
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • CAP 一致性协议及应用解析
  • JavaScript 基本功--面试宝典
  • MobX
  • nodejs:开发并发布一个nodejs包
  • Vultr 教程目录
  • 分布式任务队列Celery
  • 记一次和乔布斯合作最难忘的经历
  • 我感觉这是史上最牛的防sql注入方法类
  • 字符串匹配基础上
  • gunicorn工作原理
  • postgresql行列转换函数
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • # Java NIO(一)FileChannel
  • #Java第九次作业--输入输出流和文件操作
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (二)丶RabbitMQ的六大核心
  • (南京观海微电子)——COF介绍
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)VC++中ondraw在什么时候调用的
  • .NET 8.0 发布到 IIS
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net core 控制台应用程序读取配置文件app.config
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • @Resource和@Autowired的区别
  • [ Algorithm ] N次方算法 N Square 动态规划解决