简介
CDN主要功能是在不同的地点缓存内容,通过负载均衡技术,将用户的请求定向到最合适的缓存服务器上去获取内容。
一个大号的缓存/代理
CDN是什么?使用CDN有什么优势? - Xigang的回答 - 知乎 要点
- 通过 cname,打断正常的域名到自身服务器ip 的过程。实际走的是 用户==> cdn ==> 业务服务器。 cdn 起到了外置的 缓存层 作用。
- cdn 本身 用到了 负载均衡技术
传统的网络访问形式:用户提交域名 ==> 浏览器对域名进行解释 ==> 得到目的主机ip ==> 根据ip 地址发出请求 ==> 得到请求数据并回显。
什么是 CDN使用CDN后的http请求处理流程如下图:
打个比方,你去买东西,平台商(比如京东、天猫、当当)可以选择直接从厂家(源站)发货,也可以在就近城市的仓库(边缘节点,Edge)发货。通常情况下,后者的发货速度明显要快于前者。
CNAME( Canonical Name record)
A记录, 字面意思就是Address 记录,就是将一个域名或主机名解析为ip 地址。
CNAME 即指别名记录,也被称为规范名字。这种记录允你将多个名字映射到同一台计算机。当需要将域名指向另一个域名,再由另一个域名提供 ip地址,就需要添加 CNAME 记录。
CNAME record there is a DNS zone as follows:
NAME TYPE VALUE
--------------------------------------------------
bar.example.com. CNAME foo.example.com.
foo.example.com. A 192.0.2.23
- 一般 申请一个 域名(比如
abc.com
)要找域名托管服务商(国内有阿里云解析(跟阿里cdn 不是一回事)、腾讯云解析) - 把
pic.abc.com
和 图片服务器的公网ip 告诉 域名托管服务商。于是,用户可以通过 abc.com 访问 你的图片服务 - 从cdn 服务商那里得到
pic.abc.com
的 cnamepic.xxcdn.com
,然后 找域名托管服务商,将pic.xxcdn.com
作为cname 添加到pic.abc.com
解析中 -
验证cdn 服务是否生效:任意主机执行
ping pic.abc.com
实际ping 的是pic.xxcdn.com
。图例中,kunlun 是阿里cdn的域名。 -
用户请求 pic.abc.com ==> pic.xxcdn.com ==> cdn scheduler ip ==> cdn server ip ==> 若无数据,则访问实际 公网 ip 拿到数据,然后cdn server 再返回数据。
- 有时, 直接将 pic.xxcdn.com 提供给用户使用
宏观认识
cdn 这块,有很多名词、概念,先梳理一个宏观体系,将这些名词归位,以便于理解它们的作用。
为了提高cdn 的效率,通常有以下优化手段
- Cache优化(Cache Optimization, 简称CO), 优化缓存算法等
- 前端优化(Front-End Optimization,FEO),CDN厂商会对源站的内容进行删减、压缩后再进行缓存。比如Minify HTML/CSS/JavaScript,对图片进行无损甚至有损压缩,Resize等
- 网络优化(Network Optimization,NO),主要手段有:HTTP长连接,连接复用,DNS查询优化,路由优化等
- WEB内容优化(Web Content Optimization,WCO),也有叫Software Defined Application Delivery (SDAD) 的。WCO优化就是对页面内容进行重新改写和编排(比如动静内容隔离、依赖资源重排序、异步化JavaScript执行),从而降低页面加载和渲染时间。比如ESI 等技术。
前三种方式是传统CDN厂商都在做的
加速
cdn 有一个划代的方式
- 第一代,对动态和静态网页加速
- 第二代,对视频等流媒体加速
- 第三代,基于社区
主流CDN服务分为:WSA全站加速,动态页面加速产品,静态页面加速产品,下载加速产品,流媒体加速产品(直播、点播),移动(无线)加速产品,防攻击类产品,云加速产品(当前概念炒比较火)
以我目前比较粗浅的认识,各种加速,是上述四种优化手段的组合。同时,根据每个服务的特点(静态内容占比,登陆系统等),不同加速服务的优化效果不同。 此外,各个CDN 厂商 对CDN 的整体目标是一致的,但在具体的理念上 仍有差异。
全站加速
“全站加速”服务,在本质上是在您的网站和访问用户之间,增加一个运行快速但是功能强大的“代理”。代理拿到 源站响应(本质是http 数据),智能识别出可优化的空间及方法,改写页面代码,并自动应用代码级别的Web优化技术,例如JavaSript和CSS代码的混淆合并压缩、小图片内联、将大尺寸图片托管CDN、压缩文件大小等,然后将响应转发给用户。
也就是,代理对通过它的响应数据 动了手脚。 从表述上看,主要是FEO 和 WCO。
也有的CDN 不更改用户内容,内容优化在 源站完成。
动态加速
主要包括 WCO、NO、FEO 等手段
还有另一种说法,CDN针对动态内容的加速被分为针对Web网络三层内容的一次加速
- CDN对表示层的加速。对静态内容的合理cache和分发。
- CDN在业务逻辑层的加速。逻辑层是Web系统的核心,负责处理所有业务逻辑并生成动态内容,所以逻辑层的加速就不存在可以大量缓存的结果数据,而是运算过程。所以CDN的加速也转变成为边缘计算,应用系统及其数据将被复制到许多更靠近用户的分发服务器中。
-
CDN在数据访问层的加速,有两种方法
- 整体缓存,就是讲数据库整体的复制到多台或全部的边缘服务器上,这样在边缘服务节点上就有了完整的不依赖中心节点的独立的内容。但是这样的方式带来的问题就是如何保持各节点之间的数据一致性。
- 部分缓存