1、197第 7 章 简单 CDN198互联网运营7.1 CDN概述CDN 是 Content Delivery Network 首 字 母 缩 写 , 译 成 中 文 就 是 内 容 分 发 网 络 。 使 用CDN 技 术 的 主 要 目 的 在 于 增 加 访 问 速 度 、 解 决 南 北 互 联 ( 中 国 适 用 ) 、 提 高 用 户 体 验等 。最早的商业 CDN 服务可能诞生于 1999 年,但本人闻之 CDN 这个业务则是 2005年的事情了。到了 2006 年的春天,我有幸得到一个 CDN 设计方面的工作,这才有机会全面了解 CDN 原理、设计、部署以及运营等。7.1.1 为
2、什么使用 CDN(1)解决网站高流量、大并发的问题。我们知道,任何一个物理设备,其负载都有一个极限。为了应对访问量突增,使用 CDN 服务是一个好的系统扩容方案。(2)解决南北互联问题。我国的网络是划江而治的格局,因为利益之争,各网络服务商之间并不是通力协作,而是采取各种手段相互限制。这就导致各网之间的互联互通存在很大的问题,具体表现为:电信的用户访问放置在网通机房的服务器,响应时间特别长,反之亦然。使用 CDN 技术,可以让电信的用户访问电信的内容缓存服务器,网通的用户访问网通的内容缓存服务器。通过这样一种策略,绕开了网络运营商之间人为设置的障碍。(3)访问加速。CDN 采用缓存技术,把访问
3、对象缓存起来,有的技术甚至能把对象缓存到内存(如 Varnish),这在效果上表现出来的即是访问加速。(4)降低总体运营成本。在一些互联互通比较好的第三方 BGP 机房,其带宽费高达 300 400 元/兆/月,而二、三线城市单线接入的带宽费 100M 一年的费用才 5 万左右。使用 CDN 运营方案,我们把源站放在 BGP 机房,而把缓存服务器放置在带宽费用较低的其他地方。因为 CDN 的大部分流量被转移到缓存服务器上,源站只有较小的访问请求,因此总体运营成本大幅降低。(5)提高网站的可用性。源站的访问量变得很小,这意味着源站系统有更低的负载,更低的磁盘 I/O,防故障的几率大大降低。对于缓
4、存服务器,多个服务器做成集群,CDN 历史上最有名的事件当属关于克林顿丑闻的 斯塔尔报告被放在互联网,因下载该报告的人太多 ,最终导致服务器瘫痪。该事件直接促使 CDN的诞生。提示第 7章 简单 CDN199保证了整个系统的高可用。(6)防 DDOS 攻击。攻击负载被分配到不同的物理服务器,客观上起到防DDOS 的作用。7.1.2 CDN适用的场合任何一门技术,都有一定的适用范围,CDN 也不例外。实践证明,CDN 对于静态对象的加速和发布具有很好的效果,但对于动态的网站,则效果不佳。为了使用CDN 技术所带来的好处,我们可以通过动态内容静态化、静态内容分离(如动态站点里的图片)等方式,来加速
5、访问和增强用户体验。有哪些对象是静态可缓存的呢?这包括 html 页面文件、视频文件、 JS 文件、CSS文件、EXE 文件、图片文件(JPEG 、GIF、PNG)等。7.1.3 CDN的组成CDN 是一种组合技术,包括源站、缓存服务器、智能 DNS、客户端等几个部分。 源站指发布内容的原始站点。新增、删除和更改网站的文件,都是在源站上进行的;缓存服务器抓取的对象也全部来自于源站。 缓存服务器是直接提供给用户访问的站点资源,有一个或数个服务器组成;当一个用户发起访问时,他的访问请求被智能 DNS 定位到离他较近的缓存服务器。如果访问所需的内容没有被缓存,则缓存服务器向邻近的缓存服务器或直接向源
6、站抓取内容,然后再返还给用户;如果用户所请求的内容刚好在缓存里面,则直接把内容返还给用户。 智能 DNS 是整个 CDN 的核心,它负责根据用户的来源,将其访问请求转向到离用户较近或较合适的缓存服务器,如把长沙电信的用户请求转向到长沙电信机房的缓存服务器。实现智能 DNS 的一种技术是:Bind View,在 Bind 9 以后的版本,都应该支持 View 视图这个功能。另外还有一个方案,即DNS 轮询方式。 客户端即发起访问的普通用户,一般的访问方式是浏览器。这个不再做说明。除了前面列举的组件外,还有一个可选项目,即用来进行内部域名以及源站的域名解析。因为是可选的,因此也可以通过使用本地 h
7、osts 指定主机名来代替。200互联网运营内部域名系统不能使用合法注册的域名服务器,也即在互联网上,找不到这个域名系统的 NS 记录。为什么呢?请继续往下看。接下来,我们以图示来总结一下 CDN 各组件间的关系和访问流程。全局智能 d n s源站 内部 d n sA 网的缓存服务器 B 网的缓存服务器A 网用户B 网用户本 地 d n s本 地 d n s所 需 的 内容 不 在 缓存 里 , 回源 站 抓 取所 需 的 内容 在 缓 存里 , 直 接换 返 给 用户D n s 查询路径 站点数据路径 图 7-1 CDN 各部分间的关系图 7-1 展示了两种比较典型的访问场景,这两种场景,基
8、本上能反映整个 CDN 的工作机制。 场景一:当“A 网用户”访问被 CDN 加速的站点 http:/ 时,从本地的 DNS 查询域名,最终可能在全局智能 DNS 服务器得到域名所对应的 IP 地址,即图 7-1 所示“A 网的缓存服务器”的 IP;接着“A 网用户”浏览器向“A 网的缓存服务器”发起访问请求,幸运的是所需的默认页面文件index.htm 正好被缓存在 “A 网的缓存服务器”里,于是缓存服务器立即返还数据,完成一次访问请求。 场景二:当“B 网用户”访问被 CDN 加速的站点 http:/ 时,从本地的 DNS 查询域名,最终可能在全局智能 DNS 服务器得到域名所对应的 IP
9、 地址,即图 7-1 所示“B 网的缓存服务器”的 IP;接着“B 网用户”浏览器向“B 网的缓存服务器”发起访问请求,但是缓存服务器并没有缓存默认页面文件 index.html,它需要先从源站取得这个对象,缓存并把内容返还给“B 网用户”。“B 网缓存服务器”通过“内部 DNS”知道源站在哪里。注意本地 DNS本地 DNSDNS内部 DNSDNS 查询路径第 7章 简单 CDN2017.1.4 CDN的基本特点CDN 的基本特点可概括为:内容缓存、就近访问以及以 DNS 视图方式根据用户来源确定其访问位置。 内容缓存:缓存服务器从源站取得所需数据,然后暂存在本地的硬盘或内存。使用这种缓存机制
10、的好处是:内容自动更新;无多个服务器数据相互同步问题。 就近访问:让用户的访问请求转向到离用户最近或最易于访问的缓存服务器。 以 DNS 视图方式根据用户来源确定其访问位置:即让电信的用户访问电信的缓存服务器,网通的用户访问网通的缓存服务器。7.1.5 什么是简单 CDN简单 CDN 这个概念,是相对于复杂 CDN 来定义的。因此,我们先来了解一下什么是复杂的 CDN。笼统一点讲,CDN 服务提供商所运营的环境,就是复杂 CDN。就缓存服务器而言,其结构是分层次的,一般可划分为核心节点和边缘节点,并且同一层级的相邻节点之间又可形成姐妹关系,亦即在同一个集群下的节点互为姐妹关系。为了保证最高的性
11、能和效率,不提倡跨网或跨物理范围的节点形成姐妹关系。为了更直观地理解这个结构和由此产生的好处,这里以一个最长访问路径的图示来说明,如图 7-2 所示。202互联网运营边 缘 缓 存 服 务 器 集 群核 心 缓 存 服 务 器 集 群源站服务器邻居关系层间关系边缘 A核心 A图 7-2 缓存服务器相互关系说明如下:(1)用户向某边缘服务器(边缘 A)发起访问请求,所需内容没有被缓存。(2)边缘服务器(边缘 A)于是询问其邻居,是否缓存了用户所需的请求对象,邻居节点也没有缓存所需的对象。(3)边缘服务器(边缘 A)转而向某个父节点(核心 A)请求文件,如果该父节点仍然无所需的文件,则该父节点询问
12、其邻居;如果邻居也没有所需的文件,则把请求转给源站。(4)源站返回数据给核心节点(核心 A),并缓存数据在该节点。(5)核心节点(核心 A)返还数据给边缘节点(边缘 A),并缓存数据在该节点。(6)边缘节点返还数据给用户,一次最长路径的访问完成。这种分层机制,既能保证最高的可用性,又能最大限度地减少向上一级节点的网络流量。除了缓存服务器结构上的差异外,复杂 CDN 还具备以下一些特性。 缓存服务器布点范围广,服务器数量庞大。第 7章 简单 CDN203 复杂的日志处理系统。因为计费依赖于访问日志。 详细的视图划分。例如精确到每个省的 IP 地址段。 预加载机制。当我们了解了复杂 CDN 以后,
13、再来了解简单 CDN 就容易多了。所谓简单 CDN,就是节点层次简单、服务器数量有限、能实现有限规模站点加速和发布的平台。通常情况下,我们不必为实现 CDN 带来的好处而部署复杂的 CDN 系统,这将花费巨大的人力、物力。7.2 简单 CDN 的设计7.2.1 简单 CDN设计的基本原则简单 CDN 设计主要考虑以下几点。 选点合理,能覆盖大部分网络用户。最起码得在电信和网通机房放置缓存服务器,如果经费充裕,把教育网也考虑进来。 系统本身具备很好的高可用特性。用户的访问主要集中在缓存服务器,缓存服务器之间使用集群技术就能得到比较高的系统可用性。 核算自建简单 CDN 的成本,使之有较好的性价比
14、。如果自建一个 CDN 远比购买 CDN 服务商所花费的资金还高(目前国内商用 CDN 每兆带宽为 50 元/月,基数是 1G),基本上没必要自己建立 CDN 了。 系统应该具备很好的伸缩能力,以适应各种业务变化。如增加布点、增加设备、增加站点等。把复杂的 CDN 简化,使之符合我们的业务需求,是本章 “简单 CDN”撰写的用意所在。先声明一下,本文所设计的简单 CDN 只是一个样例,并非适用于所有的场景。读者可根据我的思路,设计出更适合自己应用环境的简单CDN。提示提示204互联网运营7.2.2 需求描述欲 对 3 个 Web 服 务 进 行 加 速 。 为 了 描 述 方 便 , 使 用
15、域 名 来 进 行 说 明 。 这 3 个 加速 站 点 为 图 片 站 点 、 下 载 站 点 、 主 站 , 3 个 站点 全 部 是 静 态 内 容 , 其 页 面 文 件 主 要 是 .html( htm) 、 .exe、 .css、 .jpeg、 .js 等 , 非 常适 合 被 缓 存 。服务的主要目标用户包括电信线路的用户、网通线路的用户、教育网的用户,其他线路的用户(如科技网、长城宽带等)访问请求被转向到网通线路的缓存服务器。为了实现这个目标,我们可能需要放置 4 组服务器来做缓存,即电信 1 组,网通 2 组,教育网 1 组。7.2.3 简单 CDN的设计需求明确之后,接下来
16、的设计工作包括:布点选取、工具选取、CDN 结构设计等几部分。1布点选取布点包括源站、全局智能 DNS 和缓存服务器集群。 源站及全局智能 DNS 选择互联互通性较好的第三方 BGH 机房;因为使用CDN 服务的站点数量有限,故在缓存服务器以主机名的方式寻址源站。 缓存服务器共 4 组,选择二线或三线城市的机房托管,能节省大量的资金(北京、上海等城市带宽价格大概在 300 400 元/兆/月,而偏远一点二三线城市(如安阳)1G 带宽的年总费用才 8 10 万)。2工具选取工具包括操作系统、DNS 软件、缓存服务器软件、负载均衡软件、源站软件以及定制的脚本。 所有的服务器均使用 32 位的 Ce
17、ntOS 5.x。曾经使用过 64 位的系统,但在执行缓存服务器的缓存清理操作时,有些小问题。 DNS 使用 Bind-9.4.0。低于 9.4.0 的版本,可能不支持视图 View,没有视图功能,智能 DNS 就无法实现。 缓存服务器有两种选择,一种是 Squid,另一种是 Varnish。Squid 多用在复杂 CDN 场景,它能实现缓存服务器间的层级关系(邻居形成姊妹、边缘节第 7章 简单 CDN205点与核心节点形成父子关系),功能强大而配置复杂;Varnish 为后起之秀,配置简单而性能卓越,维护起来也比较简单,因此本案选择 Varnish 作为缓存工具。 负载均衡由 Ipvsadm
18、 和 Keepalived 两部分组成。Ipvsadm 是核心,负责包转发和负载分摊;Keepalived 为框架,负责故障隔离和失败切换 FailOver。 可做 Web 服务的软件比较多,因为站点为简单的静态文件,选择 Nginx 比较省事。 定制脚本的主要目的是自动刷新缓存服务,把这个脚本放在某个服务器上,只需执行一次(也可使用 Crontab 自动调用)就能实现所有缓存服务器的缓存清理。3CDN结构设计我们可以根据 CDN 的角色来设计整个结构,这些角色包括源站、智能 DNS 及缓存服务器 3 大部分,根据布点选择和其他因素综合考虑,可以绘出整个 CDN 的布局结构图如图 7-3 所示
19、。全局智能 d n s源站 w e b 服务器集群网通 A 机房缓存服务器集群网通 B 机房缓存服务器集群电信机房缓存服务器集群 教育网机房缓存服务器集群图 7-3 CDN 服务器布局从图 7-3 中可以看出有两组缓存服务器放置在网通机房,这两组服务器不在同一个物理位置。这样做的主要目的是:Bind 规划视图 View 时,能收集到的地址比较有限,不再收集列表的其他 IP 地址段,则统统转发给网通 B 机房的服务器;另外网通B 机房的带宽比较便宜,机器数量也比较多,跟其他网段的互联互通还可以。最初的选择是 Squid,后来因为在运行过程中 TCP 的连接数过高而换成Varnish。提示源站 W
20、EB 服务器集群全局智能 DNS206互联网运营(1)源站源站为内容的原始发布,尽管采用 CDN 技术以后源站的负荷会变得很小,但为了有较高的可用性,可以把它部署成负载均衡集群。(2)智能 DNS智能 DNS 是用来实现用户访问转向功能的,即通过建立访问列表,判断用户的访问来源,确定其访问对象的位置。在本案中,建立电信、网通、教育网 3 个 IP 地址列表,未在这 3 个列表中的称为其他;每个列表关联一个 Bind 的视图 View,那么一共有 4 个视图 View。地址列表可以自己收集,也可以花钱购买,地址列表越大,DNS 定向准确性越高。(3)缓存服务器缓存服务器是 CDN 环境使用量最大
21、的设备。为保证缓存服务本身的高可用,每个布点的服务器都以负载均衡集群的方式存在。根据以往的经验,访问负荷比较重的机器,非常容易损坏硬盘,因此在设计时,尽可能地缓存内容到内存中,以增加访问的速度和延长机器的寿命。据说,一些 CDN 运营商已经开始用固态盘来做缓存空间。在简单 CDN 的运行环境中,由于我们所使用的资源有限(服务器数量有限、带宽有限),很可能出现超负荷运行的情况,如单个服务器 TCP 连接数过高、CPU 负载过大、流量峰值带宽超出合同规定的范围等。为了随时掌握整个系统的运行情况,并能对其进行快速反应和调整,因此必须有监控系统对其服务、资源进行实时监控。为了对设计有一个整体把握,将上文所做的叙述做一个汇总,如表 7-1 所示。表 7-1 CDN设计汇总角 色 机器数量 总带宽 高可用方式 放置位置 备 注源站 3 个 100M 负载均衡集群 第三方 BGH 机房跟其他服务器共用负载均衡器智能 DNS 2 个 100M DNS 主从同步 第三方 BGH 机房CDN 运营商可能把它的 DNS服务器群放在IP 地址列表为客户 DNS 服务器所在网段的列表,而不是用户接入网络的 IP 段。客户端计算机所设定的 DNS,通常称为用户本地 DNS。同样,为了使其有较高的可用性,DNS 采用主从同步的架构。强调
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。