CDN 基本概念
CDN 是Content Delivery Network的缩写,翻译为内容分发网络,主要场景是静态资源的下发,他可以解决以下几个问题:
- 高延时,距离服务器较远的用户访问资源延时较高。比如你的服务器在中国,如果美国用户访问就会有较高的网路延迟。
- 带宽瓶颈,大量用户访问静态资源(图片,视频,css等)导致的服务器带宽拥塞。比如你的服务器上存了一个视频,然后同时有几十个用户来看,对于一般网络配置的服务器都是受不了的。
从这张图可以看到CDN的一个工作流程。
左侧方框里面是域名解析流程,通常CDN资源的域名都是CNAME记录指向一个CDN服务的域名,也就相当于把最终IP的解析权交给了CDN服务。CDN服务会根据你的IP定位,返回一个与你邻近的CDN节点IP。从右边方框可以看到DNS返回了北京节点的IP给北京的用户。用户无须访问可能更长路由的源站,这样就解决了上面提出的第一个延迟高的问题。
右侧方框是内容下发流程,得到上面的IP之后用户会去对应CDN节点获取资源,如果当前节点(边缘服务器)存在这个资源则直接返回。如果不存在或已经过期CDN节点会先向源站(也就是你的资源存储的地方)下载这份资源再返回,这个向源站请求资源的过程被称作回源请求。自此这个边缘节点就缓存了这份资源,在有效期内如果有其他北京用户来访问则直接由边缘节点响应而无须回源。这样就解决了上面提出的第二个源站带宽瓶颈的问题。
其实我们可以把CDN简单理解为分布式缓存。CDN服务商会把CDN节点分布在各个区域,并通过DNS技术让你请求到邻近的CDN节点。
全站加速 DCDN or ECDN?
为什么有个问号呢,因为这个英文名称比较不一致,在阿里云叫DCDN,Dynamic Route for Content Delivery Network也就是动态路由+CDN,腾讯云叫ECDN也就是企业级CDN。不过ECDN这个词在其他一些云服务商那里又有另一种定义,咱们在后文说明。
全站加速解决的问题可以参考《利用CDN代理规避网络线路问题》。
普通CDN通常用来缓存静态资源,动态请求虽然不会占用很大带宽,但是同样会面临高延时和不稳定的问题。当我们用公共网络路由去访问源站的时候,很可能比较遥远且崎岖。全站加速就是解决这个问题,动静态全部都发到这里来,因为CDN节点的分布式特点,我们可以把请求转发到就近的CDN节点,再由CDN内部转发到源站就近的CDN节点,由于CDN节点之间通信有服务商专门维护,因此可用性要比公共网络好很多。他的工作原理如下图所示。
上图中☁️的部分就是全站加速。
使用全站加速最重要的是要分好动态请求和静态请求,否则动态结果被错误缓存,静态结果缓存不到都会影响整站的性能。
SCDN
S是Secure,也就是具有安全防护功能的CDN,SCDN的架构与全站加速基本一致,区别就是在CDN节点不仅具有加速功能,还配有防火墙,所有请求都是发到CDN节点,这样的好处第一隐藏了源站服务器IP,让攻击者不能直接攻击源站,第二因为CDN节点配有防火墙,可以抵御大部分DDOS和CC攻击。在cloudflare那里,不仅配置了DDOS高防,还可以配置WAF功能。
其实依我来看,这些ECDN,SCDN都是国内云厂商搞出来的花样套餐。在cloudflare那里,都属于CDN的标配功能了,cloudflare没有国内节点,因此不适合在国内商用。国内貌似何至今都没有做到这种水平的。
ECDN
ECDN比CDN多个Enterprise,也就是企业CDN。主要解决的一个问题如下图所示。
我们设想一个场景,一家大型企业内部号召大家打开直播观看CEO讲话,这时大家同时去请求一个公司外网的资源(尤其是视频),很容易导致公司主线带宽紧张。下面这个方案就可以解决这个问题。
这张图上,右侧方框表示公司内网,公司内部架多了一层ECDN节点,由该节点去上层CDN或源站获取资源,再由公司内网的ECDN节点分发到公司内部的各个终端上,通常内网带宽都会高很多,所以压力不大。
ECDN其实还是普通CDN技术,只是用节点分布的思想解决一部分网络瓶颈问题。
PCDN
阿里云底下还有一个PCDN,P就是P2P,概念就是P2P+CDN,利用P2P下载来提升CDN性能。P2P下载的道理很简单,当我们下载好资源之后我们也可以作为一个下载节点供其他用户下载,用过BT下载的同学应该都能懂。把这个思路用在CDN上,也就是把所有的电脑都团结起来,强大的CDN就一定会实现,这种方案同时可以解决上面ECDN的问题,只是在P2P场景下,ECDN节点变成了企业内部每一个下载了该资源的终端。
阿里云PCDN完整架构如下图