架构师训练营第 1 期第 5 周学习总结
当前云计算和大数据越来越广泛使用,分布式系统越来越流行,分布式缓存也得到了更广泛的关注,通常使用分布式哈希实现快速查找。本周主要学习了一致性哈希,缓存以及用于异步通信的消息队列。
一致性哈希(consistency hash)
哈希(hash)起源于法国,是"chopped meat mixed with potatoes and browned",把肉切碎,再混上土豆什么的,类似中国的大杂烩。技术上指的是,hash函数可以把任意长度的二进制串映射为固定长度的二进制串,这个映射规则是hash函数,得到的二进制值串就是哈希值,也就是key的值。
最简单的是余数hash,公式是index = hash(object) mod N,index指向特定的value,比如某台具体的服务器。余数hash存在的问题是,伸缩性无法得到保障,当增加了一台服务器,余数N变了,之前的数据会映射不同的服务器,也就没法工作了。
为了伸缩性得到保障,一致性hash出现了。具体实现是通过hash环,存在0~2^32 - 1个节点。每个节点可以对应服务器,也可以对应key。映射到具体的某个key后,往后查找,就可以找到某个节点,对应一台服务器,那台服务器负责处理数据。
简单的一致性hash也存在hash偏斜的问题,也就是不同的服务器,负载不一样。为了消除hash偏斜,可以采用虚拟节点的方式,可以让节点均匀分布在hash环上,从而让各服务器的负载更均衡。
参考链接:https://www.toptal.com/big-data/consistent-hashing#:~:text=Consistent%20Hashing%20is%20a%20distributed%20hashing%20scheme%20that,objects%20to%20scale%20without%20affecting%20the%20overall%20system.
注:如有侵权,请联系作者删除。
评论