7.8 杂项
 
7.8.1 部署 cdn 的重点和难点
 
整个cdn最重要的部分就是全局智能dns服务,这是cdn不可替代的组件。在没有出现视图view功能之前(或者当某些系统管理员不知道有这样的功能),甚至有人以dns轮询方式调度用户对缓存服务器的访问,这种形式会让用户的体验时好时坏。
 
7.8.2 取得和归类中国大陆 ip 地址列表
 
在本章“ 7.3.3 ”节,我们用了一个脚本get_ip.sh来取得和归类ip地址,而未说明是怎样一回事情。那么,在本章的结尾我把它补充一下。
 
我们知道,亚太地区的ip地址由APNIChttp://www.apnic.net)分配,通过访问APNIC官方站点的url http://www.apnic.net/publications/research-and-insights/stats ,可以知道在何处得到ip地址分配的有用信息(如图7-8所示)。
简单cdn(八)_第1张图片
7-8 通过 ftp 方式可以取得原始数据
点击图7-8加下划线的那个链接,就进入ftp站点 ftp://ftp.apnic.net/,再点几次鼠标,最后定位在ftp://ftp.apnic.net/apnic/stats/apnic/README.TXT,这个文件帮助我们了解该下载哪个文件以及文件的格式。让我们按照这个README.TXT的提示,在浏览器里打开页面文件ftp://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest ,除去注释行,我们将看见形如“apnic|JP|asn|173|1|20020801|allocated”的文本行。把这个文件下载下来,过滤一下,变可以把分配给中国大陆(第2个字段为“CN”)单独提取出来。在前面的get_ip脚本,用wget下载这个delegated-apnic-latest文件,然后再用grep CN提取出来形成一个单独的文件。具体的操作就是一下两步:
(1)                             wget http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest -O /root/ipnic/ip_apnic
(2)                             grep 'apnic|CN|ipv4|' /root/ipnic/ip_apnic | cut -f 4,5 -d'|'|sed -e 's/|/ /g' | while read ip cnt
do
echo $ip:$cnt
    mask=$(cat << EOF | bc | tail -1
pow=32;
define log2(x) {
if (x<=1) return (pow);
pow--;
return(log2(x/2));
}
log2($cnt)
EOF)
echo $ip/$mask>> cn.net
done
在得到ip地址段以后,通过网站www.cnnic.net.cn查询这个地址段属于那个运营商,或者在linux下用whois工具查询。用访问网站的方式,一次只能查询一个地址段,根本无法完成所有地址的查询。而使用whois则可用遍历方式逐个查询,然后按关键字归类,形成几个单独的文件。
 
可能由于各ip地址租用方未能按同一的标准在apnic提交注册信息,get_ip.sh脚本以正则表达式“netname”取得的值就未必能清楚反应运营商的名称,如“netname:      KLSF-LID-BJ”就很难从字面上连接是那个运营商的网络。如果你想判别更精准一些,则需要借助其他正则表达式如“mnt-by”作为辅助条件。
 
7.8.3 应急处理
 
Cdn服务运营中,有可能出现某个运营上机房网络不可用的情况--如设备故障或机房维护操作--这样一来,就导致某个区域的用户彻底不能访问。出现这种极端情况时,我们需要把出故障的机房资源临时从dns的转发列表删除,然后把前往这些机房的访问转发到其它地方,接下来,还是以我的实例来做说明。
 
现在假定我们放置服务器的电信idc托管机房出故障,造成电信的用户不能访问我的网站。在我发现故障以后,打开区文件telecom.sery.cn.zone,把它里面的A记录做修改,如果要把它的流量切换到网通机房,则把A记录对应的 ip改成跟unicom.sery.cn.zone的设置一样。
 
在进行流量切换操作时,很可能因为瞬间流量过大而使系统过载,因此在设计简单cdn容量的时候,每个点应该至少能承受整个系统用户的访问,否则当你从一个故障机房切换流量时,顺便也吧另一个点也撑死了,这种结果当然不是我们想要的。