写点什么

架构师训练营第 1 期第 5 周学习总结

用户头像
好吃不贵
关注
发布于: 2020 年 10 月 24 日
架构师训练营第 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.



注:如有侵权,请联系作者删除。

用户头像

好吃不贵

关注

还未添加个人签名 2018.11.20 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 1 期第 5 周学习总结