<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />
作者:田逸(sery@163.com)
7.1.4
cdn
的基本原理
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Cdn的基本原理可概括为:内容缓存、就近访问以及以dns视图方式根据用户来源确定其访问位置。
◆
内容缓存:缓存服务器从源站取得所需数据,然后暂存在本地的硬盘或内存。使用这种缓存机制的好处是:(1)内容自动更新;(2)无多个服务器数据相互同步问题。
◆
就近访问:让用户的访问请求转向到离用户最近或最易于访问的缓存服务器。
◆
以dns视图方式根据用户来源确定其访问位置:即让电信的用户访问电信的缓存服务器,网通用户访问网通的缓存服务器。
7.1.5
什么是简单
cdn
简单cdn这个概念,是相对于复杂cdn来定义的。因此,我们先来了解一下什么是复杂的cdn。
笼统一点的讲,cdn服务提供商所运营的环境,就是复杂cdn。就缓存服务器而言,其结构是分层次的,一般可划分成核心节点和边缘节点。并且同一层级的相邻节点之间又可形成姐妹关系,亦即在同一个集群下的节点互为姐妹关系。为了保证最高的性能能和效率,不建议跨网或跨物理范围的节点形成姐妹关系。为了更直观的理解这个结构和由此产生的好处,我在这里以一个最长访问路径的图示来说明:
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
![](https://i-blog.csdnimg.cn/blog_migrate/fd470a5023a228f0838aaa3ec13a2fc3.png)
图
7-2
缓存服务器相互关系
1、
用户向某边缘服务器(边缘A)发起访问请求,所需内容没有被缓存。
2、
边缘服务器(边缘A)于是询问其邻居,是否缓存了用户所需的请求对象,邻居节点也没有缓存所需的对象。
3、
边缘服务器(边缘A)转而向某个父节点(核心A)请求文件,如果该父节点仍然无所需的文件,则该父节点询问其邻居;如果邻居也没有所需的文件,则把请求转给源站。
4、
源站返回数据给核心节点(核心A),并缓存数据在该节点。
5、
核心节点(核心A)返还数据给边缘节点(边缘A),并缓存数据在该节点。
6、
边缘节点返还数据给用户,一次最长路径的访问完成。
这种分层次的机制,既能保证最高的可用性,又能最大限度的减少向上一级节点的网络流量。
除了缓存服务器结构上的差异外,复杂cdn还具备以下一些特性:
(1)
缓存服务器布点范围广,服务器数量庞大。
(2)
复杂的日志处理系统。因为计费依赖于访问日志。
(3)
详细的视图划分。例如精确到每个省的ip地址段。
(4)
预加载机制。
当我们了解清楚复杂cdn以后,再来了解简单cdn就容易多了。所谓简单cdn,就是节点层次简单、服务器数量有限、能实现有限规模站点加速和发布的平台。通常情况下,我们不必为实现cdn带来的好处而部署复杂的cdn系统,这将花费巨大的人力物力。把复杂的cdn简化,使之符合我们的业务需求,是本章“简单cdn”撰写的用意所在。
7.2
简单
cdn
设计
先申明一下,本文所设计的简单cdn只是一个样例,并非适用于所有的场景。读者可根据我的思路,设计出更适合自己应用环境的简单cdn。
7.2.1
简单
cdn
设计的基本原则
简单cdn设计主要考虑以下几点:
(1)
选点合理,能覆盖大部分网络用户。最起码得在电信和网通机房放置缓存服务器,如果经费充裕,把教育网也考虑进来。
(2)
系统本身具备很好的高可用特性。用户的访问主要集中在缓存服务器,缓存服务器之间使用集群技术就能得到比较高的系统可用性。
(3)
核算自建简单cdn的成本,使之有较好的性价比。如果自建一个cdn远比购买cdn服务商所花费的资金还高(目前国内商用cdn每兆带宽为50元/月,基数是1G),基本上没必要自己建立cdn了。
(4)
系统应该具备很好的伸缩能力,以适应各种业务变化。如增加布点、增加设备、增加站点等等。
7.2.2
需求描述
欲对三个web服务进行加速,为了描述方便,使用域名来进行说明。这三个加速站点为图片站点 images.sery.cn、下载站点dl.sery.cn、主站 www.sery.cn,3个站点全部是静态内容,其页面文件主要是.html(htm)、.exe、css、jpeg、js等,非常适合被缓存。
服务的主要目标用户包括电信线路的用户、网通线路的用户、教育网的用户,其他线路的用户(如科技网、长城宽带等)访问请求被转向到网通线路的缓存服务器。为了实现这个目标,我们可能需要放置4组服务器来做缓存,即电信一组,网通2组,教育网一组。
7.2.3
简单
cdn
设计
需求明确之后,接下来的设计工作包括:布点选择、工具选取、cdn结构设计等几部分。
◆
布点选取
布点包括源站、全局智能dns、缓存服务器集群。
(1)
源站及全局智能dns选择互联互通性较好的第三方bgp机房;因为使用cdn服务的站点数量有限,故在缓存服务器以主机名的方式寻址源站。
(2)
缓存服务器共4组,选择二线或三线城市的机房托管,能节省大量的资金—北京、上海等城市带宽价格大概在300~400元/兆/月,而偏远一点二三线城市(如安阳)1G带宽的年总费用才8-10万。
◆
工具选取
工具包括操作系统、dns软件、缓存服务器软件、负载均衡软件、源站软件以及定制的脚本。
(1)
所有的服务器均使用32位的centos 5.x。曾经使用过64位的系统,但在执行缓存服务器的缓存清理操作时,有些小问题。
(2)
Dns使用bind-9.4.0。低于9的版本,可能不支持视图view,没有视图功能,智能dns就无法实现。不知道其他的dns软件有没有支持视图view的,愿知者告知。
(3)
缓存服务器有两种选择,一种是squid,另一种是varnish。Squid多用在复杂cdn场景,它能实现缓存服务器间的层级关系(邻居形成姊妹、边缘节点与核心节点形成父子关系),功能强大而配置复杂;Varnish为后起之秀,配置简单而性能卓越,维护起来比较简单,因此本案选择varnish作为缓存工具【注1】。
(4)
负载均衡由ipvsadm和keepalived两部分组成。ipvsadm是核心,负责包转发和负载分摊;keepalived为框架,负责故障隔离和失败切换failover。
(5)
可做web服务的软件比较多,因为站点为简单的静态文件,选择nginx比较省事。
(6)
定制脚本主要目的是自动刷新缓存服务,把这个脚本放在摸个服务器上,只需执行一次(也可使用crontab自动调用)就能实现所有缓存服务器的缓存清理。
◆
cdn结构设计
我们可根据cdn的角色来设计整个结构,这些角色包括:源站、智能dns及缓存服务器3大部分,根据布点选择和其他因素综合考虑,我们可绘出整个cdn的布局结构图。
![](https://i-blog.csdnimg.cn/blog_migrate/e6d4aefd5d78c6c36781d39785befab0.png)
图
7-3 cdn
服务器布局
从图中可以看出有2组缓存服务器放置在网通机房,这两组服务器不在同一个物理位置,这样做主要目的是:bind规划视图view时,能收集到的地址比较有限,不在收集列表的其他ip地址段,则统统转发给网通B机房的服务器;另外网通B机房的带宽比较便宜,机器数量也比较多,跟其他网段的互联互通还可以。
(1)
源站
源站为内容的原始发布,尽管采用cdn技术以后源站的负荷会变得很小,但为了有较高的可用性,可把它部署成负载均衡集群。
(2)智能dns
智能dns是用来实现用户访问转向功能,即通过建立访问列表,判断用户的访问来源,确定其访问对象的位置。在本案中,我建立电信、网通、教育网三个ip地址列表,未在这三个列表的称为其他;每个列表关联一个bind的视图view,那么一共就有4个视图view。地址列表可以自己收集,也可以花钱购买,地址列表越大,dns定向准确性越高。在这里强调一下:ip地址列表为客户dns服务器所在网段的列表,而不是用户接入网络的ip段。客户端计算机所设定的dns,通常称为用户本地dns。同样,为了使其有较高的可用性,dns采用主从同步的架构。
以下内容省略.
简单Cdn实现
简单cdn功能测试
简单Cdn监控
简单cdn维护
其他