我正在开发一个AWS函数,该函数目前进行了数百次API调用,但在投入生产时,它将生成数十万次。问题是我不能在那个比例上测试。
我使用异步模块使用async.eachLimit执行api调用,以便限制并发性(我目前将其设置为300)。
我不明白的是AWS Lambda的极限。以下是医生们所说的话:
AWS资源限制每次调用
据我所知,Node.js是单线程的,所以我不认为我会超过这个限制。我不使用子进程,异步库在这方面也不太好。
现在,关于这些文件描述符,我的函数严格地调用AWS的其余API,而且我从不将其写入磁盘,因此我不认为我正在使用它们。
AWS的另一个重要限制是执行时间和占用的内存。对于每一次执行,都有非常清楚的报告,我非常清楚何时接近它们,所以现在让我们忽略这些。
有一点背景:
我的功能的确切性质是,每次体育比赛开始时,我都需要订阅所有的移动设备到适当的SNS主题,所以基本上我要调用我们自己的MySQL数据库,然后重复调用AWS端点。
所以问题是..。
在这种情况下,我可以在AWS Lambda中将异步的并发推到多远呢?有什么实际的限制或其他可能发挥作用,我没有考虑?
发布于 2017-08-04 19:34:18
据我所知,Node.js是单线程的,所以我不认为我会超过这个限制。我不使用子进程,异步库在这方面也不太好。
Node.js是事件驱动的,而不是单线程的。
Javascript引擎在单个线程(事件循环)上运行,并将I/O操作委托给处理其线程池和异步操作的内部库(利布夫)。
async不会单独打开子进程,但是在幕后,无论您是发出HTTP请求还是与文件系统交互,您都会将这些操作委托给libuv。
换句话说,您已经用资源限制很好地回答了您自己的问题:
在这种情况下,我可以在AWS Lambda中将异步的并发推到多远呢?有什么实际的限制或其他可能发挥作用,我没有考虑?
AWS资源限制每次调用
很难说libuv是否会为每个I/O操作打开一个新线程,因此,您可能会比上面列出的数字稍微多一点。但是,在达到这些限制之前,您可能会耗尽内存。
底线是不,您将无法在单个lambda执行中进行数十万次调用。
关于您的函数的上下文,取决于您的工作需要运行的频率,您可能希望将您的lambda重构为多个执行(它也会运行得更快),或者让它在由lambda触发的自动缩放的EC2上运行。
https://stackoverflow.com/questions/45513316
复制相似问题