一、简述http协议缓存原理及常用首部讲解
1、缓存的类型
- 页面缓存
页面缓存是将动态页面直接生成静态的页面放在服务器端,用户调取相同页面时,静态页面将直接下载到客户端,不再需要通过程序的运行和数据库的访问,大大节约了服务器的负载。每次访问页面时,会检测相应的缓存页面是否存在,若不存在,则连接数据库得到数据渲染页面并生成缓存页面文件,这样下次访问的页面文件就发挥作用了。 - 浏览器缓存
浏览器缓存机制,主要就是HTTP协议定义的缓存机制(如 Expires;Cache-control等),还包括非HTTP协议定义的缓存机制,如使用HTML Meta标签。 - 数据缓存
数据缓存是最灵活的一种缓存。但是需要在代码中额外的步骤才能使用。当所有用户都在发布信息的时候,用户发布信息后想立即看到这些数据,就需要数据缓存来实现。
目前的实现分为两种方式:
1.内容缓存:将缓存数据存放在服务器的内存空间中。
2.文件缓存:缓存数据存放在服务器的硬盘空间中
- 数据库缓存
数据库的缓存一般由数据库提供,可以对表建立高速缓存。数据库中,用户可能多次执行相同的查询语句,为了提高查询效率,数据库会在内存划分一个专门的区域,用来存放用户最近执行的查询,这块区域就是缓存。 - 反向代理缓存
就像代理服务器缓存和浏览器缓存一样,我们同样可以讲内容缓存在反向代理服务器上,所有缓存机制的实现仍然采用HTTP/1.1协议。
2.缓存的相关特性
- cache:缓存
程序的运行具有局部性特征:
时间局部性:一个数据被访问过之后,可能很快会被再次访问到;
空间局部性:一个数据被访问时,其周边也有可能被访问到;
- cache:命中
热区:经常被访问的数据区域;
缓存命中率:判断缓存的利用率的衡量指标,hit/(hit+miss):取值范围(0,1);
页面命中率:基于页面数量进行衡量
字节命中率:基于页面的体积进行衡量
缓存的生命周期(缓存清理有2种场景):
1.缓存项过期
2.缓存空间用尽:LRU算法(最近最少使用)
例如,dns服务的解析结果也可缓存,而缓存多长时间是在dns服务器上每一条资源记录上ttl定义的;
-缓存与否:
私有数据:private cache,不可缓存
公共数据:public or private cache,可以缓存
- 缓存处理步骤:
接收请求 --> 解析请求(提前请求的URL及各种首部) --> 查询缓存 --> 新鲜度检测 --> 构建响应报文 --> 发送响应报文 --> 记录日志;
在Web服务器上是通过http协议中的请求和响应首部来定义缓存时间的;
3. http协议缓存的原理:
基于nginx反代时,后端主机有可能是apche或nginx提供静态资源的服务器;nginx为了加速性能,可开启nginx缓存,proxy cache;如果这nginx为负载均衡器时,还要承担缓存的功能,在高并发下,会面临带宽瓶颈问题;在较大规模时,不应该让单台服务器承担太多的角色;因此,就让代理功能的服务器只负责代理,缓存功能的服务器只负责缓存;所以,有些主机专门实现在对应的反代服务器背后,来提供缓存的功能;缓存服务器负责自己管理缓存,然后,当前端主机请求资源时,它所指向的上游服务器不是真正的服务器,而是缓存服务器,这里指的是http协议;所以,在前端服务器和缓存服务器之间依然是http请求和http响应报文;缓存服务器如果本地未能命中,会到后端服务器读取数据,取到以后按照缓存策略是否可缓存,如果可缓存就把数据缓存到缓存服务器本地;如果反代服务器取资源时,缓存服务器能命中,则缓存服务器直接响应,省去了到后端主机读取数据的过程。- 缓存有效性判断机制:
过期时间:Expires
HTTP/1.0:Expries;过期
绝对时长控制机制,有缺陷和局限性,如果时区不同,会有影响;
HTTP/1.1
Cache-Control:maxage=
Cache-Control:s-maxage=
相对时长控制机制
- 条件式请求:
Last-Modified/:上次修改时间
If-Modified-Since:基于文件的修改时间戳来判别;
Etag/If-None-Match:基于文件的校验码来判别;
- 有些网站的内容,一秒钟就会改变n次,这种极端场景中,缓存依然有可能是不能被命中的;面对这种场景,进行有效性再验证时基于时间戳就不是很有效了;
这种情况,可根据文件的标签进行验证,给每个页面资源加一个扩展标签Etag,每个资源内容的标记使用校验码,只要内容不变校验码就不变,所以这个扩展标签可认为是一个校验码;常见的请求首部为If-Modified-Since和If-None-Match两种;
示例:
Expires:Thu, 13 Aug 2026 02:05:12 GMT
Cache-Control:max-age=315360000
ETag:"1ec5-502264e2ae4c0"
Last-Modified:Wed, 03 Sep 2014 10:00:27 GMT
- 请求报文用于通知缓存服务如何使用缓存响应请求:
cache-request-directive = 请求首部报文缓存,主要目的是,告诉缓存服务器是否接受缓存中的内容或只接收哪些类型的资源
"no-cache", 不能用缓存响应
| "no-store" :请求时,必须给非缓存内容才接受;
| "max-age" "=" delta-seconds
| "max-stale" [ "=" delta-seconds ]
| "min-fresh" "=" delta-seconds
| "no-transform"
| "only-if-cached"
| cache-extension :缓存扩展
- 响应报文用于通知缓存服务器如何存储上级服务器响应的内容:
cache-response-directive = 相应报文首部缓存,目的是用来指示客户端或缓存服务器的缓存功能
"public" :可以放在公共缓存
| "private" [ "=" <"> 1#field-name <"> ] 仅私有缓存可缓存
| "no-cache" [ "=" <"> 1#field-name <"> ],可缓存,但响应给客户端之前需要revalidation,即必须发出条件式请求进行缓存有效性验正;
| "no-store" ,不允许存储响应内容于缓存中;
| "no-transform"
| "must-revalidate":必须做重新校验;内容缓存后,即便命中时必须到后端服务器进行验证,跟no-cache相似;
| "proxy-revalidate"
| "max-age" "=" delta-seconds:可缓存有效时间,是相对时长
| "s-maxage" "=" delta-seconds 公共缓存服务器可缓存时长
| cache-extension
二、简述回源原理和CDN常见多级缓存
1. 回源原理
- 回源是指浏览器在发送请求报文时,响应该请求报文的是源站点的服务器,而不是各节点上的缓存服务器,那么这个过程相对于通过各节点上的缓存服务器来响应的话就称作为回源。回源的请求或流量太多的话,有可能会让源站点的服务器承载着过大的访问压力,进而影响服务的正常访问。
- 常规的CDN都是回源的。即:当有用户访问某一个URL的时候,如果被解析到的那个CDN节点没有缓存响应的内容,或者是缓存已经到期,就会回源站去获取。如果没有人访问,那么CDN节点不会主动去源站拿的。
- 源站内容有更新的时候,源站主动把内容推送到CDN节点。
2. CDN缓存
(1)CDN:缓存网络,Content Delivery Network,即内容分发网络;加速器,向代理缓存。
(2)基本思路
尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决Internet网络拥挤状况,提高用户访问网站的响应速度。
(3)CDN的基本原理
广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。
(4)服务模式
- 内容分发网络(CDN)是一种新型网络构建方式,它是为能在传统的IP网发布宽带丰富媒体而特别优化的网络覆盖层;而从广义的角度,CDN代表了一种基于质量与秩序的网络服务模式。
- 简单地说,内容分发网络(CDN)是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件,而内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。
- 总的来说,内容服务基于缓存服务器,也称作代理缓存(Surrogate),它位于网络的边缘,距用户仅有"一跳"(Single Hop)之遥。同时,代理缓存是内容提供商源服务器(通常位于CDN服务提供商的数据中心)的一个透明镜像。这样的架构使得CDN服务提供商能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍请求响应时间有任何延迟的。
(5)关键技术
1.内容发布:它借助于建立索引、缓存、流分裂、组播(Multicast)等技术,将内容发布或投递到距离用户最近的远程服务点(POP)处;
2.内容路由:它是整体性的网络负载均衡技术,通过内容路由器中的重定向(DNS)机制,在多个远程POP上均衡用户的请求,以使用户请求得到最近内容源的响应;
3.内容交换:它根据内容的可用性、服务器的可用性以及用户的背景,在POP的缓存服务器上,利用应用层交换、流分裂、重定向(ICP、WCCP)等技术,智能地平衡负载流量;
4.性能管理:它通过内部和外部监控系统,获取网络部件的状况信息,测量内容发布的端到端性能(如包丢失、延时、平均带宽、启动时间、帧速率等),保证网络处于最佳的运行状态。
(6)主要特点
1、本地Cache加速 提高了企业站点(尤其含有大量图片和静态页面站点)的访问速度,并大大提高以上性质站点的稳定性
2、镜像服务 消除了不同运营商之间互联的瓶颈造成的影响,实现了跨运营商的网络加速,保证不同网络中的用户都能得到良好的访问质量。
3、远程加速 远程访问用户根据DNS负载均衡技术智能自动选择Cache服务器,选择最快的Cache服务器,加快远程访问的速度
4、带宽优化 自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻原站点WEB服务器负载等功能。
5、集群抗攻击 广泛分布的CDN节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵以及降低各种D.D.o.S攻击对网站的影响,同时保证较好的服务质量 。
(7)GSLB:全局服务负载均衡器; 调度客户请求到不同的缓存服务器上;
(8)SLB:局部负载均衡器;