架构师训练营第五周学习总结
分布式缓存
缓存有哪些?
CPU缓存、OS缓存、数据库缓存、JVM编译缓存、CDN缓存、代理与反向代理缓存、前端缓存、应用程序缓存、分布式对象缓存
缓存的数据结构
Hash表
缓存的两种访问模式
通读缓存(Read-through)、旁路缓存(Cache-aside)
缓存访问的路由算法
Hash算法、一致性Hash算法、基于虚拟节点的一致性Hash算法
缓存使用中的问题
读写比高于2:1缓存才有意义
解决没有热点的访问:LRU算法
数据一致性问题
缓存雪崩
缓存预热
缓存穿透:缓存Null值,布隆过滤器
消息队列
同步调用VS异步调用
异步调用不阻塞应用线程
异步调用架构
消息队列:生产者、消息队列、消费者
两种模型:P2P模型、发布订阅模型
消息队列的好处
提升写性能
更好的伸缩性
削峰填谷
失效隔离、自我修复
解耦
事件驱动架构(EDA)
更少的耦合表面积
主流的MQ产品
RabbitMQ、ActiveMQ、RocketMQ、Kafka
负载均衡
将用户的请求均匀分摊到每台应用服务器
负载均衡方法
HTTP重定向
缺点:两次请求(性能低)、内网地址暴露(安全性差)
DNS负载均衡
DNS配置多个A记录
反向代理负载均衡
基于应用层协议:通常适合小规模集群(十几台)
IP负载均衡
基于IP层协议:直接修改数据包的源地址和目标地址
链路层负载均衡
基于链路层协议:虚拟IP、修改MAC地址、数据返回不再经过负载均衡服务器(三角模式),性能大大提高
负载均衡算法
轮询、加权轮询、随机、加权随机、最少连接、IP散列
Session管理
Session复制:Web服务器同步复制Session、效率低下
Session粘滞(Session Sticky):固定某一台Web服务器、无法满足高可用需求
客户端Cookie:每次传递Cookie,Cookie大小有限,某些情况下Cookie禁止
Session服务器:Web服务器无状态,实际最常用(推荐)
总结
屡试不爽的优化方法:对于读的优化采用缓存、对于写的优化采用消息队列(读缓存、写队列)
负载均衡可基于应用层、IP层和链路层,越往下效率越高(小规模集群采用反向代理即可,大规模互联网应用通常采用链路层负载均衡)
评论