说明:本文是在亚马逊AWS英文文档的基础上翻译并整理而来。

1 CloudFront介绍

CloudFront是亚马逊AWS提供的一种公共网络服务。

1.1 什么是CloudFront

CloudFront是一种提供给最终用户的能够加快静态、动态网络内容(例如:htmlcssphp、图片等文件)的分发的Web服务。CloudFront通过Edge Locations的互联网分发Web内容。

1.2 为什么需要CloudFront

当最终用户通过CloudFront请求Web内容的时候,用户的请求将会路由到距用户最近的Edge Location,这样就提供的最低的延时、最好的性能,提高了用户体验。如果被用户请求的内容正好是在该Edge Location的话,那么CloudFront会马上返回这些内容。如果不在该Edge Location的话,那么CloudFront就会从亚马逊S3bucket中或者一个HTTP服务器里面去获取这些数据,然后传输给用户,并且会将这些数据在该Edge Location中缓存起来(默认缓存24小时),以供下次请求时使用。

1.3 CloudFront的一些概念

1.3.1 Objects

Objects就是需要CloudFront分发的文件。一般包括:网页、图片、媒体文件,也可以是可以被HTTP协议和Adobe RTMP协议提供的任意实体。

1.3.2 Origin Server

存放原始的、最终版本的Objects的地方。通常有两种:亚马逊S3bucketHTTP服务器。但是需要注意的是,如果使用RTMP协议提供媒体文件的话,就只能使用亚马逊S3了。

1.3.3 Distributions

Origin Server上存储了对象之后,就可以创建一个distribution了,它主要是告诉CloudFront对象存在哪里。创建成功之后,CloudFront会返回一个唯一的域名,用来引用存储在Origin Server上的对象。例如:dfk0239dhj2gh2.cloudfront.net

假如之前你存储在亚马逊S3上的一个对象URL为:http://mybucket.s3.amazonaws.com/p_w_picpaths/logo.jpg,在使用了CloudFront之后,URL就会变为:http:// dfk0239dhj2gh2.cloudfront.net/p_w_picpaths/logo.jpg

目前,CloudFront提供了2distribution

1.DownloadDistribution:可以采用HTTPHTTPS协议进行传输;最多10origin serversS3buckets或者自定义的server);

2.StreamingDistribution:采用Adobe Flash MediaServerRTMP协议;只能使用S3作为origin server

1.3.4 Edge Location

是指CloudFront提供的地理位置上不同的保存对象的缓存副本的地点。

AWS提供的Edge Locations名录请见附录一。

1.3.5 Expiration

默认情况下,在Edge Location上面保存的缓存副本将会在24小时之后过期。当对象过期之后,如果CloudFront接收到该对象的请求时,会去Origin检查该对象是否被更新过。如果更新过的话,origin会返回最新版本的对象。CloudFront会将这些对象返回给最终用户,并且保存最新版本的对象。

过期时间是可以设置的,最小过期时间为0秒,无最大过期时间限制。

1.3.6 Eventual Consistency

当初建、修改、删除一个Distribution的时候,需要花费一点时间(15分钟以内)才会使改变生效的。Distribution的信息是最终一致的,但是distribution的信息的改变不会马上被呈现出来,这需要几分钟时间。一致性一般会在几分钟之内就会达到,但是在高负载的系统或者网络分区中可能需要的时间会长一些。

1.4 CloudFront是怎么分发内容的

步骤如下:

1.配置origin服务器,包括:亚马逊S3bucketHTTP服务器;

2.上传文件到origin服务器中;

3.创建一个CloudFrontdistribution,当最终用户请求数据的时候,distribution将会通知CloudFront去哪个origin服务器上去获取数据并返回给用户;

4.CloudFront返回一个唯一的域名,可以用来部署网站或者应用程序;

5.CloudFrontdistribution的信息同步到所有的Edge Locations中去;

6.使用步骤4中返回的域名部署网站或者应用程序,也可以使用自己的域名部署,这取决于怎么配置的distribution

还可以配置对象缓存在Edge Location中保存的时间,默认是24小时。

7.一个最终用户通过部署的网站或者应用程序请求一个图片和一个html文件;

8.CloudFront决定采用哪一个Edge Location去响应用户的请求,一般会采用离用户最近的那个,以提高访问速度。这里假如选择了新加坡Edge Location

9.在新加坡Edge LocationCloudFront检查请求文件的缓存。如果存在的话,就直接返回给用户。如果不存在的话,CloudFront将会做如下操作:

a)CloudFront比较请求和distribution中定义的规格,并发送请求到配置origin server中请求数据;

b)Originserver将数据发送到在新加坡Edge Location

c)一旦数据开始从origin server传输过来,CloudFront就开始给用户返回数据。同时,CloudFront会将数据添加到新加坡Edge Location的缓存中。

10.对象在Edge Location中的缓存过期之后,如果CloudFront接收到该对象的请求时,会去Origin检查该对象是否被更新过。如果更新过的话,origin会返回最新版本的对象。CloudFront会将这些对象返回给最终用户,并且保存最新版本的对象。

2 CloudFront使用

2.1 注册亚马逊AWS账号

http://aws.amazon.com/上面注册一个亚马逊AWS的账号,如果已有账号,直接登录即可。

2.2 上传文件到S3并设置权限

在亚马逊S3中,bucket(桶)是一个存储文件和文件夹的容器。CloudFront基本上可以分发所有存储在S3中的数据,包括:文本文件、图片、视频等等。也可以创建多个bucket,并且在S3中数据的数量是不限制的。

默认情况下,S3中的数据都是私有的,如果想要任何人都可以读取摸一个对象,则需要为其加上Public_Read的权限。

文件上传到S3之后,URL将会是如下的样例:http://s3.amazonaws.com/mybucket001/filename。其中mybucket001bucket名字,filename是上传的文件名。

2.3 创建一个CloudFront Download Distribution

访问https://console.aws.amazon.com/cloudfront/,点击“Create Distribution”,选择“Download”类型的分发方法,然后就可以按照操作提示进行操作了,具体操作步骤可以参考CloudFront开发者指南。

2.4 测试刚创建的CloudFront链接

需要注意的是,只有当distribution的状态变为“Deployed”的时候才可以开始测试。

将下面的内容拷贝到一个文件中,后缀名为.html

My CloudFront  Test

My test content goes  here.

http:///"  alt="my test p_w_picpath" />

将其中的换成实际的域名和文件名即可。

在浏览器里面打开这个html文件,查看内容是否显示出来,如果正常显示则可以说明已经部署OK了。如果未显示出来,则需要检查之前的步骤是否操作正确,或者可以调试一番,具体请参考CloudFront开发者指南。

附录

3.1 附录一 Edge Locations列表

To deliver content toend users with lower latency, Amazon CloudFront uses a global network of edgelocations. Amazon CloudFront edge locations are located in:

United States

Europe

Asia

South America

Ashburn, VA (2)

Dallas/Fort Worth, TX (2)

Hayward, CA

Jacksonville, FL

Los Angeles, CA (2)

Miami, FL

New York, NY (3)

Newark, NJ

Palo Alto, CA

San Jose, CA

Seattle, WA

South Bend, IN

St. Louis, MO

Amsterdam, The Netherlands (2)

Dublin, Ireland

Frankfurt, Germany (2)

London, England (2)

Madrid, Spain

Milan, Italy

Paris, France (2)

Stockholm, Sweden

Hong Kong, China (2)

Osaka, Japan

Seoul, Korea

Singapore (2)

Sydney, Australia

Tokyo, Japan (2)

São Paulo, Brazil