定义:将任意长度的值映射为固定长度的值(哈希值)
要求
- 哈希值不能反推原始数据
- 输入敏感,原始数据修改少,哈希值变化大
- 散列冲突概率低
- 计算效率高,针对大文本
常见应用
- 安全加密,唯一标识,数据校验,散列函数,负载均衡,数据分片,分布式存储
安全加密
- 哈希算法
- MD5(Message-Digest Algorithm,信息摘要算法)
- SHA(Secure Hash Algorithm,安全散列算法)
- DES(Data Encryption Standard,数据加密标准)
- AES(Advanced Encryption Standard,高级加密标准)
- 要求
- 哈希值不能反推原始数据
- 散列冲突概率低
- 散列冲突原因
- 鸽巢原理: 鸽子多于鸽巢,肯定有巢鸽子多于1
- 本质:哈希值有限,而数据无限
唯一标识:使用恒定数据,生成唯一标识,用于检索
数据校验:哈希算法输入敏感,校验数据是否篡改
散列函数:散列表,关注性能:hash值分布平均,hash函数执行快
防止脱库(存储密码)
- hash算法加密
- 使用盐,增加密码复杂度(字典攻击:密码太简单->猜)
分布式系统相关
- 问题:数据量大,内存不够
- 思想:定值取模->多个映射(恒定的映射),多机器平摊数据量
- 应用:负载均衡,数据分片,分布式存储
负载均衡
- 功能:会话粘滞(相同会话映射一致性)
- 思路: 恒定值(客户端IP或会话ID)取模运算
数据分片
- 问题:数据大,一台机器无法处理且慢
- 思路:数据取模(模恒定)映射机器,并行处理
分布式存储
- 功能:数据存储在多台机器,提供高效的读取、写入支持
- 问题:机器数量变化时,可能发生雪崩效应,压垮数据库。(取模映射变化,缓存失效)
- 解决:一致性哈希算法
一致性哈希算法
- 原理:对232取模,扩大模范围
- hash环:232个点组成的圆,从0开始
- 机器位置:和232取模
- 数据映射机器:和232取模后,顺时针的第一个机器
- 优点:部分缓存失效,解决雪崩问题
- hash环偏斜:机器分布不均匀,数据大量映射于相同的机器
- 虚拟节点:解决上面问题,实际机器节点的复制节点(平均机器节点的分布)
- 参考文档:http://www.zsythink.net/archives/1182