无服务器应用程序中的缓存失效

Sur*_*ith 6 amazon-dynamodb aws-lambda aws-api-gateway serverless-framework serverless

我正在尝试使用 AWS lambda、API 网关和 Dynamo 作为数据存储来实现具有 GET 和 PUT API 的用户服务

GET API 将获取给定 userId 的数据,PUT 将更新给定 userId 的用户详细信息

我的要求是

  • 由于 GET API 的吞吐量很大,我需要缓存 API 响应,以便减少后续请求中的响应时间。缓存还需要有一个 TTL。

  • 对同一个 userId 的任何成功 put 请求都会使缓存无效,随后的 GET 请求将从 DB 中获取并再次缓存它

  • 我可能会使用 redis 集群进行缓存。但这可能会增加额外的 VPC 调用开销

题:

  • 我正在使用 AWS lambda 使用无服务器框架进行实现。我应该如何设计缓存层?
  • 可能的解决方案包括 API 网关缓存 - 但在这种方法中,我将如何在更新请求的情况下使缓存无效

Tom*_*Tom 6

您可以在API Gateway层进行缓存,并通过向Cache-Control: max-age=0API Gateway发送标头(例如,来自在 PUT 请求期间更改 DynamoDB 记录的 Lambda)来使缓存无效。您需要授予特定的 IAM 权限才能使其工作。请记住,您每月只能免费使 1000 个请求无效;之后,您需要为每条无效路径支付 0.005 美元。

CloudFront具有类似的缓存和失效选项,但您可能可以直接从 API Gateway 获得所有相同的缓存选项。

另一种选择是使用DynamoDB Accelerator在 DynamoDB 层进行缓存。它为 DynamoDB 请求提供了显着的检索改进并为您处理失效。在可维护性方面,很难找到更好的选择。缺点是您不会像使用 CloudFront 或 API 网关缓存那样降低延迟。

最后,您还可以查看ElastiCache,您可以从您的 Lambda 函数访问它。但考虑到自己写入/读取/使缓存失效的开销,从长远来看,其他选项可能更易于维护。

您可能会发现AWS 缓存概述有助于根据您的需要提出更多缓存方法。