本文共 3382 字,大约阅读时间需要 11 分钟。
作者:田逸()
Cdn
的基本原理可概括为:内容缓存、就近访问以及以dns
视图方式根据用户来源确定其访问位置。 ◆ 内容缓存:缓存服务器从源站取得所需数据,然后暂存在本地的硬盘或内存。使用这种缓存机制的好处是:(1
)内容自动更新;(2
)无多个服务器数据相互同步问题。 ◆ 就近访问:让用户的访问请求转向到离用户最近或最易于访问的缓存服务器。 ◆ 以dns
视图方式根据用户来源确定其访问位置:即让电信的用户访问电信的缓存服务器,网通用户访问网通的缓存服务器。 简单cdn
这个概念,是相对于复杂cdn
来定义的。因此,我们先来了解一下什么是复杂的cdn
。 笼统一点的讲,cdn
服务提供商所运营的环境,就是复杂cdn
。就缓存服务器而言,其结构是分层次的,一般可划分成核心节点和边缘节点。并且同一层级的相邻节点之间又可形成姐妹关系,亦即在同一个集群下的节点互为姐妹关系。为了保证最高的性能能和效率,不建议跨网或跨物理范围的节点形成姐妹关系。为了更直观的理解这个结构和由此产生的好处,我在这里以一个最长访问路径的图示来说明: 1、
用户向某边缘服务器(边缘A
)发起访问请求,所需内容没有被缓存。 2、
边缘服务器(边缘A
)于是询问其邻居,是否缓存了用户所需的请求对象,邻居节点也没有缓存所需的对象。 3、
边缘服务器(边缘A
)转而向某个父节点(核心A
)请求文件,如果该父节点仍然无所需的文件,则该父节点询问其邻居;如果邻居也没有所需的文件,则把请求转给源站。 4、
源站返回数据给核心节点(核心A
),并缓存数据在该节点。 5、
核心节点(核心A
)返还数据给边缘节点(边缘A
),并缓存数据在该节点。 6、
边缘节点返还数据给用户,一次最长路径的访问完成。 这种分层次的机制,既能保证最高的可用性,又能最大限度的减少向上一级节点的网络流量。 除了缓存服务器结构上的差异外,复杂cdn
还具备以下一些特性: (2)
复杂的日志处理系统。因为计费依赖于访问日志。 (3)
详细的视图划分。例如精确到每个省的ip
地址段。 当我们了解清楚复杂cdn
以后,再来了解简单cdn
就容易多了。所谓简单cdn
,就是节点层次简单、服务器数量有限、能实现有限规模站点加速和发布的平台。通常情况下,我们不必为实现cdn
带来的好处而部署复杂的cdn
系统,这将花费巨大的人力物力。把复杂的cdn
简化,使之符合我们的业务需求,是本章“简单cdn
”撰写的用意所在。 先申明一下,
本文所设计的简单cdn
只是一个样例,并非适用于所有的场景。读者可根据我的思路,设计出更适合自己应用环境的简单cdn
。 (1)
选点合理,能覆盖大部分网络用户。最起码得在电信和网通机房放置缓存服务器,如果经费充裕,把教育网也考虑进来。 (2)
系统本身具备很好的高可用特性。用户的访问主要集中在缓存服务器,缓存服务器之间使用集群技术就能得到比较高的系统可用性。 (3)
核算自建简单cdn
的成本,使之有较好的性价比。如果自建一个cdn
远比购买cdn
服务商所花费的资金还高(目前国内商用cdn
每兆带宽为50
元/
月,基数是1G
),基本上没必要自己建立cdn
了。 (4)
系统应该具备很好的伸缩能力,以适应各种业务变化。如增加布点、增加设备、增加站点等等。 欲对三个web
服务进行加速,为了描述方便,使用域名来进行说明。这三个加速站点为图片站点 images.sery.cn
、下载站点dl.sery.cn
、主站 ,3
个站点全部是静态内容,其页面文件主要是.html(htm)
、.exe
、css
、jpeg
、js
等,非常适合被缓存。 服务的主要目标用户包括电信线路的用户、网通线路的用户、教育网的用户,其他线路的用户(如科技网、长城宽带等)访问请求被转向到网通线路的缓存服务器。为了实现这个目标,我们可能需要放置4
组服务器来做缓存,即电信一组,网通2
组,教育网一组。 需求明确之后,接下来的设计工作包括:布点选择、工具选取、cdn
结构设计等几部分。 (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
的角色来设计整个结构,
这些角色包括:源站、智能dns
及缓存服务器3
大部分,根据布点选择和其他因素综合考虑,我们可绘出整个cdn
的布局结构图。 从图中可以看出有2
组缓存服务器放置在网通机房,这两组服务器不在同一个物理位置,这样做主要目的是:bind
规划视图view
时,能收集到的地址比较有限,不在收集列表的其他ip
地址段,则统统转发给网通B
机房的服务器;另外网通B
机房的带宽比较便宜,机器数量也比较多,跟其他网段的互联互通还可以。 源站为内容的原始发布,尽管采用cdn
技术以后源站的负荷会变得很小,但为了有较高的可用性,可把它部署成负载均衡集群。 智能dns
是用来实现用户访问转向功能,即通过建立访问列表,判断用户的访问来源,确定其访问对象的位置。在本案中,我建立电信、网通、教育网三个ip
地址列表,未在这三个列表的称为其他;每个列表关联一个bind
的视图view
,那么一共就有4
个视图view
。地址列表可以自己收集,也可以花钱购买,地址列表越大,dns
定向准确性越高。在这里强调一下:ip
地址列表为客户dns
服务器所在网段的列表,而不是用户接入网络的ip
段。客户端计算机所设定的dns
,通常称为用户本地dns
。同样,为了使其有较高的可用性,dns
采用主从同步的架构。 本文转自sery51CTO博客,原文链接:http://blog.51cto.com/sery/259635 ,如需转载请自行联系原作者