CDN-内容分发网络
通过在现有的网络中增加一层cache层,将网站的内容发布到最接近用户的cache节点,使用户就近取得所需
当用户向某一业务内容发起请求时,请求会被调度至最接近用户的服务节点,由服务节点快速响应用户,有效降低用户范围延迟,提高可用性。
解决了---
-用户与业务服务器之间物理距离过远,需要进行多次网络转发,传输延时较高且不稳定
-运营商不同导致需要请求运营商之间进行互联转发
-业务服务器网络带宽、处理能力有限,当大量用户请求时,会导致响应速度降低
CDN 调度原理
将源站的资源缓存到位于各地的CDN节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都回源站获取,避免网络拥塞、缓解源站压力,保证用户访问资源的速度和体验。
在没有应用CDN时,我们使用域名访问某一个站点时:
用户提交域名-浏览器对域名进行解释-DNS 解析得到目的主机的IP地址-根据IP地址访问发出请求-得到请求数据并返回
应用CDN后,DNS 返回的不是IP 地址,而是一个CNAME记录,指向CDN的全局负载均衡
CNAME在域名解析的过程中承担了中间人的角色,这是CDN实现的关键
负载均衡系统
由于没有返回IP地址,于是local DNS会向负载均衡系统再发送请求 ,则进入到CDN的全局负载均衡系统进行智能调度----
-看用户的 IP 地址地理位置,找相对最近的边缘节点
-看用户所在的运营商网络,找相同网络的边缘节点
-检查边缘节点的负载情况,找负载较轻的节点
-其他,比如节点的“健康状况”、服务能力、带宽、响应时间等
结合上面的因素,得到最合适的边缘节点,然后把这个节点返回给用户,用户就能够就近访问CDN的缓存代理
智能DNS调度
基于DNS协议,调度系统根据local DNS的IP归属地进行流量调度,返回最接近的local DNS的cache节点ip(建立tcp/ip连接) DNS系统是分布式结构,localDNS本身有cache;但它的地址判断力较粗,另外用户有可能会设置错误的local DNS,运营商的local DNS本身存在的解析转发,local DNS本身出口有NAT导致localDNS的IP地址和NET出去的IP地址不在同一网段内
IP 302调度
基于http协议,用户先访问到调度系统,调度系统通过客户端IP归属地进行调度,组装相应头location的url。通过状态码为302的方式响应给客户端,然后客户端根据新的url发起连接。大文件一般使用302调度实现灵活的流量控制,但需要客户端进行额外的重定向操作,可能会增加延迟和复杂度,请求有重定向次数限制,调度系统IP会暴露给客户端,容易遭到攻击
httpdns调度
同样基于http协议,客户端访问http dns接口到调度系统,通过调度系统获取客户端的IP归属地得到缓存节点的IP。以状态码200的方式响应给客户端,然后客户端再向cache发起请求调度系统通过客户端IP获取缓存节点的IP,减少了额外的重定向步骤,更高效,但需要改造客户端,增加了开发和维护成本
CDN访问过程
用户访问域名-操作系统向local DNS查询域名的IP地址-local DNS向ROOT DNS查询域名的授权服服务器-ROOT DNS将dns授权记录回应给local DNS-local DNS得到后向域名授权dns查询域名的IP地址-域名授权dns查询域名记录(CNAME)-回应给local DNS-local DNS得到记录后-
-向CDN智能DNS查询域名的IP,根据算法和策略将最适合的CDN节点IP回应给local DNS-local DNS将得到的域名IP地址回应给用户端,用户端访问站点服务器-CDN节点服务器响应请求,将内容返回给客户端(缓存服务器在本地进行保存,把获取的数据返回给用户)-至此完成数据服务过程
四大关键技术
内容路由
通过CDN负载均衡系统来实现,将用户的请求导向整个CDN网络中的最佳节点
内容分发
将内容从源站发送到CDN边缘的cache的过程-PUSH分发-PULL回源
内容存储
-内容源存储,内容吞吐量较大,通常采用海量存储架构
-内容在cache节点存储,主要考虑两个方面:在功能上-对各种内容格式的支持、对部分缓存的支持;在性能上-包括支持的容量、多文件的吞吐率、可靠性、稳定性
内容管理
内容管理在广义上涵盖了从内容的发布、注入分发、调整、传递等一系列过程。重点强调内容进入Cache点后的内容管理,称为本地内容管理。
本地内容管理主要针对一个CDN节点(由多个CDN Cache设备和一个SLB设备构成)进行。本地内容管理的主要目标是提高内容服务的效率,提高本地节点的存储利用率。通过本地内容管理,可以在CDN节点实现基于内容感知的调度,可以避免将用户重定向到没有该内容的Cache设备上,从而提高负载均衡的效率。通过本地内容管理还可以有效地实现在CDN节点内容的存储共享,提高存储空间的利用率。在实现上,本地内容管理主要包括---
-本地内容索引。本地内容管理首先依赖于对本地内容的了解。包括每个Cache设备上内容的名称、URL、更新时间、内容信息等。本地内容索引是实现基于内容感知的调度的关键。
-本地内容拷贝。通常,为了提高存储效率,同一个内容在一个CDN节点中仅存储一份,即仅存储在某个特定的Cache上。但是一旦对该内容的访问超过该Cache的服务提供能力,就需要在本地(而不是通过PUSL的方式)实现内容的分发。这样可以大大提高效率。
-本地内容访问状态信息收集。搜集各个Cache设备上各个内容访问的统计信息,Cache设备的可用服务提供能力及内容变化的情况。
A记录
主要用于将域名解析为IPv4地址,直接指向IP地址,可以将一个域名对应一个特定的IPv4地址
CNAME记录
创建一个域名的别名,将一个域名解析为另一个域名。不需要指定IP地址,而是将该域名指向另一个域名。常用于实现域名的重定向、负载均衡和简化DNS管理。当目标域名的IP地址发生变化时,只需要更新CNAME记录的指向即可,无需修改所有引用该域名的地方。在根域名上不能直接创建CNAME记录,只能在子域名上创建
CDN的系统组成
源服务器
源服务器是存储网站内容的主要服务器。它存放着原始的网页、图像、视频和其他静态或动态文件。当内容发生更改时,源服务器会产生新的版本,并将其传递给 CDN。
边缘服务器
边缘服务器是部署在全球各个地点的服务器节点,它们构成了 CDN 的基础架构。每个边缘服务器都存有一部分或全部的缓存内容,包括从源服务器获取到的静态文件副本。边缘服务器负责提供内容的分发和加速,向用户提供最接近的服务器节点。
负载均衡器
负载均衡器用于在多个边缘服务器之间均匀分配用户请求的流量。它根据不同算法将请求导向最优的边缘服务器,以实现负载均衡和高可用性。缓存机制CDN 使用缓存机制来存储源服务器上的内容副本。当用户请求访问文件时,边缘服务器会尝试返回缓存中的副本,而不必每次都访问源服务器。这减少了对源服务器的负载,提高了响应速度和用户体验。
DNS
DNS 解析用户请求的域名并将其映射到最近的边缘服务器。CDN 使用智能 DNS 解析技术,根据用户位置和网络条件来选择最优的边缘服务器。这确保用户能够通过最快的路径获取内容。
内容管理系统
内容管理系统用于管理和发布网站的内容。它可以与 CDN 集成,使更新的内容能够传递到 CDN,并在边缘服务器上进行缓存。
设备
lvs设备
lvs是Linux虚拟服务器,工作在网络层,基于IP地址的虚拟化应用;通过lvs达到的负载均衡技术和Linux操作系统实现一个高性能高可用的Linux服务器集群,以低廉的成本实现最优的性能,lvs是一个实现负载均衡集群的开源软件项目,lvs架构从逻辑上可分为调度层、server集群层和共享存储层。
cache设备
主要工作模式是--
-正向代理指代理用户访问互联网,客户端将发送到服务器的连接请求发送给代理服务器处理。利用正向代理,用户无需与站点建立连接,可从本地 Web 缓存获取所需信息,加快用户在访问互联网时的请求响应时间,减少网络重复请求
-反向代理模式为访问 Web 服务器提供加速功能,Web 缓存服务器被放置在应用服务器前面,将用户请求和应用服务器应答内容写入缓存服务器,实现用户访问的快速响应,CDN就是基于反向代理来实现的,CDN 会判断数据是否过期,直接返回数据或回源数据服务器。
缓存命中与缓存未命中
用户发起请求-dns解析-请求路由到CDN节点-CDN节点检查缓存-缓存命中?--
-是-返回缓存的资源给用户
-否-请求源服务器-响应请求-CDN节点缓存资源-返回资源给用户
缓存再验证
源服务器的内容有时候会变化,为保证缓存的副本和服务器资源的一致性,缓存必须时不时进行检查,这种”新鲜度检测“又被称为HTTP再验证。最常用If-Modified-Since首部加入GET请求,告诉服务器,只有在缓存了副本后又对其进行了修改的情况下,才发送此对象。
服务器收到GET IMS请求时:
源站服务器向 Cache 返回内容响应消息时,会附带一个验证信息,Cache 在缓存内容时保存这个验证信息。当有用户请求该内容时,如果 Cache 发现缓存内容过期,就是用验证信息生成一个 "有条件" 的请求来向源服务器请求验证。源服务器在收到这样的请求以后,将请求中包含的验证信息与自己本地的验证信息进行比较。
-再验证命中-内容无变化,服务器返回304 Not Modified响应。缓存再次将副本标识为暂时新鲜的,并将副本提供给客户端,需要与原始服务器进行核对,比单纯的缓存命中要慢
-再验证未命中-如果服务器对象已缓存副本不同,服务器向客户端发送一条普通的、带有完整内容的HTTP 200OK的响应,缓存同时更新
-删除-服务器响应404 Not Found,缓存也会将其副本删除
live设备
它具有实时重载功能,监视文件的更改,当发生这种情况时,它会通过网络套接字连接向浏览器发送一条消息,指示其重新加载。为了让客户端支持这一点,服务器会向每个请求的 html 文件注入一小段 JavaScript 代码。此脚本建立 Web 套接字连接并侦听重新加载请求。CSS 文件可以在不重新加载整页的情况下刷新,方法是从 DOM 中找到引用的样式表并欺骗浏览器再次获取和解析它们
relay设备
中继服务器集群,主要控制命令下发、日志回传等
业务类型:直播,点播,小文件
直播
CDN直播系统,包含直播流从源向各个cache节点快速流畅分发、接入源调度,播放调度,源端多直播协议与格式的支持,终端多直播协议与格式的支持,核心调度、推流鉴权,回源鉴权,直播录制转码等
完整型CDN直播系统主要包含如下几个部分-----
-流分发调度:负责直播流的分发路线选择。
-IP调度:负责通过IP匹配调度到最优的服务器。
-收流服务器:从源将直播流收取下来。
-中继服务器:核心多线服务器,用于跳板传输,以保障跨区域运营商的直播流流畅服务。
-边缘服务器:用于直接服务用户。
流程:
首先通过DNS域名解析或者IP精确匹配,找到一台优质的收流服务器--收流服务器进行源的接收--收流服务器向流分发调度请求一台优质的中继服务器,并将该直播流与中继的匹配关系记录到缓存记录中--收流服务器将直播流推送到中继服务器--用户发起播放请求,通过DNS域名解析或者IP精确匹配,找到一台优质的边缘服务器--用户向该边缘服务器发起播放请求--边缘服务器向流分发调度请求中继服务器地址,流分发调度通过查询缓存记录,找到该路流位于哪一台中继服务器--边缘服务器向中继服务器拉取直播流提供用户播放。
点播
CDN点播系统,包含点播文件的主动分发、被动分发、缺失文件回源补偿、冷门文件过期删除、视频文件转码转格式等
大中型点播系统由于服务终端量大,系统负载量大增,一般会增加一层资源服务器以缓存资源文件,防止热门文件或者新文件在大用户初次进入的时候产生大量回源而压垮源站
流程:
用户通过DNS或者IP精确调度得到优质的cache节点地址--用户向cache点播服务器请求视频文件--Cache点播服务器检查本地,如果有文件既直接提供服务,如果文件不存在,则回到上一级资源服务器获取文件提供服务并将文件缓存到本地--如果资源服务器本地不存在文件,则会回源到源站获取文件并缓存到本地
DNS调度部署结构
RDS
主要保存生成调度策略所需要的配置信息
zabbix
用于获取节点的总带宽信息,这些数据可以用于监控和评估节点的性能,以及在需要时调整带宽分配
中控
管理域名、调度组、节点、线路等信息的控制平台
KDNS
管理接入域名和调入域名的授权DNS;
InfluxDB
获取调度组、线路、节点维度的带宽信息
策略server
部署了计算各调度组、各线路节点配比关系的程序的服务器,它负责根据从rds和zabbix获取的数据,计算出最优的调度策略,并将其应用到中控上
内部DNS
用户域名对应的上层节点或源站授权的DNS,主要用来控制DNS节点回源调度
回源
当用户通过浏览器发送请求时,如果CDN节点未缓存请求的资源或缓存资源已到期,此时会回源站获取资源并返回给用户,该过程被称为回源
回源host
回源host决定回源请求访问到源站上的具体某个站点。
--源站是域名源站为www.a.com,回源host为www.b.com,那么实际回源是请求到www.a.com解析到的IP,对应的主机上的站点www.b.com
协议回源
指回源时使用的协议和客户端访问资源时的协议保持一致,即如果客户端使用 HTTPS 方式请求资源,当CDN节点上未缓存该资源时,节点会使用相同的 HTTPS 方式回源获取资源;同理如果客户端使用 HTTP 协议的请求,CDN节点回源时也使用HTTP协议。
客户域名
是客户接入CDN用于加速、终端用户实际访问的域名。当用户访问这个域名时,他们的请求将被路由到离他们最近的服务节点,这就是CDN的工作原理
CNAME域名
接入CDN时,在控制台添加完加速域名后,会得到一个CDN分配的CNAME域名。需要在DNS解析服务商添加CNAME记录,将加速域名指向这个CNAME域名,这样该域名所有的请求才会都转向CDN的节点,以达到加速效果
调度组(G)
一个DNS解析的集合,本质是一个域名;主要用来控制使用哪些节点来提供加速服务
线路(R)
地区+运营商
节点(N)
指与最终接入的用户之间具有较少中间环节的网络节点,对最终接入用户有相对于源站而言更好的响应能力和连接速度
节点属性: 规划,成本,95等
过载策略:IP权重调整->添加节点->删除
保底策略:IP权重调整->添加节点
流量节点使用:采用白天带宽低峰时关闭节点,晚高峰时打开来消减其他95节点计费带宽
95计费节点免费市场:晚高峰合理利用95计费节点每个月的免费时长来达到消峰目的,降低节点成本
合并计费节点规划调整:节点规划存在重叠或不必要的情况时,考虑合并节点以降低成本
调整策略定时回滚:如调整后效果不佳的策略改动,可以设定定时回滚机制,恢复到之前的状态
节点类型: 标准,小文件,Lunar
节点状态: 运行,暂停,挂起
冷备-备份点平时不启动,当主节点故障时,先恢复备份节点的数据,再启动备份组件
上联
上联带宽-节点最大使用的物理带宽
调度上联-规划chart/0.9,表示短期不会消峰节点。理论上不应该出现免费的时长消耗,除非有毛刺的影响为了预留节点而去调整调度上联
计费方式
95计费-系统每5分钟统计1个点,每日得到288个值,取其中的最大值作为计费带宽去掉数值最高的5%,剩下的最高的带宽就是95计费的值
包端口计费-按端口计费,不论端口跑多少带宽
流量计费-根据当月累积的流量数据乘以流量单价,再加上请求次数乘以请求单价来计算费用
峰值带宽计费-按照每日带宽计费,适用于域名流量曲线比较平稳,全天内带宽利用率大于30%的用户
- 免费节点、包端口计费节点最大规划
- 平均流量计费节点沿保底线规划
- 95计费节点充分考虑免费时长规划
- 不可调度的带宽,作为固定带宽规划
- 单价高低规划、单价低高规划