【第五周】学习总结——缓存、消息队列、负载均衡
1、分布式缓存架构
缓存的关键指标:命中率
影响命中率的因素:缓存键集合大小,可用存储空间大小,缓存对象存活时间
缓存方式分类:通读缓存、旁路缓存、异步缓存
各种介质数据访问延时

实践
分布式缓存,分片存储缓存对象,在伸缩节点时,如果大面积缓存失效,可能引起雪崩场景
解决方法:一致性hash
缓存问题:缓存穿透、缓存击穿、缓存雪崩
2、消息队列与异步架构
消息队列好处:更好的伸缩性,削峰填谷,失败隔离与自我修复,解耦
Kafka,RocketMQ,RabbitMQ
生产者和消费者压力示例

3、负载均衡架构
1、应用层负载
服务器较少,直接使用Nginx提供负载均衡

2、使用链路层负载
服务器较多,且响应带宽存在压力的场景,LVS,F5

3、多级负载
由DNS提供一级负载,再结合链路层负载,一起完成负载

大型互联网项目都是组合型多级负载
Session共享问题
1、中心缓存模式
比如由Redis提供统一session存储

2、加密令牌模式
比如JWT,微服务一般采取该种方案

3、Session复制
服务器少的时候还可以,一旦服务器多了,就特别耗网络和系统资源

4、Session绑定
服务更新维护部署,会直接导致该主机session全部失效
不支持伸缩,简单的ip hash方式在节点伸缩时会发生部分绑定偏移

4、小结
缓存是提升性能的一大利器,缓存就是当缓存用,缓存也有很多知识点和需要面对的挑战,可以深入学习
消息队列是大并发、异步、解耦等场景使用的一个基础中间件,是必须熟悉的,有时间要对其内部原理做更多学习理解
负载均衡是集群高可用的一个基础组件,基于之前项目中的接触了解,继续踏实和扩展学习。
评论