2017-02-17 58 views
0

Amazon cloud frontCloudfront决定从缓存或服务器获取数据?

亚马逊CloudFront的是,加快配送的 静态和动态Web内容,如html的,的CSS,.PHP和图像 文件,给用户的网络服务。 CloudFront通过全球数据中心网络 提供您的内容,称为边缘位置。

对于每个我不知道的人,CloudFront必须缓存以URL作为关键字的内容。网址可以同时投放静态内容和动态内容。假设我有100个weburl,其中30个提供静态内容,70个提供动态内容(用户特定数据)。我有每一个问题,关于静态和动态内容

动态内容: - 说用户_A通过url_A访问美国他的数据。该数据已被缓存。他更新了名字。现在,同一用户将访问美国同一地点的数据或从英国另一地点的 访问数据。我们在更新之前看到数据。如果是,边缘位置将如何知道数据需要从服务器获取而不是从缓存中获取? 边缘位置是否继续显示来自缓存的数据以进行可配置的时间量,如果时间已过,则从服务器中获取?

是否CloudFront的允许配置,需要从服务器,而不是缓存总是获取特定的URL的?

静态内容: - 即使静态数据可能会在每次发布时发生变化,但有可能发生变化。云端如何知道缓存的静态内容是陈旧的,需要从服务器获取?

回答

1

亚马逊CloudFront的使用了保质期(或生存时间 - TTL)您指定。

对于静态内容,可以设置分配的默认TTL,或者可以将TTL指定为标题的一部分。 TTL过期后,CloudFront边缘位置将检查对象上的上次修改时间戳是否已更改。如果它已更改,它将获取更新的副本。如果没有更改,它将继续为新时间段提供现有副本。

如果静态内容已更改,您的应用程序必须发送失效请求以告知CloudFront即使在TTL未过期时也重新加载对象。

对于动态内容,您的应用程序通常会指定为零的TTL。因此,该URL将始终从原始获取,从而允许服务器修改用户的内容。

的半和半方法是使用参数(例如xx.cloudfront.net/info.html?user=foo)。在配置CloudFront的分布,你可以指定是否不同参数(例如user=fred)应作为一个单独的对象或者它是否应该被忽视治疗。

另请注意,每个CloudFront边缘位置都有自己的缓存。所以,如果有人访问来自于美国,这将导致它被英国缓存的页面。

参见文档:Specifying How Long Objects Stay in a CloudFront Edge Cache (Expiration)

+0

1.你说'你可以设置默认的TTL的分布',我们可以设置默认TTL在设置CloudFront的? 2.'如果静态内容已更改,则您的应用程序必须发送无效请求'Cloudfront是否提供任何供应/配置以将无效请求 发送到云端?它是在URL级别还是用于完整分发? –

+0

@JohnRotenstein,小细节...根据文档,CloudFront不使用HEAD来检查陈旧的对象,它使用[条件'GET'](http://docs.aws.amazon.com/AmazonCloudFront/最新/ DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html#RequestCustomConditionalGETs),发送'If-Match' /'If-None-Match'和/或If-Modified-Since'以及最后提供的值。最终的结果是相似的(如果不改变,避免传输),但是它也避免了第二个请求,如果'HEAD'响应显示过时的缓存对象确实已经在原点更新了,那么这将是必要的。 –

+0

@sqlbot谢谢,修复! –

相关问题