【问题标题】:Force update Amazon CloudFront on iOS在 iOS 上强制更新 Amazon CloudFront
【发布时间】:2013-02-06 17:22:24
【问题描述】:

我将 Amazon S3 与 Amazon CloudFront 结合使用,基本上在我的应用程序中,我有一个更新 S3 对象的方法,基本上我使用 CloudFront 获取 S3 对象,我对数据进行了更改,然后在相同的键——基本上是替换/更新文件/对象。

但是,CloudFront 似乎没有与 S3 一起更新(确实如此,但我的用户没有一整天的时间),有没有办法强制 CloudFront 内容更新?显然您可以使其无效,有没有 iOS SDK 方法可以做到这一点?

【问题讨论】:

    标签: ios amazon-web-services amazon-s3 amazon-cloudfront


    【解决方案1】:

    我不知道有没有办法通过 iOS SDK 发出 CloudFront 失效请求。您可能需要构建自己的方法来制定针对 AWS API 的请求。

    不过,我建议您采用另一种方法。失效请求是昂贵的操作(相对于其他 Cloudfront 成本)。您可能不希望让您的用户能够通过应用程序向 CloudFront 发起无限量的无效请求。您还将遇到对可以拥有的并发无效请求数量的限制。最好的办法是实际实施文件名版本控制方案,以便您可以以编程方式为每个修订更改文件名。然后,您将在每个修订版中引用 Cloudfront 中的新 URL,从而无需等待缓存刷新或执行失效。此外,这将导致图像更即时的响应可用性,因为无效请求可能需要一段时间来处理。

    请注意 CloudFront 常见问题解答中的以下内容:

    问。我可以提出的无效请求数量是否有限制? 您可以无效的文件总数没有限制;但是,您发出的每个失效请求最多可以包含 1,000 个文件。此外,在任何给定时间,您只能有 3 个正在进行的无效请求。如果您超过此限制,则进一步的无效请求将收到错误响应,直到较早的请求之一完成。您应该只在意外情况下使用失效;如果您事先知道您的文件需要经常从缓存中删除,建议您为文件实施版本控制系统和/或设置较短的有效期。

    【讨论】:

    • 如果您将过期日期的纪元时间更改为 1 秒,这样它就会很快过期以生成包含更新内容的新 URL
    • 好的,因此将纪元时间设置为快速过期似乎不起作用。我不太确定您在回答中的建议是什么,您是说我应该为每个版本上传一个新的 Amazon S3 对象吗?我会给你我的例子,比如 Twitter,当你关注一个用户时,用户数据需要用他们关注你的数据进行更新,所以我应该上传一个具有不同文件名或某种类型的全新对象关键名称方面?然后我将如何在 CloudFront 中引用它或知道哪个是基于密钥的较新对象?我不太清楚你的建议是什么。
    • @RohanKapur 我建议使用具有新文件名的新对象。您将如何引用对象实际上是您需要根据您的应用程序的工作方式来解决的问题。我对您的应用程序以及它如何与这些对象交互的了解不够多,无法在此提供很多建议。您当然可以在客户端中存储有关当前“版本”的信息。如果这不是真正的静态内容,而是经常变化的内容,那么 S3/Cloudfront 可能不是合适的存储介质。
    • 我知道 S3/CloudFront 适合我的应用程序这一事实,它得到了另一位开发人员的特别推荐,该开发人员已使用这些服务成功构建了数据密集型应用程序。想想我的应用程序是一个极其有限且用户群很小的社交网络。但是,我忘了提到我正在使用 SimpleDB,这是一个类似于 MySQL 的键值存储,用于查询对象。所以我可以为每个 SimpleDB 项目添加一个“修订”属性,并使用 SELECT 查询来查找最新的,谢谢你的建议。仍然想知道这是否是唯一的方法。
    • 另外,如果发生冲突会发生什么,例如 Facebook,例如,如果有人“喜欢”了您的“状态”,而您在或多或少相似的时间“上传状态”,则将是一个冲突,您将上传不同的修订,每个都没有新的状态或新的喜欢 - 我将如何处理?
    猜你喜欢
    • 2010-11-19
    • 2010-11-08
    • 2015-12-10
    • 2014-01-31
    • 1970-01-01
    • 2016-04-26
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多