1.一致性hash算法应用领域
缓存、ES、hadoop、分布式数据库
分布式数据存储场景下需要一致性hash算法
2.一致性hash详解
以缓存为例:
使用缓存目的:提升数据访问性能,缓解数据库压力。以空间换时间
单机缓存
常用缓存中间件: redis、memcache
分布式高并发系统特点?
- 高并发
- 海量数据
高并发问题如何处理?
分布式集群;高并发必集群
redis、memcache的并发能力?
10w+并发
应对高并发:缓存集群
海量数据对缓存有什么影响?
超出单机内存容量,需要缓存集群分片
应对海量数据:分布式缓存集群
缓存集群和分布式缓存集群区别?
缓存集群:实例数据一致
分布式缓存集群:数据分片
主从:高可用、高并发性能
分布式缓存集群,数据如何均衡分布到缓存集群的节点上?
均衡分布方式一:hash(key)%集群节点数
问题:临时增加节点提高集群性能,不方便扩展集群。
增加一个节点后,有多大比例数据缓存命不中?
3->4 3/4 75%
99->100 99%
就是一个余数有多少相同的数学题目?
最小公倍数。
大量缓存命不中,就会访问数据库,瞬间失去缓存的分压,数据库不堪重负
导致:缓存雪崩
加班: 凌晨扩容,并预热数据。。。
均衡分布方式二:**一致性hash算法***
- hash值是一个非负整数,把非负整数的值范围做成一个圆环;
- 对集群的节点的某个属性求hash值(如节点名称、节点ip),根据hash值把节点放到环上;
- 对数据的key求hash,一样的把数据也放到环上,按顺时针方向,找离它最近的节点,就存储到这个节点上。
新增节点能均衡缓解原有节点的压力吗? 无法
集群节点一定会均衡分布在环上吗?无法均衡分布
如何做到均衡分布,均衡缓解?
均衡分布方式二:一致性hash算法+虚拟节点
使用虚拟节点
虚拟节点上环,来分布数据;
虚拟节点越多,分布越均衡;
虚拟节点越多,新增节点对原有节点影响越均衡;
新增节点,对数据的影响比例: 1/n
实现???
分布式数据:分库分表
- 运营商网速与实际网速关系
- 解决数据如何存储,一致性hash算法
- 海量数据单机无法支撑,做集群