分享目录
1、 缓存概述
2、 浏览器缓存
3、 CDN缓存
4、 反向代理缓存
5、 本地缓存
6、分布式缓存
一、缓存概述
缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问
缓存的原理
l 将数据写入/读取速度更快的存储(设备);
l 将数据缓存到离应用最近的位置;
l 将数据缓存到离用户最近的位置。
1.2 缓存的分类
浏览器缓存、CDN缓存、反向代理缓存、本地缓存、分布式缓存
1.3 缓存的媒介
常用中间件:Varnish,Ngnix,Squid,Memcache,Redis,Ehcache等;
缓存的内容:文件,数据,对象;
缓存的介质:CPU,内存(本地,分布式),磁盘(本地,分布式)
1.4 缓存设计原则及策略
1) 缓存什么?
需要缓存的数据:热点数据;静态资源
2) 缓存的位置
CDN、反向代理、分布式缓存服务器、本机(内存,硬盘,文件等)
3) 过期策略
固定时间:比如置顶缓存的时间
相对时间:比如最近的10分钟没有访问的数据
4) 同步机制
实时写入;异步刷新
二、浏览器缓存
浏览器缓存(BrowserCaching)是为了节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页面的阅览。
浏览器缓存主要有两类:缓存协商:Last-modified ,Etag 和彻底缓存:cache-control,Expires。
缓存控制头 Cache-Control
Cache-Control 是最重要的规则。这个字段用于指定所有缓存机制在整个请求/响应链中必须服从的指令。这些指令指定用于阻止缓存对请求或响应造成不利干扰的行为。这些指令通常覆盖默认缓存算法。缓存指令是单向的,即请求中存在一个指令并不意味着响应中将存在同一个指令。
cache-control 定义常用值:
1) public 所有内容都将被缓存;
2) private 内容只缓存到私有缓存中;
3) no-cache 所有内容都不会被缓存
4) no-store 所有内容都不会被缓存到缓存或 Internet 临时文件中
5) must-revalidation/proxy-revalidation 如果缓存的内容失效,请求必须发送到服务器/代理以进行重新验证
6) max-age=xxx (xxx is numeric) 缓存的内容将在 xxx 秒后失效, 这个选项只在HTTP1.1可用, 并如果和Last-Modified一起使用时, 优先级较高
过期头 (Expires)
Expires 头部字段提供一个日期和时间,响应在该日期和时间后被认为失效。失效的缓存条目通常不会被缓存(无论是代理缓存还是用户代理缓存)返回,除非首先通过原始服务器(或者拥有该实体的最新副本的中介缓存)验证。(注意:cache-control max-age 和 s-maxage 将覆盖 Expires 头部。)
Expires 字段接收以下格式的值:“Expires: Sun, 08 Nov 2009 03:37:26 GMT”。如果查看内容时的日期在给定的日期之前,则认为该内容没有失效并从缓存中提取出来。反之,则认为该内容失效,缓存将采取一些措施。表 3-6 表明针对不同用户操作的不同浏览器的行为。
控制文件是否有修改 Last-Modified/E-Tag
Last-Modified 实体头部字段值通常用作一个缓存验证器。简单来说,如果实体值在 Last-Modified 值之后没有被更改,则认为该缓存条目有效。ETag 响应头部字段值是一个实体标记,它提供一个“不透明” 的缓存验证器。这可能在以下几种情况下提供更可靠的验证:不方便存储修改日期;HTTP 日期值的 one-second 解决方案不够用;或者原始服务器希望避免由于使用修改日期而导致的某些冲突。
三、CDN缓存
CDN主要解决将数据缓存到离用户最近的位置,一般缓存静态资源文件(页面,脚本,图片,视频,文件等)。国内网络异常复杂,跨运营商的网络访问会很慢。为了解决跨运营商或各地用户访问问题,可以在重要的城市,部署CDN应用。使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率
3.1 CDN的原理
让我们首先看一下未使用CDN的请求过程
1)、用户向浏览器提供要访问的域名;
2)、浏览器调用域名解析函数库对域名进行解析,以得到此域名对应的IP地址;
3)、浏览器使用所得到的IP地址,向域名的服务主机发出数据访问请求;
4)、浏览器根据域名主机返回的数据显示网页的内容。
使用了CDN之后请求过程
1)、用户向浏览器提供要访问的域名;
2)、浏览器调用域名解析库对域名进行解析,由于CDN对域名解析过程进行了调整,所以解析函数库一般得到的是该域名对应的CNAME(别名)记录,为了得到实际IP地址,浏览器需要再次对获得的CNAME域名进行解析以得到实际的IP地址;在此过程中,使用的全局负载均衡DNS解析,如根据地理位置信息解析对应的IP地址,使得用户能就近访问。
3)、此次解析得到CDN缓存服务器的IP地址,浏览器在得到实际的IP地址以后,向缓存服务器发出访问请求;
4)、缓存服务器根据浏览器提供的要访问的域名,通过Cache内部专用DNS解析得到此域名的实际IP地址,再由缓存服务器向此实际IP地址提交访问请求;
5)、缓存服务器从实际IP地址得得到内容以后,一方面在本地进行保存,以备以后使用,另一方面把获取的数据返回给客户端,完成数据服务过程;
6)、客户端得到由缓存服务器返回的数据以后显示出来并完成整个浏览的数据请求过程。
CDN典型拓扑
3.2 CDN中的关键技术
内容发布:它借助于建立索引、缓存、流分裂、组播等技术,将内容发布到距离用户最近的边缘服务器。
请求路由:它是整体性的网络负载均衡技术,通过内容路由器中的重定向机制,在多个边缘服务器间均衡用户的请求,以使用户请求到最近内容源的响应
负载均衡:他根据内容的可用性、服务器的可用性及用户的情况,平衡负载流量
性能管理:它通过内部和外部监控系统,获取网络部件的状况信息,测量内容发布的端到端性能(如包丢失、延时、平均带宽、启动时间、帧速率等),保证网络处于最佳的运行状态
3.3 CDN优缺点
优点:
l 本地Cache加速:提升访问速度,尤其含有大量图片和静态页面站点;
l 镜像服务:消除了不同运营商之间互联的瓶颈造成的影响,实现了跨运营商的网络加速,保证不同网络中的用户都能得到良好的访问质量;
l 远程加速:远程访问用户根据DNS负载均衡技术智能自动选择Cache服务器,选择最快的Cache服务器,加快远程访问的速度;
l 带宽优化:自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻原站点WEB服务器负载等功能。
l 集群抗攻击:广泛分布的CDN节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵以及降低各种DDOS攻击对网站的影响,同时保证较好的服务质量。
缺点:
动态资源缓存,需要注意实时性;
解决:主要缓存静态资源,动态资源建立多级缓存或准实时同步;
下次分享反向代理缓存、分布式缓存及本地缓存的知识点。
参考资料:
1、缓存在分布式中的应用 http://www.cnblogs.com/itfly8/p/5562610.html