架构师训练营 1 期 -- 第五周笔记

用户头像
曾彪彪
关注
发布于: 2020 年 10 月 25 日

架构师训练营,第五周学习,因时间关系,这周只学习了一遍。本周讲了缓存和消息队列:

缓存是存储在计算机上的一个原始数据复制集,便于快速访问。

缓存数据一般存储在Hash表中,它的时间复杂度是O(1)。

缓存设计好还的一个衡量指标是缓存命中率,缓存命中率是是从缓存读取数据和总访问次数的比,如果访问10次,9次从缓存读取,那么缓存命中率就是90%。影响缓存命中率的因素有:

缓存键集合的大小,缓存键越多,缓存命中率就低。

缓存可使用存储空间大小,存储空间越大,缓存命中率越高。

缓存时间越长,缓存命中率越高。



分布式缓存如Memached在做集群时,一般是客户端SDK通过计算key的hash值,通过某一种路由算法,将访问请求转发给集群中的某台服务器,比如我们又3台Memcached服务器集群,通过简单取模,就可以将客户请求转发到这三台服务器上。这三台服务器都无法感知其它服务器的存在,他们是share nothing的集群。

以上集群会带来一个问题,就是当我们增加或减少服务器的时候,会有大量缓存失效。比如原来有3台服务器,客户请求key的hash值是5,原来5%3==2,缓存在第三台服务器上,现在增加了一台服务器,5%4=1,缓存就应该存储在第二台服务器上。这样之前存在的大量缓存就失效了。

这里老师提出了一个观点,要搞清楚技术的本质,否则容易弄巧成拙。



为了解决取余hash路由算法带来的问题,可以使用一致性hash算法。一致性hash算法是创建一个大的hash环,将负载均衡节点分布在hash环上。寻找节点的方法是,取当前key的hash值,然后顺时针找距离当前key hash值最近的节点。比如当前集群有3个节点N1->N2->N3,如果需要增加一个节点N4,顺序如下N1->N2->N4->N3。那么只有N2->N4的数据需要重新路由到N4,其它节点都不受影响。



用户头像

曾彪彪

关注

还未添加个人签名 2019.03.23 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 1 期 -- 第五周笔记