CDN 是内容分发网络的简称,使用 CDN 可以将网站的静态内容(例如纯HTML文本、图片、css、js等)缓存到网络服务商的服务器上,从而让访客分流去 CDN 上获取静态资源,提升我们网站的访问速度。我之前介绍过的 CloudFront 就是 Amazon 基于云计算平台提供的 CDN 服务。

新浪 SAE 是国内一个优秀的云计算平台,它提供的 Storage 服务同样可以用来存储静态文件。新浪的服务器部署在多个数据中心,全国各地各种线路的访问速度都十分流畅。充分利用其强大的分布式架构,基于 SAE 搭建 CDN 的想法具有可行性。

一、安装和使用

1、 一个 SAE 帐号。使用新浪微博帐号即可申请,申请地址:http://sae.sina.com.cn/

2、部署代码。直接 在线安装

3、配置程序。登录 SAE 后台,找到你刚刚创建的应用,点击“代码管理” – “部署代码”。完成后点击“编辑代码”。在新窗口的代码编辑器中,选择编辑 index.php 文件,修改配置填入你的网站域名。

sae_cdn_config

4、使用 CDN。将网站中静态文件的的根目录 URL 替换成你的 SAE 应用地址,如将http://www.lovelucy.info/logo.jpg 换成 http://mysaecdn.sinaapp.com/logo.jpg。最后,刷新你的网站,然后感受网站加载速度的飞跃。

使用 WordPress 的同学可以利用 wp-super-cache 插件设置 CDN 重写 URL,具体参见 CloudFront 配置 中的第 7 步。Off-site URL 配置项填入 http://mysaecdn.sinaapp.com 即可,这样所有的静态文件链接都会自动替换为 CDN 的链接。

supercache_cdn_setting

我为此专门设置了一个二级域名,CNAME 到 CDN 的域名地址上,所以截图上填写的是我的二级域名。

二、原理

用户访问 SAE 地址取静态文件,当该文件是第一次被访问时,程序发现 SAE 中没有该文件,便去源服务器上取文件并保存到自己的 Storage 里,然后返回给前端;之后就直接从 SAE 取而不需要再访问源服务器了。

使用 又拍云 之类的 CDN 服务需要手动将图片等文件上传至 CDN 服务器,或者需要使用 API 进行专门的编程,这相当麻烦。而 SAE 的这个解决方案和 CloudFront 类似,资源文件仍保存在源服务器上,只要将静态资源的前缀改为 SAE 的网址就行了,CDN 会自动抓取,而当不想使用 CDN 时可以再改回来,无痛切换。

三、配合 CloudFront 使用,区分国内外访客

我的博客来自国外的访客占据了一半以上的流量,我原先使用的 Amazon CloudFront 可能更适合服务于国外用户,但 CloudFront 在中国又比较慢,这真是一件纠结的事情。

好在我使用 dnspod 做域名解析,他们支持针对不同访客的线路解析不同的地址。这样就一劳永逸了。

cdn_dns_records

使用超级 ping 测试,全球各地的访问速度都在 100 ms 左右,再不会出现超时的状况了。

使用 CDN 的好处是显而易见的,一是 CDN 服务器在全国各地都有很好的访问速度,用户下载资源时更快;二是减轻了我们自己服务器的压力,提升了性能。