架构师训练营第 5 周学习总结
5.1 分布式缓存架构:架构原理与使用中的注意事项
缓存数据使用的数据结构
Hash 表:时间复杂度O(1)
Hashcode是四字节的正整数
树
缓存的关键指标
缓存命中率
缓存键集合的大小
缓存可使用内存空间
缓存对象生存时间(TTL, Time To Live)
5.2 分布式缓存架构:常见的缓存实现形式
代理缓存:在客户一端
反向代理缓存:反向代理服务器是代理数据中心的内容的,是系统架构中的一个重要组成部分,是部署在数据中心的一组服务器。
多层反向代理缓存:HTTP URL
内容分发网络(CDN):由运营服务商提供
CDN同时配置静态文件和动态内容(AWS - S3, EC2)
通读缓存(read-through)
代理缓存,反向代理缓存,CDN缓存都是通读缓存
旁路缓存(cache-aside)
对象缓存是一种旁路缓存
浏览器对象缓存:旁路缓存
本地对象缓存
本地缓存构建分布式集群(JBoss),并不常见
远程分布式对象缓存
现在互联网系统主要使用的架构方案
常用的包括Memcached, Redis
Memcached分布式对象缓存
Share-Nothing架构
Memcached分布式缓存访问模型
原理,路由算法
5.3 分布式缓存架构:一致性Hash算法
分布式对象缓存的一致性Hash算法
一致性Hash的节点扩容
负载压力不均衡
添加服务器后,对负载的分摊也不均衡
基于虚拟节点的一致性Hash算法
技术栈各个层次的缓存
缓存为什么能显著的提升性能
缓存数据通常来自内存
缓存存储数据的最终结果形态
缓存降低数据库、磁盘、网络的负载压力
缓存是系统性能优化的大杀器
技术简单
性能提升显著
应用场景多
合理使用缓存
频繁修改的数据
没有热点的访问 - LRU
数据不一致与脏读
缓存雪崩
缓存预热 - 启动时加载热点数据
缓存穿透 - 将不存在的数据也缓存起来(其value值为null),并设定一个较短的失效时间。
Redis VS Memcached
Redis 支持复杂的数据结构
Redis 支持多路复用异步I/O,高性能
Redis 支持主从复制,高可用
Redis原生集群与share nothing集群模式
5.4 消息队列:如何避免系统故障传递?
同步调用 VS 异步调用
消息队列构建异步调用架构
点对点模型
发布订阅模型
消息队列的好处
实现异步处理,提升处理性能
更好的伸缩性
削峰填谷
失败隔离和自我修复
解耦
事件驱动架构EDA
耦合的表面积(程序调用者和被调用者之间耦合度有多高)更少。
主要MQ产品比较
RabbitMQ
ActiveMQ
RocketMQ
Kafka
5.5 负载均衡架构:如何用十行代码写一个负载均衡服务器?
负载均衡架构
HTTP重定向负载均衡
实现方法比较简单,部署简单
用户一次请求变成两次请求,请求效率比较低。
应用程序服务器IP地址暴露
DNS负载均衡
安全性问题
两级负载均衡
反向代理负载均衡
小规模的服务器集群
IP负载均衡
大规模的服务器集群
响应的压力
数据链路层负载均衡
相同的IP地址,修改MAC地址
三角模式
负载均衡算法
轮询
加权轮询
随机,加权随机
最少连接,并不常见
源地址散列,同一个来源总在同一个服务器上处理,实现会话粘滞。也并不常见。
应用服务器集群的Session管理
Session复制
数据量大,消耗资源
Session绑定
源地址散列
高可用场景,容易失败
利用Cookie记录Session
Cookie大小有限
有些浏览器禁止
Session服务器
评论