无服务器应用程序中的缓存失效
Cache invalidation in serverless applications
我正在尝试使用 AWS lambda、API 网关和 Dynamo 作为数据存储来实现具有 GET 和 PUT API 的用户服务
GET API 将获取给定用户 ID 的数据,PUT 将更新给定用户 ID 的用户详细信息
我的要求是
由于 GET API 上的吞吐量很大,我需要缓存 API 响应,以便在后续请求中减少响应时间。缓存也需要有一个 TTL。
任何对同一用户 ID 的成功放置请求都会使缓存失效,后续的 GET 请求将从数据库中获取并再次缓存它
我可能会使用 redis 集群进行缓存。但这可能会增加额外的 VPC 调用开销
问题:
- 我正在使用 AWS lambda 使用无服务器框架来实现。我应该如何设计缓存层?
- 可能的解决方案包括 API 网关缓存 - 但在这种方法中,我将如何使缓存无效,以防更新请求
您可以在 API 网关 层缓存并通过向 API 发送 Cache-Control: max-age=0
header 使缓存无效网关(例如,来自在 PUT 请求期间更改 DynamoDB 记录的 Lambda)。您需要授予 specific IAM permissions 才能正常工作。请记住,您每月只能免费使 1000 个请求无效;之后,您需要为每条无效路径支付 0.005 美元。
CloudFront 具有类似的缓存和失效选项,但您可能可以直接从 API 网关获得所有相同的缓存选项。
另一种选择是 cache at the DynamoDB layer,使用 DynamoDB 加速器。它为 DynamoDB 请求提供了显着的检索改进,并为您处理失效。 Maintainability-wise,很难找到更好的选择。缺点是您不会像使用 CloudFront 或 API 网关缓存那样降低延迟。
最后,您还可以查看 ElastiCache,您可以从 Lambda 函数访问它。但是考虑到 writing/reading/invalidating 自己缓存的开销,从长远来看,其他选项可能更易于维护。
您可能会发现 AWS Caching Overview 有助于提出更多缓存方法,具体取决于您的需要。
我正在尝试使用 AWS lambda、API 网关和 Dynamo 作为数据存储来实现具有 GET 和 PUT API 的用户服务
GET API 将获取给定用户 ID 的数据,PUT 将更新给定用户 ID 的用户详细信息
我的要求是
由于 GET API 上的吞吐量很大,我需要缓存 API 响应,以便在后续请求中减少响应时间。缓存也需要有一个 TTL。
任何对同一用户 ID 的成功放置请求都会使缓存失效,后续的 GET 请求将从数据库中获取并再次缓存它
我可能会使用 redis 集群进行缓存。但这可能会增加额外的 VPC 调用开销
问题:
- 我正在使用 AWS lambda 使用无服务器框架来实现。我应该如何设计缓存层?
- 可能的解决方案包括 API 网关缓存 - 但在这种方法中,我将如何使缓存无效,以防更新请求
您可以在 API 网关 层缓存并通过向 API 发送 Cache-Control: max-age=0
header 使缓存无效网关(例如,来自在 PUT 请求期间更改 DynamoDB 记录的 Lambda)。您需要授予 specific IAM permissions 才能正常工作。请记住,您每月只能免费使 1000 个请求无效;之后,您需要为每条无效路径支付 0.005 美元。
CloudFront 具有类似的缓存和失效选项,但您可能可以直接从 API 网关获得所有相同的缓存选项。
另一种选择是 cache at the DynamoDB layer,使用 DynamoDB 加速器。它为 DynamoDB 请求提供了显着的检索改进,并为您处理失效。 Maintainability-wise,很难找到更好的选择。缺点是您不会像使用 CloudFront 或 API 网关缓存那样降低延迟。
最后,您还可以查看 ElastiCache,您可以从 Lambda 函数访问它。但是考虑到 writing/reading/invalidating 自己缓存的开销,从长远来看,其他选项可能更易于维护。
您可能会发现 AWS Caching Overview 有助于提出更多缓存方法,具体取决于您的需要。