2

我在 Amazon S3 上有大量对象,其中只有一小部分被定期访问。因此,我真的很想使用分布式缓存系统,比如 Ehcache。(注意,我会使用 Cloudfront,但需要从 API 服务器而不是最终用户访问数据,并且上次我检查时 Cloudfront 不支持身份验证。)

谁能告诉我这是否可行、实用,或者是否存在使用 Ehcache 缓存来自 Amazon S3 的对象的库或示例?

当然,我的应用服务器是用 Java 实现的,并且运行在 Linux 环境中。

非常感谢。

4

2 回答 2

1

有趣的想法 - 但是,在最终深入研究之前,我想强调自 2009 年 9 月以来Amazon CloudFront中提供了身份验证,尽管可能不像您想象的那样,即您可以使用签名 URL 来提供私有内容

您可以使用静态签名 URL 或动态签名 URL 分发私有内容。在向已知的最终用户分发私有内容时,您使用静态签名 URL [...]。在这种情况下,您可以创建一个签名 URL 并根据需要将该 URL 提供给您的最终用户。您使用动态签名 URL 将内容即时分发给最终用户以用于有限目的 [...] 在这种情况下,您的应用程序会生成签名 URL。

这在私有内容概述中进一步详细说明:

CloudFront 私有分配基于指定以下任何或所有约束的策略声明:

  • 指定签名 URL 有效的日期和时间的开始日期
  • 签名 URL 无效的结束日期和时间
  • 可以使用签名 URL 的 IP 地址或 IP 地址范围

[强调我的]

这种方法是否适用于您的用例取决于您的解决方案的架构,只要您需要通过某种方式生成这些签名的 URL 并依次使用来自 API 服务器的那些;鉴于您的“最终用户”是 API 服务器,您可能会按照建议预先生成静态 URL,另一方面,最明显的方法可能是在 API 服务器本身中动态执行签名 URL 生成过程并缓存生成的URL<- > 为最终重用而签名的 URL映射(即确实通过 Memcached 或 Ehcache)。

例如,这种身份验证方案显然比简单的 HTTP 身份验证更麻烦,另一方面,它也提供了更大的灵活性,例如,参见教程Restricting Access to Files in a CloudFront Distribution Based on Geographic Location (Geoblocking)以获得高级用例,这也在 AWS 博客上的访客帖子中进行了总结:使用 Amazon CloudFront 对内容进行地理封锁。

于 2012-04-14T14:45:57.363 回答
0

我最终使用JetS3t从 S3 读取文件并将它们存储在分布式 ehcache 集群中。到目前为止,这种方法效果很好,尽管我发现 JetS3t 创建了大量必须处理的临时文件。

于 2012-04-30T22:22:47.063 回答