(1)CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心服务器平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。是一款高性能且开源的反向代理服务器和HTTP加速器,可以有效降低web服务器的负载,提升访问速度。
(2)CDN=Content Delivery Network,即 内容 分发 网络
内容
指储存在CDN节点上的被分发和访问的动静态数据内容,比如JS、CSS、图片和静态页面等静态资源!
注:(客户端获取资源途径)
用户一般从主站获取动态内容后,再从CDN节点下载相应的静态数据分发
就是如何让上面提到的数据内容(资源),快速的部署在这个网络中,从而快速为用户服务。目的:通过调度让用户访问最近的资源!
网络
1)是部署于全球(国)的一大堆服务器—>集群
2)这些服务器基于当前互联网的基础架构在其上层再构成一个网络,这个网络专为资源分发而生
(1)CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求
(2)内容分发网络(CDN)是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件,而内容管理和全局的网络流量管理是CDN的核心所在。通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。
总的来说,内容服务基于缓存服务器,也称作代理缓存,它位于网络的边缘,距用户仅有"一跳"之遥。同时,代理缓存是内容提供商源服务器(通常位于CDN服务提供商的数据中心)的一个透明镜像。这样的架构使得CDN服务提供商能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍请求响应时间有任何延迟的
(3)通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。 其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
源站
源站指发布内容的原始站点。添加、删除和更改网站的文件,都是在源站上进行的;另外缓存服务器所抓取的对象也全部来自于源站。
缓存服务器
缓存服务器是直接提供给用户访问的站点资源,有一台或数台服务器组成;当用户发起访问时,他的访问请求被智能DNS定位到离他较近的缓存服务器。如果用户所请求的内容刚好在缓存里面,则直接把内容返还给用户;如果访问所需的内容没有被缓存,则缓存服务器向邻近的缓存服务器或直接向源站抓取内容,然后再返还给用户。
智能DNS
智能DNS是整个CDN技术的核心,它主要根据用户的来源,将其访问请求指向离用户比较近的缓存服务器,如把广州电信的用户请求指向到广州电信IDC机房中的缓存服务器。通过智能DNS解析,让用户访问同服务商下的服务器,消除国内南北网络互相访问慢的问题,达到加速作用。智能DNS的出现,颠覆了传统的一个域名对应一个镜像的做法,让用户更加便捷的去访问网站。
客户端
客户端或称用户端即发起访问的普通用户,一般的访问方式是浏览器。这里就不再做详细说明。
(1)节省骨干网带宽,减少带宽需求量; (2)提供服务器端加速,解决由于用户访问量大造成的服务器过载问题; (3)服务商能使用Web
Cache技术在本地缓存用户访问过的Web页面和对象,实现相同对象的访问无须占用主干的出口带宽,并提高用户访问因特网页面的相应时间的需求;
(4)能克服网站分布不均的问题,并且能降低网站自身建设和维护成本; (5)降低“通信风暴”的影响,提高网络访问的稳定性。
学习指南
Varnish是一个反向HTTP代理,有时称为HTTP加速器或web加速器。(官网解释)
(1)Varnish将文件或文件片段存储在内存中,使它们能够快速被提供。
(2)Varnish本质上是一个键/值存储,它通常使用URL作为键。
(3)Varnish是为现代硬件、现代操作系统和现代工作负载而设计的。
Varnish的所有配置都是通过VCL(varnish configure language)来配置的。它是一种基于“域”(domain specific)的简单编程语言,它支持有限的算术运算和逻辑运算操作、允许使用正则表达式进行字符串匹配、允许用户使用set自定义变量、支持if判断语句,也有内置的函数和变量等。使用VCL编写的缓存策略通常保存至.vcl文件中,其需要编译成二进制的格式后才能由varnish调用。事实上,整个缓存策略就是由几个特定的子例程如vcl_recv、vcl_fetch等组成,它们分别在不同的位置(或时间)执行,如果没有事先为某个位置自定义子例程,varnish将会执行默认定义的代码,这些代码就是default.vcl中被注释的代码。
VCL策略在启用前,会由management进程将其转换为C代码,而后再由gcc编译器将C代码编译成二进制程序。编译完成后,management负责将其连接至varnish实例,即child进程。正是由于编译工作在child进程之外完成,它避免了装载错误格式VCL的风险。因此,varnish修改配置的开销非常小,其可以同时保有几份尚在引用的旧版本配置,也能够让新的配置即刻生效。编译后的旧版本配置通常在varnish重启时才会被丢弃,如果需要手动清理,则可以使用varnishadm的vcl.discard命令完成。
Varnish与Squid的对比:
Squid是一个高性能的代理缓存服务器,它和varnish之间有诸多的异同点,这里分析如下:
下面是他们之间的相同点:
(1)都是一个反向代理服务器,
(2)都是开源软件,
下面是它们的不同点,也是Varnish的优点:
(1)Varnish的稳定性很高,两者在完成相同负荷的工作时,Squid服务器发生故障的几率要高于Varnish,因为使用Squid要经常重启。
(2)Varnish访问速度更快,Varnish采用了“Visual Page Cache”技术,所有缓存数据都直接从内存读取,而squid是从硬盘读取,因而Varnish在访问速度方面会更快。
(3)Varnish可以支持更多的并发连接,因为Varnish的TCP连接释放要比Squid快。因而在高并发连接情况下可以支持更多TCP连接。
(4)Varnish可以通过管理端口,使用正则表达式批量的清除部分缓存,而Squid是做不到的。
当然,与传统的Squid相比,Varnish也是有缺点的,列举如下:
(a)varnish在高并发状态下CPU、IO、内存等资源开销都高于Squid。
(b)varnish进程一旦Hang、Crash或者重启,缓存数据都会从内存中完全释放,此时所有请求都会发送到后端服务器,在高并发情况下,会给后端服务器造成很大压力。