写点什么

架构师训练营 -week05- 总结

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

1       关于分布式缓存:

1.1       缓存定义:介于数据访问者和数据源之间的一种高速存储,当需要多次访问时,用于加快访问速度。

1.2       缓存与 buffer 的区别:一个是用于多次访问时加快访问速度,一个是在读写文件时用于临时存储,都是用来优化的。

1.3       缓存的关键指标:缓存命中率

1.4       影响缓存命中率的因素:缓存键集合的大小(尽可能减少集合的大小,效率才能更高)、缓存可用内存空间、缓存生存时间,即需要设置缓存的有效时间、设置缓存需要更新的时间

1.5       常用的缓存形式:通读缓存(代理缓存、反向代理缓存、多层反向代理缓存、CDN)、旁路缓存(通常是一个独立的键值对,如浏览器本地缓存、本地对象缓存、远程分布式缓存)。

1.6       缓存数据尽量要前置。

1.7       缓存要合理使用,尽量存热点数据,如果可以将 80%的访问集中在 20%的数据上,那说明缓存是非常有用的。另外不能过分依赖缓存。缓存需

1.8       缓存可能造成的问题:

1.8.1    数据不一致与脏读:可以给缓存设置过期时间,在可以容忍一小段时间的数据的不一致的情况下,可以使用这种策略。有些必须及时更新的,可以在更新数据时通知缓存失效。

1.8.2    缓存雪崩:可能造成数据库崩溃,可以设置合理的路由算法,给缓存设置不同的过期时间。

1.8.3    缓存穿透:某个不存在的 key,如果被频繁访问,则可能很多请求都会到达数据库,造成系统崩溃,可以将不存在的 key 也在缓存中存一下,或者通过布隆过滤器来解决。

1.9       缓存数据可以提前进行预热

2       关于一致性哈希:以分布式缓存来说,集群中路由的最简单的算法是通过取模来计算路由的,这种算法很简单,但是在增加或者删除一个节点时会造成集群中大部分缓存获取不到了,严重时甚至可能造成系统的崩溃。而一致性哈希算法很好的解决了这个问题。

一致性哈希算法:构建一个哈希环取值在[0, 2^32),将集群中所有的节点通过 hash 算法分布在这个环上,当插入或者查找一个值时,将该值的 key 通过 hash 算法算出一个值,然后在哈希环上找离其最近的点对应的节点。当节点删除时,只有该节点跟下个节点之间的部分数据需要更新。新增一个节点时,也只有新增的节点跟其之后的一个节点中间的部分数据需要更新。考虑到物理节点可能会少,造成节点在环上的分布不均匀,从而每个节点的缓存数据量差异很大,所以可以给每个节点虚拟一些节点放到环上,这样缓存分布会更均匀一些。

3       关于消息队列:

4       关于负载均衡架构:用户访问到达负载均衡服务器,由负载均衡服务器进行分发。

4.1       不同的负载均衡实现方式:

4.1.1    HTTP 重定向负载均衡:收到请求后,查找可用的服务节点,然后重定向,需要客户端访问两次请求,同时需要将所有服务端的 IP 暴露给客户端,不安全,实际基本不用;

4.1.2    DNS 访问器:域名访问时顺便查询域名对应的 IP,不会额外增加请求次数,但是也会暴露 IP 给客户端,但是实际中应用很多,主要是暴露的是服务端负载均衡集群的 IP;

4.1.3    反向代理服务器:如 nginx,将收到的客户端请求,拼装好 http 协议,重新发出去,收到服务端的响应后解析重新组装后返回给客户端,而响应时内容可能会很大,重新组装会降低效。

4.1.4    IP 负载均衡:不需要重新拼装 http 协议,只需要将收到的数据包中源地址 IP 改为自己的 IP,而将接收地址改为服务端的某个节点然后重新发出去,收到响应后,同理只是改一下 IP 地址将其发送出去,效率快,但是集群很大的时候负载均衡器压力会大,可能成为瓶颈。

4.1.5    数据链路层负载均衡:请求中只修改 mac 地址,响应会由服务端直接返回给客户端。

4.2       负载均衡算法:轮询、加权轮询、随机、最少连接数(最符合负载均衡的定义,但是效率不高,用的不多)、源地址散列

5       应用集群中的 session 管理:session 复制(应用少)、session 绑定,同一 IP 到达固定服务器(应用少,集群情况下,宕机很常见,此时就会丢失)、cookie 记录 session、session 服务器。


用户头像

lucian

关注

还未添加个人签名 2018.03.13 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 -week05- 总结