一致性hash算法

news2024/11/28 4:08:08

目录

1.业务场景

2.传统hash算法

2.一致性hash算法

2.1.算法过程

 2.1.一直性hash算法的优点

2.2.一致性hash算法的缺点

 2.3.hash倾斜的解决办法


1.业务场景

假设有30000张图片需要存放到编号为1、2、3的3台服务器上。

2.传统hash算法

假设有30000张图片需要存到3台服务器上,先给服务器编个号1、2、3,那么很显然使用设计一个碰撞小的hash函数,对每个图片的唯一标识(图片编号之类的)进行hash运算,然后将hash值%3=该图片应该存放的服务器编号。

当需要查找该图片的时候用key来重复以上过程就可以知道图片存放的位置在哪里。

传统hash算法的缺陷:

一旦新增一个服务器结点,会影响全局,需要全局重新进行hash运算。

2.一致性hash算法

2.1.算法过程

一致性hash算法不再是对服务器的数量进行取模,而是对“hash环”进行取模。

hash环:

假设有2的32次方个点,组成了一个虚拟的环,这个环称为hash环。之所以是2的32次方是因为32位(不用64位是为了向下兼容)的操作系统1个指针是4字节,1个字节是8位,也就是说1个指针能指向的内存地址有2的32次个。

一致性hash算法的过程:

整个过程开始前先对服务器进行散列,取服务器的唯一标识(一般就是用IP地址了)计算出服务器的hash值在hash环上对应的点。

然后进行图片的散列,取图片的唯一标识进行hash运算,然后将得到的hash值对2的32次方进行取模得到图片在hash环上的对应的点,如果这个点正好落在服务器上那就说明图片应该存在这台服务器上,如果没有则找到顺时针方向的第一台服务器,这台服务器就是图片应该存储的服务器。

 2.1.一直性hash算法的优点

如果新增一台服务器D,可以发现受影响的就只有一小部分,大部分的数据都不会受影响,

查找的时候都可以准确的找到。要重新做hash运算,重新进行散列的也只有受影响的那一小部分。

2.2.一致性hash算法的缺点

hash偏斜,即存在服务器结点能映射到它上面的hash值明显要多于其他结点,直白点说就是在hash环上管了更多的范围,存了更多的图片。上图三台服务器分布在hash环上的位置是均匀的,但是这种理想情况很少,现实中很可能都是分布不均匀的,比如按照下图,可以明显看到很大几率运算出来的图片存放位置会是A,这样也会造成存储的不均匀。

 2.3.hash倾斜的解决办法

解决hash倾斜的方法就是加服务器,很明显环上服务器结点越多被管的范围就切得越小,图片的存放越可能趋近于均匀。当然在实际中增加物理服务器结点的可能性是不大的,成本太高了,可以通过增加虚拟节点然后将虚拟节点映射到实际存在的物理节点即可。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaWeb开发-Servlet】拾起海中的漂流瓶增强版

目录 原版: 1、前端样式 2、错误提示 3、实现id序列增长 完整项目代码: 原版: 【JavaWeb开发-Servlet】拾起海中的漂流瓶_代码骑士的博客-CSDN博客需求:点击网页按钮随机显示一句话:1、内容涵盖:老人…

PySpark大数据计算教程

PySpark大数据计算教程 了解如何将 Spark 与 Python 结合使用,包括 Spark Streaming、机器学习、Spark 2.0 DataFrames 等! 课程英文名:Spark and Python for Big Data with PySpark 此视频教程共4.0小时,中英双语字幕&#xf…

多模态(红外,可见光)目标检测

【github】https://github.com/DocF/multispectral-object-detection 一.环境 1.1 环境 基本依赖和yolov5基本相同,当然也可以配置在虚拟环境中 git clone https://github.com/DocF/multispectral-object-detection cd multispectral-object-detection pip ins…

基于燃压缩空气储能系统的零碳微能源互联网优化调度(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,…

由美国火星照片细节,分析造假的疑点

穿帮都是细节。 除了阿波罗登月,你觉得美国还在哪些航天项目中有造假嫌疑? - 知乎 西红柿加醋 能走着游泳就好了 ​ 关注 无可靠信息来源 423 人赞同了该回答 除了登月,比较又争议的当然就数登火了,比如出自Nasa官方网站上的…

CSS布局-定位,相对,绝对,子绝父相,固定定位,层级关系。

CSS布局-定位,相对,绝对,子绝父相。 目录CSS布局-定位,相对,绝对,子绝父相。1、定位1.1 网页常见布局方式1.2 定位的常见应用场景2.1 定位初体验2.2 使用定位的步骤3.1 静态定位4.1 相对定位5.1 绝对定位5.…

矩阵理论复习(五)

2004年试题 Hermite矩阵酉相似于对角阵 验证相容矩阵范数 盖尔圆盘互不相交,则特征值都不相同,若盖尔圆盘全部出现在右半复平面上,则特征值全为实数。 矩阵二范数的计算 最大秩分解M-P广义逆矩阵方程是否有解 2005年试题 正定矩阵&a…

【秒杀购物商城业务服务】「分布式架构服务」盘点中间件服务的高可用模式及集群技术的方案分析

秒杀购物商城业务服务-分布式架构介绍 基于MySQL数据库集群技术实现服务的高可用基于Tomcat的集群负载机制实现Tomcat服务器的高可用基于Nginx负载均衡机制实现负载均衡(介绍和配置)基于Redis缓存服务实现数据缓存控制相关介绍和技术点分析 基于MySQL数…

RTC 时钟电路如何选择法拉电容的容量

理论依据: 公式 1:Q I * t 公式 2:Q CU 由此推导出→I * t CU →t CU/I(将根据这个计算时钟保留时长) 说明 Q: 电荷量 (单位:库仑)I: 电流 (单位:安培&a…

QT/C语言 实现数据库sqlite3

QT/C语言 实现数据库sqlite3【1】引入数据库【2】下载移植sqlite31.移植sqlite32.使用sqlite33.sqlite3中的数据类型4.常用的SQL语句(全部都是分号结尾)(1)新建表格(2)往表格中插入数据(3)查询表格中的数据(4)删除表格中的数据(5)修改表格中的数据【3】C语言调用sqlite31.接口函…

第10部分 DHCP

目录 10.1 DHCP 概述 10.2 实验1:DHCP 基本配置 1.实验目的 2.拓扑结构 3.实验步骤 4.实验调试 (1)在客户端测试 (2)show ip dhcp pool (3)show ip dhcp binding 10.3 实验&#xff…

LeetCode 1827. 最少操作使数组递增

最少操作使数组递增 简单 46 相关企业 给你一个整数数组 nums (下标从 0 开始)。每一次操作中,你可以选择数组中一个元素,并将它增加 1 。 比方说,如果 nums [1,2,3] ,你可以选择增加 nums[1] 得到 nums …

实战讲解Spring定时任务:@Scheduled(图+文+源码)

1 缘起 最近看到有些定时任务的项目, 使用了Spring自带的定时任务系统,通过添加Scheduled注解的方式实现, 并且,使用了不只cron表达式的方式实现定时执行, 恍然大悟,原来Scheduled还有其他的方式实现定时任…

《小猫猫大课堂》3之字符串,转义字符,注释,选择和循环语句,函数等小概括。

更新不易,麻烦多多点赞,欢迎你的提问,感谢你的转发, 最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!! 喵喵喵,你对我…

这十套练习,教你如何用Pandas做数据分析(01)

Pandas是入门Python做数据分析所必须要掌握的一个库。本文内容由和鲸社区翻译整理自Github,建议读者完成科赛网 从零上手Python关键代码 和 Pandas基础命令速查表 教程学习的之后,点击本篇Notebook右上角的 Fork 按钮对本教程代码进行调试学习。 转载本…

(附源码)SSM的KTV管理系统 毕业设计 291807

基于SSM的KTV管理系统 摘 要 随着社会的发展,人类的进步,21世纪人们的生活水平有所提高,为了满足人们对生活的需要,丰富业余生活,娱乐KTV等行业蓬勃发展,在数字化的今天,我们已离不开计算机&…

Redis的面试题

一、Redis支持的数据类型? Redis支持的数据类型主要有五种:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorte…

opencv图像特征

图像特征类型可以分为如下三种: 边缘角点(感兴趣关键点)斑点(感兴趣区域) 其中,角点是个很特殊的存在。如果某一点在任意方向的一个微小变动都会引起灰度很大的变化,我们就把它称之为角点。角点…

17、Redis6.0新功能

文章目录17、Redis6.0新功能17.1 ACL17.1.1 简介17.1.2 命令17.2 IO多线程17.2.1 简介17.2.2 原理架构17.3 工具支持 Cluster17.4 Redis新功能持续关注Redis 6 入门到精通-讲师:王泽 世态炎凉,世界并不善良 17、Redis6.0新功能 17.1 ACL 17.1.1 简介 …

如何利用场追迹控制衍射的包含

1. 摘要 VirtualLab Fusion包括一系列建模方法便于用户可以地调整光学仿真的精度级别和时间。不仅如此,这种功能还有助于隔离物理原因产生的不同影响。在本示例中,我们提出了一个清晰的工作流程配置一个仿真,以便在物理光学模拟中考虑或忽略衍…