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

问题描述 投票:3回答:1

我正在尝试使用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网关缓存 - 但是在这种方法中,如何使缓存包含更新请求无效
aws-lambda amazon-dynamodb aws-api-gateway serverless-framework serverless
1个回答
3
投票

您可以在API网关层缓存并通过向API网关发送Cache-Control: max-age=0标头来使缓存无效(例如,从在PUT请求期间更改DynamoDB记录的Lambda)。您需要授予specific IAM permissions才能正常工作。请注意,您每月只能免费提出1000个请求;在此之后,您将收取每条路径无效的$ 0.005。

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

另一种选择是cache at the DynamoDB layer,使用DynamoDB加速器。它为DynamoDB请求提供了重要的检索改进,并为您处理失效。可维护性,很难获得更好的选择。缺点是您不会像使用CloudFront或API Gateway缓存一样降低延迟。

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

您可能会发现AWS Caching Overview有助于提供更多缓存方法,具体取决于您的需求。

© www.soinside.com 2019 - 2024. All rights reserved.