(十五)哈希算法
Posted Warrior
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(十五)哈希算法相关的知识,希望对你有一定的参考价值。
这节主要讲述哈希算法的应用,重点是一致性哈希的讲解
01
—
什么是哈希算法
哈希算法:
可以将任意长度的二进制值串映射成固定长度的二进制值串
这个映射规则就是哈希算法
哈希算法有如下几个特点:
映射后的哈希值不能反向推导出原始数据
对输入数据非常敏感,哪怕只有一个bit不同,映射后的数据也大不相同
散列冲突概率要小,不同数据的哈希值相同的概率要小
哈希算法的执行效率要尽可能高
02
—
哈希算法一般应用
安全加密
安全标识
例如图片,我们可以计算图片的二进制码,取出二进制码的前100,后100个元素进行哈希。得到的值存入哈希表中,用于判断图片是否已存在。
数据校验
例如对于下载的文件,在网络传输过程中有可能会被恶意篡改,我们可以拿到下载后的文件的哈希值与种子文件的哈希值做对比,如果不同则说明文件已被人恶意篡改过。
散列函数
区块链
区块链是一块一块区块组成的,每一个区块分成两部分,区块头和区块体。
区块头保存着自己区块体和上一个区块头的哈希值。这种哈希算法使用的是SHA256,计算非常耗时。如果有一个区块进行篡改,那后面所有区块保存的哈希值就对不上了。
03
—
哈希算法分布式上的应用
负载均衡
对请求的IP或者回话ID计算哈希后与服务器列表的大小进行取模,保证同一个请求都落在同一台服务器上
数据分片
例如对1T大小的文件中统计每个单词出现次数。文件过大无法在一台服务器上计算,这时我们就可以将单词计算哈希值后取模,保证相同单词落在同一台服务器上计算。这个思想如同hadoop的mapreduce,flink的keyBy,spark的shuffle.
分布式存储
利用数据分片,可以将数据放入不同的服务器中存放。但是当目前数据服务器空间不足,需要扩容的时候,就会需要全部重新计算hash值,例如:
这时候就需要一致性哈希算法了。
04
—
一致性哈希
如上图:假设所有的请求都通过哈希计算并取模后落在圆上的各个点。
其中有4台服务器分别负责相应的点的请求数据,
服务器1负责:a,b,c,d
服务器2负责:p,o,n,m
服务器3负责:l,k,j
服务器4负责:e,f,g,h,i
当第四台磁盘空间剩余不足,在第四台服务器所负责空间位置上,加上一台服务器5,从此5则负责服务器h,i上的数据。
这样在扩容的同时又保证了之前的数据位置不变。唯一变得只是服务器4中的部分数据放到了服务器5上。
05
—
总结
讲述了哈希算法
哈希算法的应用
数据加密
数据标识
数据校验
散列表
区块链
负载均衡
数据分片
分布式存储
一致性哈希
下一节讲述数据结构之二叉树
以上是关于(十五)哈希算法的主要内容,如果未能解决你的问题,请参考以下文章