【发布时间】:2018-01-12 18:38:39
【问题描述】:
我正在开发一个 AWS Lambda 函数,该函数目前进行了数百次 API 调用,但在投入生产时它会调用数十万次。问题是我无法以这种规模进行测试。
我正在使用异步模块通过async.eachLimit 执行我的api 调用,以便我可以限制并发(我目前将其设置为300)。
我不明白的是 AWS Lambda 的限制。 the docs 是这样说的:
每次调用的 AWS Lambda 资源限制
- 文件描述符数:1,024
- 进程和线程数(合计):1,024
据我了解,Node.js 是单线程的,所以我认为我不会超过这个限制。我没有使用子进程,并且异步库在这方面也不是很好。
现在关于这些文件描述符,我的函数严格调用 AWS 的其余 API,而且我从不写入磁盘,所以 我不认为我正在使用它们。
其他重要的 AWS Lambda 限制是执行时间和消耗的内存。每次执行时都会非常清楚地报告这些内容,并且我完全知道何时接近它们,所以我们现在先忽略这些。
一点上下文:
我的函数的确切性质是,每次体育比赛开始时,我都需要为所有移动设备订阅适当的 SNS 主题,所以基本上我会重复调用我们自己的 MySQL 数据库,然后是 AWS SNS 端点。
所以问题是……
在这种情况下,我可以将 AWS Lambda 中的异步并发推送到多远?是否有任何实际限制或其他我没有考虑的可能发挥作用的东西?
【问题讨论】:
-
你的意思是单次 lambda 执行会进行数十万次调用吗?还是多个 lambda?
-
@LifeQuery 一个 Lambda 执行使用异步在其中进行数千次调用。所以我的后端调用了 Lambda 函数,而 IT 进行了数千次 API 调用。
-
node.js 实际上不是单线程的。 javascript 在单个线程中执行,但是当您执行 IO(例如网络请求和磁盘操作)时,它实际上会在单独的线程中执行。因此,如果您要使用 async.map 并为每个项目发出网络请求,它可能会创建与您发出的请求一样多的线程。
标签: node.js concurrency aws-lambda async.js