架构师 3 期 3 班 -week5- 总结
缓存
用于优化读性能
缓存的应用
CPU缓存:L1 L2 L3
操作系统缓存:page cache(linux)
数据库缓存:Query Cache (mysql)
JVM缓存:Code Cache (jvm存储jit优化的指令)
上面是操作系统及虚拟机级别的缓存应用,下面的应用层的缓存应用
CDN缓存:搭建在边缘节点的缓存服务
反向代理服务器缓存:如nginx的proxy cache
客户端缓存:浏览器的缓存,app的缓存
应用程序的缓存:应用程序的内存空间
分布式缓存服务:redis/memcached 独立的缓存服务
各种存储介质数据访问的延时
| 操作类型 | 访问延时 |
|---------------------|-----------------|
| 本地内存 | 100ns |
| SSD | 100,000ns |
| 网络数据包(内网) | 500,000ns |
| 磁盘(非SSD) | 10,000,000ns |
| 按顺序从网络中读取1MB数据 | 10,000,000ns |
| 按顺序从磁盘(非SSD)读取1MB数据 | 30,000,000ns |
| 夸大西洋网络数据包来回一次 | 150,000,000ns |
| 每秒 | 1,000,000,000ns |
缓存数据结构
常用hash表,访问速度快
hash表需要注意的问题
* 负载因子:合理设置负载因子,避免hash表退化成链表或红黑树
* hash冲突:如java 使用链表和红黑树,存储hash值相同的值
* rehash操作:渐进式rehash,避免rehash时访问数据延时过长
缓存命中率
缓存命中率是缓存的关键性指标,低命中率表示缓存目的或效果没有达到预期。
影响缓存命中率的因素
* 缓存键集合的大小
* 缓存可使用的内存空间
* 缓存对象的生存时间
缓存面对的问题
* 缓存失效策略
* 缓存雪崩
* 缓存穿透
消息队列
用于优化写性能
消息队列的作用
* 提高写性能
* 系统间解耦
* 并非请求缓冲(消峰)
负载均衡
负载均衡算法
* 轮询
* 加权轮询
* 随机
* 最少连接
* 源地址散列
版权声明: 本文为 InfoQ 作者【zbest】的原创文章。
原文链接:【http://xie.infoq.cn/article/e3799155887e0e47df8bf56f0】。未经作者许可,禁止转载。
评论