CDN
内容分发网络(CDN)是一种通过在全球多个地理位置分布的服务器上缓存网站内容,从而加快内容向最终用户传递的技术。当用户访问一个使用CDN服务的网站时,用户的请求会被自动重定向到离用户最近的服务器。这样,用户可以更快地获取到内容,提高了访问速度和用户体验,同时减轻了原始服务器的负载。
典型的CDN系统由下面三个部分组成:
分发服务系统: 最基本的工作单元就是Cache设备,cache(边缘cache)负责直接响应最终用户的访问请求,把缓存在本地的内容快速地提供给用户。同时cache还负责与源站点进行内容同步,把更新的内容以及本地没有的内容从源站点获取并保存在本地。Cache设备的数量、规模、总服务能力是衡量一个CDN系统服务能力的最基本的指标
负载均衡系统: 主要功能是负责对所有发起服务请求的用户进行访问调度,确定提供给用户的最终实际访问地址。两级调度体系分为全局负载均衡(GSLB)和本地负载均衡(SLB)。全局负载均衡主要根据用户就近性原则,通过对每个服务节点进行“最优”判断,确定向用户提供服务的cache的物理位置。本地负载均衡主要负责节点内部的设备负载均衡
运营管理系统: 运营管理系统分为运营管理和网络管理子系统,负责处理业务层面的与外界系统交互所必须的收集、整理、交付工作,包含客户管理、产品管理、计费管理、统计分析等功能。
CDN 的作用
CDN一般会用来托管Web资源(包括文本、图片和脚本等),可供下载的资源(媒体文件、软件、文档等),应用程序(门户网站等)。使用CDN来加速这些资源的访问。
提高内容访问速度:CDN通过将内容缓存到离用户地理位置更近的服务器上,减少了数据传输的距离,从而减少了延迟,提高了网站或应用的加载速度。
增强网站的可用性和可靠性:CDN通过分布式的服务器架构提供内容,即使某个服务器出现故障,其他服务器仍然可以提供服务,从而增强了网站的可用性和可靠性。
减轻源服务器负载:由于CDN可以处理大量的内容请求,因此可以显著减轻源服务器的负载,避免在高流量情况下的性能瓶颈。
提高网站的安全性:许多CDN提供商提供安全功能,如DDoS攻击防护、安全证书管理和数据加密,有助于增强网站的安全性。
内容优化和压缩:CDN还可以对内容进行优化和压缩,进一步提高传输效率和速度
CDN的工作流程
用户发起请求:用户在浏览器中输入网址,请求网站内容。
DNS解析:用户的DNS请求会被解析到CDN的边缘服务器的IP地址。
寻找最近的服务器:CDN网络通过算法确定离用户最近的服务器,并将用户的请求重定向到该服务器。
检查缓存:边缘服务器检查其缓存中是否有用户请求的内容。
- 如果有,服务器直接将缓存的内容发送给用户。
- 如果没有,边缘服务器会向原始服务器或上一级缓存服务器请求内容,然后将其传递给用户,同时缓存一份以便下次使用。
内容传递给用户:用户从离他最近的服务器接收内容,因此加载速度更快。
CDN缓存策略
CDN边缘节点缓存策略因服务商不同而不同,但一般都会遵循 http 标准协议,通过 http 响应头中的 Cache-control: max-age
的字段来设置CDN边缘节点数据缓存时间。
当客户端向CDN节点请求数据时,CDN节点会判断缓存数据是否过期,若缓存数据并没有过期,则直接将缓存数据返回给客户端;否则,CDN节点就会向源站发出回源请求,从源站拉取最新数据,更新本地缓存,并将最新数据返回给客户端。
CDN服务商一般会提供基于文件后缀、目录多个维度来指定CDN缓存时间,为用户提供更精细化的缓存管理。
CDN缓存时间会对“回源率”产生直接的影响。若CDN缓存时间较短,CDN边缘节点上的数据会经常失效,导致频繁回源,增加了源站的负载,同时也增大的访问延时;若CDN缓存时间太长,会带来数据更新时间慢的问题。开发者需要增对特定的业务,来做特定的数据缓存时间管理。
CDN缓存的缺点
CDN的分流作用不仅减少了用户的访问延时,也减少的源站的负载。但其缺点也很明显:当网站更新时,如果CDN节点上数据没有及时更新,即便用户再浏览器使用Ctrl +F5的方式使浏览器端的缓存失效,也会因为CDN边缘节点没有同步最新数据而导致用户访问异常
CDN缓存刷新
CDN边缘节点对开发者是透明的,相比于浏览器 Ctrl+F5 的强制刷新来使浏览器本地缓存失效,开发者可以通过CDN服务商提供的“刷新缓存”接口来达到清理CDN边缘节点缓存的目的。这样开发者在更新数据后,可以使用“刷新缓存”功能来强制CDN节点上的数据缓存过期,保证客户端在访问时,拉取到最新的数据
CDN回源
回源是指浏览器在发送请求报文时,响应该请求报文的是源站点的服务器,而不是各节点上的缓存服务器
常规的CDN都是回源的。即:当有用户访问某一个URL的时候,如果被解析到的那个CDN节点没有缓存响应的内容,或者是缓存已经到期,就会回源站去获取
Q&A
现在宽带这么发达,为何还需要 CDN? 主要有两方面的原因,第一个是带宽,第二个是延迟
- 减少延迟
- 提高网站的可靠性和可用性
- 分散流量,减轻源服务器压力
- 安全性增强