Week5 学习总结
一、缓存技术
1、缓存介绍
1)是什么
2)为什么用缓存?为什么能提高性能?
2、什么时候用缓存?
1) 什么情况下适合使用缓存:
a. 系统的读大于写,读写比大于2:1时,缓存才有意义
b. 允许一定程度上的数据不一致性:通过业务手段,如用户提醒等处理 处理不一致性问题
2) 什么情况下不适合使用缓存:
a. 频繁修改数据
b. 没有热点数据:不符合二八原则,缓存没有价值
3、怎么使用缓存?
1)缓存相关技术
a. 应用层缓存
b. 代理缓存:客户端技术
c. 反向代理缓存&多层级反向代理缓存
e. CDN
2)缓存使用效果衡量
a. 缓存命中率
b. 影响缓存命中率的指标:缓存键集合的大小、缓存使用的内存空间、缓存对象的生存时间
4、缓存分类
1)通读缓存
a. 代理缓存、反向代理缓存、CDN 都是通路缓存
b. 缓存服务缓存资源,请求未命中时,缓存服务会获取实际数据
c. 客户端连接的是缓存服务,而不是原始服务
2)旁路缓存
a. 客户端请求数据时,先从对象缓存中取,取不到时再从应用服务中取
b. 客户端同时连接对象缓存和应用服务
5、缓存实现方案
1)本地缓存
2)分布式对象缓存
a. 集群管理:
->分布式&集群的区别:一堆机器即可构成一个分布式系统,集群指一个特定领域的软件部署在多 台服务器上并作为一个整体提供一类服务
->核心是路由算法:一致性hash算法
6、缓存使用过程中面临的问题
1)缓存失效
2)缓存雪崩
3)缓存预热
4)缓存穿透
二、异步调用&消息队列
1、同步调用 VS 异步调用
1)什么是同步调用
2)什么是异步调用
3)两者的区别:无法实时拿到处理结果、更加高效
2、基于消息队列实现的异步调用框架
1)消息生产者+消息队列+消息消费者
2)点对点模型:发生给指定的消费者、只被消费一次
3)发布订阅模型:可以被消费多次
3、消息队列&异步调用的好处
1)提升性能
2)更好的伸缩性
3)削峰填谷
4)失败隔离&自我修复
a. 生产者和消费者之间不直接依赖,两者相互隔离
b. 简化了服务的部署,降低了管理难度
5)系统解耦
4、事件驱动架构-EDA(发布订阅模式)
1)架构模型
2)请求响应型架构 VS 事件驱动型架构
a. 更高的性能
b. 更低的耦合性
5、相关MQ产品
RabbitMQ、ActiveMQ、RocketMQ、Kafka
三、负载均衡架构
核心的两个问题:如何转发用户请求+如何路由
1、如何转发用户请求
1)HTTP重定向:性能问题(多一次请求)+安全性问题(服务器暴露)
2)DNS负载均衡:
a. 解析的IP不是应用服务器的,而是反向代理的IP
b. 无法进行故障转移,应用服务器异常时,由DNS缓存的原因,导致部分用户不可用
3)反向代理&IP负载均衡:转发请求时修改IP地址
a. 3层负载均衡 VS 7层负载均衡
b. 如何进行IP地址的负载:DNAT
c. 反向代理服务器的网卡性能会成为瓶颈(响应的出口带宽)
4)数据链路层负载均衡:转发请求时修改MAC地址
a. 所有应用服务器都会收到用户请求,但是会根据MAC地址判断是否需要进行处理
b. VIP
2、如何路由-负载均衡算法
轮询、加权轮询、随机、最少连接、源地址散列
3、应用服务进行负载均衡处理(集群化)后面临的问题:Session管理
1)问题是什么:单机情况下,Session可交由Web容器管理,使用负载均衡的集群环境中,不能再由Web容器管理,因为用户的前一次请求和下一次请求可能分配到集群的不同机器上,交由Web容器管理会导致Session找不到
2)解决手段:
a. session复制
b. session绑定:通过客户端的IP地址,计算请求的应用服务器
c. 利用cookie记录session
d. 建立Session服务器
四、分布式数据库
1、MySQL复制
1)主从复制
2)一主多从
a. 分摊负载、专机专用、便于冷备&热备、高可用
b. 无法解决主服务器宕机的问题
3、)主主复制
a. 主主失效恢复、主主失效维护过程
2、MySQL复制注意事项
1)主主复制的两个数据库不能并发写入
2)复制只是增加了数据的读并发处理能力,没有增加写并发处理能力和存储能力
3)更新表结构会导致巨大的同步延迟
a. 更新表结构的时候,关闭数据库复制,手动执行DDL更新完每台设备的表结构后,再开启复制能力。不要通过数据库的复制操作,实现DDL的同步
b. 增加表结构的时候,先升级数据库,再升级应用;移除表结构的时候,先升级应用,在升级数据库。注意升级的先后顺序,保证兼容性
评论