我要提一下我的需要和我目前所拥有的一切,所以请容忍我。首先,一个lambda函数称为f1,当调用它时,它将从一个站点获得100个链接。这些链接中的大多数表示,大约95个与上次调用f1时相同,因此必须仅使用这5个“新”链接进行进一步处理。一种解决方案是将已经处理的链接写入dynamodb数据库,每次调用f1时,查询数据库并跳过这些链接。但是我发现“数据库读取”虽然以毫秒计是lambda运行时的两倍,尤其是在频繁调用f1和有一百万个已处理链接的情况下。所以我决定在redis中使用elasticache。
我很快发现,只有f1在同一个vpc上运行时,才能访问redis,因为f1需要访问internet,所以需要nat(我对网络不太了解),所以我按照指导方针建立了vpc和nat,使一切正常。我对性能改进感到高兴,几乎将预期的lambda成本降低了一半,达到每月30美元。但后来我发现,nat不包括在免费的一级,我必须支付近30美元每月只为nat。这对我来说并不理想,因为这个项目可以在几个月的发展,我觉得我付出了同样的金额计算只是为了互联网接入。
我想知道我是否犯了一些根本性的错误。我用弹力绷带对吗?有没有更好的方法同时访问redis和internet?有没有什么方法可以使我的堆栈结构不同,这样我就可以保留性能,而不必在空闲层结束后支付两倍的费用。也许再加一个lambda函数?我没有任何想法。任何微小的改进都将不胜感激。谢谢您。
1条答案
按热度按时间fv2wmkja1#
有很多方法可以实现这一点,而且所有这些方法都有一些权衡。您还可以考虑其他一些想法:
不使用vpc运行f1。它将直接连接到dynamodb而不需要nat,为您节省nat网关的成本。
在计算机上运行函数
micro
ec2示例而不是lambda,并将链接查找持久化到本地磁盘上的某个文件,甚至本地redis。由于所有的无服务器宣传,我认为人们有时高估了简单运行操作系统的难度(和稳定性)。管理起来并不难,设置备份也很容易,根据可用性要求和其他需要,这可能是一种选择。将链接数据保存到s3,并设置一个vpc端点到s3网关端点。不确定它是否能满足你的需要。