博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单cdn之二
阅读量:6899 次
发布时间:2019-06-27

本文共 3382 字,大约阅读时间需要 11 分钟。

作者:田逸()

7.1.4
 cdn
的基本原理
 
Cdn
的基本原理可概括为:内容缓存、就近访问以及以dns
视图方式根据用户来源确定其访问位置。
 
     
内容缓存:缓存服务器从源站取得所需数据,然后暂存在本地的硬盘或内存。使用这种缓存机制的好处是:(1
)内容自动更新;(2
)无多个服务器数据相互同步问题。
     
就近访问:让用户的访问请求转向到离用户最近或最易于访问的缓存服务器。
     
dns
视图方式根据用户来源确定其访问位置:即让电信的用户访问电信的缓存服务器,网通用户访问网通的缓存服务器。
 
7.1.5
 
什么是简单
cdn
 
简单cdn
这个概念,是相对于复杂cdn
来定义的。因此,我们先来了解一下什么是复杂的cdn
 
笼统一点的讲,cdn
服务提供商所运营的环境,就是复杂cdn
。就缓存服务器而言,其结构是分层次的,一般可划分成核心节点和边缘节点。并且同一层级的相邻节点之间又可形成姐妹关系,亦即在同一个集群下的节点互为姐妹关系。为了保证最高的性能能和效率,不建议跨网或跨物理范围的节点形成姐妹关系。为了更直观的理解这个结构和由此产生的好处,我在这里以一个最长访问路径的图示来说明:
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
、主站 
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
的布局结构图。
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
维护
其他
 
本文转自sery51CTO博客,原文链接:http://blog.51cto.com/sery/259635
 ,如需转载请自行联系原作者
你可能感兴趣的文章
终于解决 xUnit.net 测试中无法输出到控制台的问题
查看>>
【素数筛】分解质因数
查看>>
【ADT】队列的基本C语言实现
查看>>
NYOJ-1057 寻找最大数(三)(贪心)
查看>>
【转】 [UnityUI]UGUI射线检测
查看>>
应用被强杀了怎么办
查看>>
jquery validate 插件使用心得
查看>>
Windows下安装mysql后,不知道root密码,如果修改root密码
查看>>
Linuxドライバ_LDD3メモ_ハードウェアとの通信
查看>>
数学之美系列四 -- 怎样度量信息?
查看>>
用Access+SharePoint 来收集数据
查看>>
Nginx 的 Location 配置指令块
查看>>
Spark小课堂Week5 Scala初探
查看>>
go练习1-翻转字符串
查看>>
java第一天学习笔记
查看>>
GPS定位为什么要转换处理?高德地图和百度地图坐标处理有什么不一样?
查看>>
冲刺博客 五
查看>>
poj 2389 大整数乘法
查看>>
JSON.stringify JSON.parse
查看>>
java中二进制的程序表示_Java程序检查两个数字的二进制表示形式是否为字谜
查看>>