第五周 - 学习总结
互联网系统架构技术方案(一)
1.分布式缓存
什么是缓存 Cache
缓存是介于数据访问者和数据源之间的一种高速存储,当数据需要多次读取的时候,用于加快读取的速度。
注:缓存的目的是为了“高速读取”。
缓存的关键指标
缓存关键指标用来衡量一个缓存效果好不好。
多少次能读到缓存数据这就是:缓存命中率。
例如:查询一个缓存,10 次查询 9 次能够得到正确结果,那么它的命中率是 90%。
影响缓存命中率的主要指标
缓存键集合大小 - key 越少存储的数据就越少,那数据基本都能被缓存到;即:键数量越少,缓存能被命中的效率越高。
缓存可使用内存空间 - 内存空间是有限的不可能把所有数据都缓存起来,只能缓存一部分的数据,即:物理上能缓存的对象越多,缓存命中率就越高。
缓存对象生存时间 - 级存对象生存时间 称为 TTL(Time To Live)。缓冲数据是要多次读取的,即:对象缓存的时间越长,缓存对象被重用的可能性就越高。
缓冲可以分为两种
通读缓存(read-through)
客户端连的是通读缓存而不是源始服务器。
代理缓存、反向代理缓存、CDN 缓存都是通读缓存。
旁路缓存(cache-aside)
客户端两个都要连接,即:要连接源始服务器也要连接旁路缓存服务。使用的时候先去旁路缓存中查找,有就使用没有就去源始服务器中查找,查找后给客户端,客户端在把数据写入到旁路缓存中。
这种缓存通常是对象缓冲(对象缓存就是这种 key/value 形式的),就是应用程序自己去访问的缓冲。
缓存为什么能显著提升性能
缓存数据通常来自内存,比磁盘上的数据有更快的访问速度。
缓存存储数据的最终结果形态,不需要中间计算,减少 CPU 资源的消耗。
缓存降低数据库、磁盘、网络的负载压力,使这些 I/O 设备获得更好的响应特性。
合理使用缓存
一般来说,数据读写比在 2:1 以上,缓存才有意义。
缓存一些热点访问数据
设置合理的失效时间
2.消息队列与异步架构
异步调用
异步调用中的请求都放到一个消息队列中
有回调的异步调用也是通过消息队列
多次异步调用,不阻塞应用线程
消息队列构建异步调用架构
相关角色:消息生产者、消息对列、消息消费者
消息队列有两种模型
点对点模型 - 消息生产者生产的消息放到消息队列中,被消息消费者消息后消息队列中就没有这条消息了。
发布订阅模型 - 消息生产者生产的消息,看有多少个订阅就产生多少份消息。
消息队列的好处
实现异步处理,提升处理性能
更好的伸缩性
削峰填谷
失败隔离和自我修复
解耦
缓存一般处理读多的场景,而消息队列处理写多的场景。
3.负载均衡架构
要解决的是:
如何去选择一台服务器,把请求发送给它。
添加服务器的时候,如何把请求发送给它。
负载均衡算法
即:如何选择负载均衡服务器。
轮询
加权轮询
随机
最少连接
源地址散列
评论