CDN听得太多反而不知道什么意思,没关系这篇带你看懂
CDN已经成为响当当的商业化服务了。
随便搜了CDN结果:
确实很多大牛公司在做CDN,CDN采用的是边缘缓存战略。下面讲下边缘缓存的来源
使用web反向代理器基本缓存了原始服务器的资源,不需要每次像原始服务器请求资源,大名鼎鼎的Nginx就是代理服务器之一。
我们下载资源时候通常会有选择比如四川铁通,湖南网通等,我们要选择处于同一网络且地理上离我们最近的下载服务器,这样肯定快些,反向代理如果能做到跟用户来自同一个网络,就能得到高质量的反应速度(还记得当初组队刷学校寝室的日期真是全国各地都在刷然后刷不出来,最后求在实验室的师兄一分钟选好了寝室加床位,现在能不住在顶楼都要感谢根学校处于同一网络的师兄),这样的反向代理缓存称为边缘缓存。边缘缓存存在网络上靠近用户的一侧,这就是把东西放在离你最近的地方了。
【工具】:Varnish
边缘缓存中的商业化服务就是CDN(Content Delivery Network)内容分发网络,(班长拿了一堆报告单,然后告诉跑腿你去1班发,你去2班发,等等)之上展示的腾讯公有云还是华为公有云等服务商都提供了CDN服务。数据缓存在cdn上,根据缓存时间来对数据就行更新,缓存时间过短,CDN的边缘节点数据就会经常失效,如果过长就会带来数据更新过慢,所以不同的服务缓存的时间选择不同。
公有云CDN服务面向的都是开发者,开发者通过公司提供的“刷新”按钮等可以一键刷新,然后就可以保证客户端拉到最新数据喽,很多直播平台也是购买了公有云的CDN服务,有时候用户过多导致直播崩溃也是有的,CDN部门需要负责哈。
除了公有云的缓存还有服务端,平台级以及应用级别的缓存
【服务端缓存】:
响应时间非常依赖于服务端缓存,服务端的响应速度快才是治本,服务端的能力又主要在于查询数据库的快慢,数据库属于IO密集型应用,主要负责数据管理和存储,Mysql做到了查询缓冲机制,将select语句与查询结果存放在缓冲区,如果用户经常需要拿到某一信息,这个信息与客户端发送给服务器的请求查询数据库的数据库查询语句相符,那就不需要跑到数据库去搜索了,直接把相对应的信息返回给客户端就好了,提高了SQL的查询效率,是不是很机智?mysql具体缓存工作细节感兴趣可以自己查询
【平台级缓存】:平台级指的是框架,很多开源框架自带缓存功能,例如Ehcache,Voldemort,JBoss
【应用级缓存】:平台级缓存扛不住的时候,就轮到应用级的缓存,这里就不是框架了而是一个成熟的应用了,应用级别的缓存开发者需要利用代码实现缓存机制,这里是NoSQL的战场了,一直提出NoSQL,它的代表是Redis和MonggoDB,工作机制是每分钟或一段时间统一生成页面存储在缓存中。了解其机制可以重点了解下Redis,新浪微博作为几乎世界上最大的Redis集群,中国人口又作为世界第二大,能扛得住那么多人访问说明Redis还是很屌的。
缓存学习中需要明白这几个术语:
- 缓存命中
- 没有命中
- 存储成本
- 缓存失效
- 替代策略
替代策略有很多经典算法:
LRU/LFU/LRU2 /2Q/SIZE/LRU-THRESHOLD/FIFO/............
公有云缓存特点:
动态扩容,数据多备,自动容灾,成本低