【发布时间】:2020-06-20 22:01:02
【问题描述】:
我将提及我的需求以及我目前拥有的东西,所以请耐心等待。首先,一个 lambda 函数说 F1 在调用时会从一个站点获得 100 个链接。这些链接中的大多数说大约 95 个与上次调用 F1 时相同,因此必须仅对这 5 个“新”链接进行进一步处理。一种解决方案是将已经处理的链接写入 Dynamodb 数据库,并且每次调用 F1 时,查询数据库并跳过这些链接。但是我发现“数据库读取”虽然以毫秒为单位使 lambda 运行时间增加了一倍,尤其是如果 F1 被频繁调用并且如果有一百万个已处理的链接。所以我决定将 Elasticache 与 Redis 一起使用。
我很快发现只有当 F1 在同一个 VPC 上运行时才能访问 Redis,并且因为 F1 需要访问互联网,所以需要 NAT。 (我对网络了解不多)所以我按照指南设置了 VPC 和 NAT 并让一切正常工作。我对性能改进感到高兴,几乎将预期的 lambda 成本降低了一半,降至每月 30 美元。但后来我发现 NAT 不包含在免费套餐中,我必须每月为 NAT 支付近 30 美元。这对我来说并不理想,因为这个项目可能需要几个月的开发时间,而且我觉得我支付与 compute 相同的金额只是为了 internet 访问。
我想知道我是否犯了任何基本错误。我是否以正确的方式使用 Elasticache?有没有更好的方法可以同时访问 Redis 和 Internet?有没有办法以不同的方式构建我的堆栈,以便在免费层结束后我保持性能而无需支付两倍的金额。也许添加另一个 lambda 函数?我没有任何想法。非常感谢任何 分钟 改进。谢谢。
【问题讨论】:
-
也许先建立另一个
pre-F1来过滤掉重复的链接?所以你可以避免在这个解决方案中添加更多的层? -
我正在使用名为 colly 的 GoLang scraper,它内置了对 Redis 的支持,因此如果它在同一个函数中是最佳的。我不介意再增加一层,只要它比我使用 DynamoDB 获得的性能更好。会试试这个。
-
我也在考虑另一种潜在的解决方案,在 EC2 上运行 Redis 服务器并从 lambda 访问它。
标签: amazon-web-services redis aws-lambda amazon-dynamodb amazon-vpc