发现我自己好像和Amazon的云服务杠上了,在使用S3云存储服务备份并保管自己的文档后,昨天晚上我又瞄上了Amazon的另一个云服务:CloudFront。
CDN是什么?CloudFront又是什么?
这一节内容适合非技术型用户。如果您是技术型用户,或者已经对CDN有了基本了解,可以跳过这一节直接阅读下文。
CDN是Content delivery network(内容分发网络)的简称,这一技术以往只应用于大型商业性网站。通过使用这种技术,可以将网站上的静态内容(例如.html文件、.jpg 图片)和动态内容(例如数据库查询)缓存到CDN提供商位于全球各地的多个服务器上。这样当全世界不同访客访问这个网站的时候,就不再需要通过网站所在服 务器读取这些内容,而是可以从就近的CDN缓存服务器上读取,因此内容的读取速度更快,直接影响就是网页的加载速度更快。
这一系列过程都是完全自动实现的,并且在配置好后,对于网站的内容提供方(例如正在写这篇文章的我)也是完全透明的。我只需要按照正常方式撰写并发 布内容到本站,随后相配套的程序就会自动把需要缓存的内容提交到我指定的缓存服务器上;而正在阅读这篇文章的您,在打开本站文章时,会根据您的实际地理位 置和网络环境,由DNS服务器将您引导到速度最快的缓存服务器上,并从缓存服务器上直接下载显示本站页面所需的各种内容。
简而言之,通过使用CDN,可以有效提升全球各地访客打开网页的速度。因此各大门户网站、社交网站,以及网络视频站点,都会使用各种CDN技术。对 于技术实力强大,并且有充足预算的企业,可能会自行在全球各地搭建缓存服务器(Google这类技术型公司的主要做法);但对于技术实力不强,或者预算不 充足,或者内容数量过少,自建CDN网络不划算的企业,则会考虑使用专门的CDN服务提供商,借助提供商建好的网络进行加速,并按照一定策略为此付费。
CloudFront则是由Amazon提供的一套覆盖全球的CDN网络。该服务属于一种非常彻底的云计算服务,可以根据流量和请求数量进行收费,并且相对来说费用还算低廉,因此适合小型公司或个人。
根据介绍,Amazon的CloudFront目前在全球下列地区建立了提供CloudFront服务的数据中心:
美国
维吉尼亚周,阿什本
德克萨斯州,达拉斯/沃斯堡
佛罗里达州,杰克逊维尔
加利福尼亚州,洛杉矶
佛罗里达州,迈阿密
纽约
新泽西州,纽瓦克
加利福尼亚州,帕罗奥图
华盛顿州,西雅图
密苏里州,圣路易斯
欧洲
阿姆斯特丹
都柏林
法兰克福
伦敦
巴黎
亚洲
香港
东京
新加坡
因此只要使用CloudFront服务,就等于可以通过上述遍布全球主要地区的缓存服务器,为您的网站提供加速服务。
如何收费?
首先有一个问题需要注意:如果使用CloudFront服务,等于需要创建一个“来源服务器-AmazonS3-缓存服务器”这样的路径。当您的网 站内容(来源服务器)上增添了新内容后,这些内容会被同步到Amazon S3的指定Bucket中,这一过程将产生S3的数据传入流量费用(一次性),S3的请求处理费(一次性),以及数据存储费用(按月收取,只要该数据存在 于S3网络中)。而当位于某地的访客访问您的网站时,访客将向距离自己最近的缓存服务器发出请求,如果所请求的文件是首次被请求,此时缓存服务器将从S3 中检索被请求的文件,并将其自动复制到一台缓存服务器。这一过程将产生S3的数据传出流量费用(一次性),S3的请求处理费(一次性),以及缓存服务器将 内容发送给访客的流量费用(每个请求一次)和请求处理费(每个请求一次)。随后,这台缓存服务器会将被请求的文件复制到整个CloudFront网络的全 部缓存服务器,这一过程不需要收费。再随后,全球各地的访客访问网站时,向缓存服务器发送请求,处理每个此类请求都将收费,而将所请求的文件传输给访客, 也将按照流量计费。
因此来说,这种工作模式下,对于S3,等于需要支付在S3中存储所有缓存内容的费用(按月收取),支付S3的传入和传出网络流量,以及S3的传入和 传出请求处理费用各一次(从来源服务器传入S3的请求收取一次,从S3传到某一台缓存服务器的请求收取一次)。随后,当文件被复制到缓存服务器后,每当访 客访问网站,并从缓存服务器(无论该服务器位于地球上的哪个位置)请求内容时,将按照访客所请求的服务器所在地的费率,并结合请求的文件大小,按此收取流 量费和请求处理费。
听起来比较复杂,关键这里面涉及到S3的相关处理,以及CloudFront缓存服务器的相关处理。但实际上只要将这一过程分开进行理解,实际上也简单多了。
至于具体的费率,可以在这里看到:
针对不同地区的缓存服务器,具体的流量和处理费用有略微差异,其中日本的费用最贵。在估算实际费用时需要注意,此时需要考虑您网站访客的主要来源, 例如对于大部分中国用户,取决于具体的ISP和网络环境,往往会通过位于香港/新加坡,或日本的缓存服务器获取内容。我的这个博客位于美国 DreamHost的虚拟主机上,很多人都曾经反应过访问速度比较慢。在决定使用该服务前,通过DreamHost的流量统计功能发现,我的博客每月产生 的网络流量在15 GB左右。如果全部这些流量都通过费用最贵的日本服务器进行处理,我每月需要为此付出多少钱?
本网站的整个目录下所有文件,包含php,以及png等,全部加起来大概在257 MB左右,就算整200 MB。这些文件在S3中的存储和传入及传出费用基本可以忽略不计(S3的文件存储费用的最小统计单位为GB,而请求处理费则取决于文件数量,,每个文件产 生两个请求,请求费的计费单位都是成千上万个请求才记为0.01美元)。由于访客访问网站时所请求的每个文件(PHP、脚本、CSS、图片等)都会产生一 个请求,就算平均每个页面会产生50个请求(毕竟我的博客上完全由博客本身提供的内容数量并不多),假设每天的页面浏览量是300个。其实这些数据通过 Google Analysis都可以获得一个准确值,但我也懒得去找了,用近似值计算好了。