第五周学习总结

用户头像
CP
关注
发布于: 2020 年 07 月 08 日

本周介绍了缓存、消息队列、负载均衡和分布式数据库相关的特性及应用实践。

缓存

  1. 缓存和缓冲是不一样的:

  2. 缓存是为了解决多读性能问题,保护后端数据库不被压垮;

  3. 缓冲一般只读一次,是为了解决短时间处理速度达不到请求速度,会导致请求超时的问题。

  4. 缓存影响命中率的三个重要因素:1)Key集合大小;2)内存大小;3)缓存生命周期;

  5. 缓存分为通读缓存和旁路缓存:

  6. 通读缓存:读操作每次都从缓存获取数据,不会访问数据库;

  7. 旁路缓存:读操作先访问缓存,如果不存在,就访问数据库,并将获取到的数据加入缓存;

  8. 分布式缓存中间件:

  9. redis: 分为多个桶存储数据,每台服务器存储数据不重叠,桶之间分享key和桶之间的关系,每个桶都知道任意key在哪个桶;

  10. MapReduce:采用一致性哈希寻找服务器,服务器之间不通讯,架构更加简单,扩容更加方便,影响也小;

  11. 缓存在互联网系统中无处不在,通过层层缓存分担,将大量请求在业务服务、数据库上游消化掉。

  12. 缓存管理时,需要考虑缓存穿透防护、缓存雪崩(主要通过规范运维过程和使用一致性hash算法)、缓存预加载等问题。

  13. 缓存一般不做主动更新,当数据变更时,删掉缓存旧数据,下次读操作时,再写入缓存;

消息队列与异步架构

  1. 同步和异步:

  2. 同步会一直占用客户端线程,直到服务处理完之后才能释放;

  3. 异步可以再服务器收到请求后就返回,然后服务器处理完之后再通知客户端,客户端可以通过接收回调消息获得返回结果;

  4. 消息队列模型:

  5. 点对点模型:采用队列的数据结构,先进先出。特点是只会有一个消费者消费。

  6. 发布订阅模型:逻辑上相当于每个订阅者都有一个消息队列,MQ服务每收到一条消息,都会复制多份添加到订阅者队列中,所以每个订阅者都会收到消息。

  7. 消息队列服务的好处

  8. 异步处理,提高服务处理性能

  9. 更好的伸缩性

  10. 削峰填谷

  11. 解耦,服务间不依赖,只依赖消息队列服务

负载均衡

  1. 焦点:

  2. 把请求发送给哪个服务器;

  3. 如何把请求发送给服务器;

  4. 负载均衡方案:

  5. HTTP重定向:每次请求都要重定向,性能较差。对外暴露服务器的公网IP也有安全问题。

  6. DNS服务:一般一个客户端只解析一次,然后缓存使用。相对于HTTP重定向要好。

  7. 反向代理:由于HTTP包比较大,负载均衡服务器每次都需要拆包、装包,性能压力较大。小规模集群情况可以使用。

  8. IP负载均衡:在TCP/IP层做负载均衡。TCP包相对于HTTP包,拆包、装包性能压力小。但是还是存在请求、返回两个方向都要经过负载均衡服务器,大规模集群下,网卡压力依然比较大。

  9. 数据链路层负载均衡:通过修改mac地址方式,请求经过负载均衡服务器,但是返回,可以直接返回到客户端,降低网卡压力。

  10. 负载均衡算法:

  11. 轮询

  12. 加权轮询

  13. 随机数

  14. 最少连接

  15. 源地址散列

  16. session管理:分布式服务中,有些业务需要对session进行管理,保证业务服务能拿到用户的会话上下文。session管理方案有:

  17. session复制:基本不会使用,反而增加带宽、存储压力;

  18. session绑定(会话粘滞):服务变成有状态的了,应用升级、伸缩变换时,用户就批量受到影响。

  19. 利用Cookie记录session:增加网络带宽

  20. session服务器:适用于较大集群

分布式数据库

  1. 主从复制:主要解决并发读和高可用问题,可以分摊负载,数据热备。写库一般不支持读。

  2. 注意,涉及到DDL操作,需要人工干预,新增字段提前再各个写库和读库中新增。删除字段,要所有应用都不使用字段后,再执行。

  3. 主主复制:解决写库不是高可用的问题,通过虚IP+哨兵机制,做到动态切换。同一时刻只能有一个写库对外提供服务。



用户头像

CP

关注

还未添加个人签名 2018.03.15 加入

还未添加个人简介

评论

发布
暂无评论
第五周学习总结