Em *_* Ae 5 caching amazon-web-services amazon-dynamodb aws-api-gateway
我们有一个服务,其中inserts转化为dynamodb某些价值。为了这个问题,让我们说它的key:value对,即customer_id:customer_email。插入不会经常发生,一旦插入完成,该特定键就不会更新。
我们所做的就是创建它,提供了客户端库customer_id将获取customer_email的dynamodb。
鉴于customer_id数据是静态的,我们的想法是将缓存添加到表中,但我们不确定在以下用例中会发生什么
client_1使用我们的库来获取customer_email的customer_id = 2。not foundAPIGateway 将缓存此响应customer_id = 2了它的电子邮件 ID。该系统不知道此响应之前是否已缓存。它甚至不知道任何其他系统已获取此特定数据。customer_id当它被插入到 dynamo 中时,我们如何使这个特定的缓存无效您可以将请求发送到 API 端点,并带有Cache-Control: max-age=0将导致其刷新的标头。
这可能会使您的应用程序容易受到攻击,因为坏人可以简单地用大量流量淹没昂贵的端点并破坏您的服务器/数据库。为了防止这种情况,最好使用签名请求。
如果它对人们有用,这里是 .NET 代码来创建签名请求:
https://gist.github.com/secretorange/905b4811300d7c96c71fa9c6d115ee24
我们构建了一个 Lambda,它负责用更新的结果重新填充缓存。这是一个相当手动的过程,可重用的代码很少,但它确实有效。
Lambda 由应用程序本身根据应用程序需求触发。例如,在 CRUD 操作中,在特定资源上成功执行 POST、PATCH 和 DELETE 时会触发 Lambda,以清除一般 GET 请求(即成功GET /books时清除POST /book)。
不幸的是,如果您有一个带有服务器端分页表的视图,您将面临各种各样的问题,因为无效/books是不够的,因为您实际上可能有/books?page=2,/books?page=3等等......一场噩梦!
我相信 APIG 应该允许对缓存条目进行更精细的控制,否则许多用例都不会被涵盖。如果他们允许cache group为每个请求选择一个根就足够了,这样我们就可以按组而不是按单个请求管理缓存条目(恕我直言,这也不太常见)。
您看过这个https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html吗?有办法使整个缓存或特定缓存条目无效
| 归档时间: |
|
| 查看次数: |
6960 次 |
| 最近记录: |