Week_05 总结
这周的信息量有些大,有些知道,有些不知道,有些又模棱两可。这段时间,因为个人的原因,时间投入有些不够,后续会充实每一篇总结与作业,加油!!!
这周教学内容主要讲技术选型,大体分为三个层面:
分布式缓存系统的架构
缓存与缓冲的区别:一种是多次读取,加快访问速度;另一种是高速与低速存储器之间的协调适配器
缓存一般是通过key找出对应的value,多用hash表实现
缓存系统中的关键指标是缓存命中率。影响因素有
键所表示的范围的大小,范围越大,命中率就可能低
缓存系统可用的内存空间,空间大,缓存的对象就多,命中的可能性就大
缓存对象的生命周期,缓存时间越长,命中可能性越大
缓存分类,从用户端到服务端,依次有:
代理缓存,即用户本地的缓存(浏览器对象缓存)
反向代理缓存,服务端的反向代理服务器。反向代理服务器可以通过多层代理,加快系统响应
内容分发网络CDN,由网络运营商提供,将一些静态数据放入CDN,加快边缘访问速度
远程分布式对象缓存
从逻辑上来分:
通读缓存 read-through,缓存中未命中则透过缓存,从服务器读取
旁路缓存,是独立的存储,先查缓存是否存在,如果不存在,则从服务器获取,并进行缓存
memcached
以富客户端的方式,通过hash计算,进行缓存实例的寻址,这种方式能实现线性伸缩。
一致性hash算法:
是一种路由算法,通过计算进行寻址,寻址空间为0~2^(32-1)。
解决缓存系统动态伸缩时,缓存失效或者数据迁移范围大的问题。
虚拟节点,解决缓存系统各节点负载失衡的问题
存储介质中访问时延
内存 -- 1000倍 --> ssd -- 5倍 --> 网络(同数据中心)--200倍-->hdd
缓存为啥能提升性能
读内存跟快
不需要中间计算,只需要进行hash,cpu消耗低
缓解了磁盘,网络,数据库等压力,使其能更快的响应
系统优化必备:技术简单,性能提升显著,场景多
什么情况下应该使用缓存
读多写少的系统,使用缓存才有意义,读写为2:1以上
存在热点数据,否则在被访问之前就被挤出了缓存
数据不一致与脏读,缓存失效时,需要重新加载,需要业务容忍一定时间不一致的问题
缓存使用中的问题
缓存血崩
业务数据大到一定程度,缓存系统down机时,数据库不能承受压力而导致数据down机。这种情况不能简单通过重启缓存和数据库进行恢复
缓存预热
系统启动时,预先加载一些通用的信息,对缓存进行预热
缓存穿透
持续高并发的请求不存在的,导致这些并发请求压到数据库,造成压力,甚至崩溃
redis vs memcache
redis数据结构丰富
多路复用异步io,性能好一些
有主从复制,支撑高可用
支持集群模式
基于消费者生产者模式的消息队列架构
负载均衡架构
评论