0

我正在尝试在 AWS 上实施如下解决方案:

我有一个每天运行一次的爬虫来索引某些网站。我想缓存这些数据并以 API 的形式公开它,因为在爬取之后,这些数据一整天都不会改变。爬虫重新取回后,我想使这个缓存失效并重建以提供更新的数据。我正在尝试使用无服务器架构来构建它。

可能的解决方案

很明显,爬虫将在 AWS Lambda 上运行。我不清楚的是如何管理将为数据提供服务的缓存。以下是我想到的一些解决方案

  1. 用于缓存的 S3 和 Cloudfront:爬取后,将数据以 .json 文件的形式存储在 S3 中,将使用 AWS Cloudfront 进行缓存。当爬虫重新获取新数据时,它将重建这些文件并要求 Cloudfront 使缓存无效。

  2. API Gateway DynamoDB:抓取后将数据存储在 DynamoDB 中,然后由缓存的 API Gateway 提供服务。这里唯一的问题是,当爬虫重新爬取时,我怎么能要求这个缓存在一天结束时失效?由于数据将是一天的静态数据,我怎么能不为 DynamoDB 运行的额外时间付费(因为如果我在 API Gateway 上实现缓存,那么只有一次调用 DynamoDB 进行缓存,之后它将处于空闲状态一天)

还有其他我想念的方式吗?

谢谢!

4

1 回答 1

1

您可以将新数据存储在 S3 中的不同路径中,其中包括创建日期。也许是这样的:

index_2017_08_11.json

这样就无需在 CloudFront 端使缓存失效。由于要访问这些新对象,您需要提供新 URL,因此旧的 CloudFront 缓存不会成为问题。您可以使用S3 TTL 功能删除前一天的 S3 文件。

另一个选项是设置Expires缓存 HTTP 标头以设置缓存中的数据何时失效

Expires 标头字段允许您使用 RFC 2616,超文本传输​​协议 -- HTTP/1.1 第 3.3.1 节,完整日期中指定的格式指定到期日期和时间,例如:Sat, 27 Jun 2015 23:59:59 GMT

您可以在 API Gateway 中设置此标头以指定对象何时应失效。

由于数据将是一天的静态数据,我怎么能不为 DynamoDB 运行的额外时间付费

如果数据是静态的,您能否将其存储在 S3 中并使用 API Gateway 从 S3 而不是 DynamoDB 提供数据?

于 2017-07-25T10:34:39.850 回答