背景知识:

  1. 哈希算法主要应用于缓存分布式系统。
  2. 分布式是指将一个整体拆成多个部分,由多个服务器来执行完成。注意与集群的区别,集群是将多个相同的整体部署在多个服务器上独立执行。
  3. 本文主要以key-value式缓存为例子讲解

1.节点取余:如果你的缓存服务器有3台,编号为0,1,2,节点取余的方式就是将key做哈希运算并将返回值与3(服务器个数)取余,根据值将value分配到相应编号的服务器中。例如:

例如我有6个key,分别是:1,2,3,4,5,6。根据上面的描述(假设hash函数返回值就是key的值),我们很容易计算出如下值的分布情况:0号服务器      1号服务器      2号服务器
key          3,6          1,4          2,5注: key=3经过取余运算会被分配到0号服务器

但是需要注意的是,节点取余的容错性和扩展性不好,怎么理解呢,我们还是举例:

容错性:例如有一天我的2号服务器宕机了向外提供不了服务了,因此需要把它移除并对剩下的服务器重新编排,
紧接着取余算法也要相应发生改变,即与2取余得到的结果是:0号服务器      1号服务器
key     2,4,6       1,3,5扩展性:例如由于我们的缓存服务器现在满足不了业务需求了,因此又增加一台服务器,同理取余算法相应也发生
了改变,即与4取余,得到的结果是:0号服务器       1号服务器      2号服务器       3号服务器kay      4              1,5           2,6          3我们都知道缓存服务,当key对应的值不存在时,会从源头获取数据(例如从mysql中),然后再存入缓存并返回
给客端,如果key对应的值存在即直接返回给客户端。基于这个原理,假设在三台服务器的时候,我们已经将1-6
个key对应的值设置在了相应的服务器中,这时候由于宕机了,服务器变成两台了按照上面分析的分布关系,我们
如果要获取2对应的值会被分配到0号服务器中去获取,但是0号服务器并没有存储(因为2对应的值在三台服务时
存储在了编号为2的服务器中),因此导致的结果就是缓存没有命中,即又要从源头中获取数据。
从上述的分析不难发现,节点取余这种方式只要服务器节点发生变化,缓存的命中率就会降低,因此不介意使用
如果硬要使用的话,建议扩充的节点是原来节点的两倍。

2.为了解决节点取余这种服务器数量一变更就导致大量缓存无法命中的问题,一致性哈希就出现了,一致性哈希说白了就是将整个哈希值设计成一个闭合的环状,并将服务器节点用哈希函数映射在这个环上,当有一个key过来了,利用相同的算法也映射在环上,有人可能会问了那么这个key到底是属于哪个服务器呢?根据key当前映射的位置顺时针走,遇到的第一个服务器就是key对应值所存储的服务器。具体可以查看下图(忽略图片左下角水印,粉红色圈就是key映射在环上的位置,白青色圈就是节点映射在换上的位置)

虽然一致性哈希解决了节点取余服务器数量变更导致大量缓存无法命中的问题,相对来说容错性和可扩展性也挺不错的,但是它仍然会导致小部分缓存数据无法命中的问题,这是需要注意的。(这也是为什么redis并没有使用一致性哈希算法而是使用虚拟槽这种替代方案,因为虚拟槽技术使得每一个节点管理的槽点是固定的,即使你增加了节点也是需要其他节点将槽点分配给新节点,新节点才有资格管理槽,因此就不会出现数据丢失的问题)。

最后欢迎大家关注我的公众号:

常见分布式算法的介绍相关推荐

  1. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  2. 计算机内存与内置类型,笔记本内存种类有哪些 笔记本常见内存类型介绍

    此前经常有电脑小白咨询我"128GB内存够不够"之类的问题,很明显这是将内存和硬盘搞混了.如果你也分不清内存和硬盘,那么很有必要看下去.本文主要介绍目前笔记本中常见的内存类型,并且 ...

  3. js 计算任意凸多边形内最大矩形_题库 | 计算机视觉常见面试题型介绍及解答 第 7 期...

    - 计算机视觉 -为什么说 Dropout 可以解决过拟合?(1)取平均的作用: 先回到标准的模型即没有 dropout,我们用相同的训练数据去训练 5 个不同的神经网络,一般会得到 5 个不同的结果 ...

  4. 常见网络命令介绍及使用

    常见网络命令介绍及使用 ping 介绍 参数说明 使用例子 ipconfig 介绍 参数说明 使用例子 tracert 介绍 参数说明 使用例子 netstat 介绍 参数说明 使用例子 route ...

  5. 常见特征检测算法介绍

    Camera系列文章 传感器融合是将多个传感器采集的数据进行融合处理,以更好感知周围环境:这里首先介绍Camera的相关内容,包括摄像头及图像知识基本介绍,OpenCV图像识别(特征提取,目标分类等) ...

  6. 消息队列属性及常见消息队列介绍

    什么是消息队列? 消息队列是在消息的传输过程中保存消息的容器,用于接收消息并以文件的方式存储,一个队列的消息可以同时被多个消息消费者消费.分布式消息服务DMS则是分布式的队列系统,消息队列中的消息分布 ...

  7. iOS开发UI篇—常见的项目文件介绍

    iOS开发UI篇-常见的项目文件介绍 一.项目文件结构示意图 二.文件介绍 1.products文件夹:主要用于mac电脑开发的可执行文件,ios开发用不到这个文件 2.frameworks文件夹主要 ...

  8. 音视频直播流程及常见视频流协议介绍

    音视频直播流程介绍 常见视频流协议介绍 HLS HLS是苹果公司实现的基于 HTTP 的流媒体传输协议,全称 HTTP Live Streaming,可支持流媒体的直播和点播,主要应用在 iOS 系统 ...

  9. 帝国时代2决定版服务器证书身份验证失败,《帝国时代2决定版》常见问题解决方法介绍 常见问题怎么解决...

    帝国时代2决定版常见问题怎么解决?游戏中会遇到很多的小问题,可能大家都还不清楚怎么解决吧,今天小编给大家带来帝国时代2决定版常见问题解决方法介绍,一起来看一下吧. 常见问题解决方法介绍 如图,是不是排 ...

最新文章

  1. python计算csv文件内的数据_Python利用pandas计算多个CSV文件数据值的实例
  2. Vue3之——和Vite不得不说的事
  3. IOS多线程之Block编程
  4. 深度学习可以与大数据分手吗?
  5. POJ2718【DFS】
  6. Google Perf Tools安装以及使用
  7. 随手记_科研攻略_好的idea的产生
  8. 使用读写锁实现同步数据访问
  9. mysql创建视图的sql语句_MySQL数据库创建视图
  10. 推理证明技巧之人肉计算机,四大推理方法搞定高中证明题
  11. JAVAFX输入法的实现
  12. 关闭windows defender安全中心的方法
  13. 查询学过“叶平”老师所教的所有课的同学的学号、姓名
  14. 第一章、基于Ruoyi-Vue开发脚手架之对象存储实现
  15. linux 将当前时间往后调整2分钟_linux调整系统时间 永久 z | 学步园
  16. CES Asia:MR混合现实引发行业热议
  17. CountDownLatch,CyclicBarrier,Semaphore的使用方法以及它们之间的区别
  18. 威步百科 | Blurry Box
  19. 【老生谈算法】matlab实现自动画玫瑰程序源码——画玫瑰
  20. 求最大公约数及求多个数的最大公约数

热门文章

  1. Spartan6系列之时钟资源详解
  2. 快速把PDF文档里的表格粘贴到excel的方法
  3. 聚宝加油卡,2022年独一无二的翻身机会
  4. Docker基础(下)
  5. 女朋友生病了要你去照顾,这时候你刚开了一把王者荣耀排位晋级赛,你选什么?
  6. 鸿蒙系统和安卓的区别在哪里,有什么不同
  7. 低代码学习教程:根据身份证号码计算性别
  8. 波束成形算法之波束宽度
  9. 【并发编程一:走进并发编程】
  10. EASYOPS 运维平台绿色社区版 V1.2.10