Amazon web services 什么';调用大容量AWS lambda函数的最佳方法是什么?

Amazon web services 什么';调用大容量AWS lambda函数的最佳方法是什么?,amazon-web-services,aws-lambda,aws-sdk,Amazon Web Services,Aws Lambda,Aws Sdk,我想到一个可能需要在短时间内调用大量Lambda函数的服务。e、 作为一个聊天机器人,在一个非常繁忙的频道中,用lambda编写的机器人会在每一条新消息中被调用。Lambda似乎是一个很好的解决方案 我用AWS SDK编写了一个简单的测试代码: var lambda = new AWS.Lambda({apiVersion: '2015-03-31'}); function invoke() { var start = new Date(); var params = { Fu

我想到一个可能需要在短时间内调用大量Lambda函数的服务。e、 作为一个聊天机器人,在一个非常繁忙的频道中,用lambda编写的机器人会在每一条新消息中被调用。Lambda似乎是一个很好的解决方案

我用AWS SDK编写了一个简单的测试代码:

var lambda = new AWS.Lambda({apiVersion: '2015-03-31'});

function invoke() {
  var start = new Date();
  var params = {
    FunctionName: 'test', /* required */
    InvocationType: 'RequestResponse',
    LogType: 'None',
    Payload: '{}',
  };
  lambda.invoke(params, function(err, data) {
    if (err) {
      console.log(err, err.stack); // an error occurred
    }
    else  {
      var duration = new Date() - start;
      console.info("Execution time: %dms", duration);
    }
  });
}

for (var i = 0; i < n; i++) {
  invoke();
}
但是,如果我以大批量运行,延迟会变得非常大,并且变得越来越大:

$ node test.js 1000
Execution time: 3569ms
Execution time: 4418ms
Execution time: 3571ms
Execution time: 4505ms
Execution time: 3661ms
Execution time: 3322ms
Execution time: 3645ms
Execution time: 3654ms
Execution time: 3651ms
Execution time: 4531ms
...
Execution time: 71851ms
Execution time: 70879ms
Execution time: 71777ms
我知道AWS-SDK实际上正在发出HTTP请求来调用lambda,因此AWS将限制并发连接,请求可能会排队并减慢它们的速度是有道理的。因此,似乎不可能以这种方式调用大量lambda…:(

我将通过发送SNS来测试它,但是不确定这是否是一个好的解决方案,因为我希望从那些lambda函数中得到结果

更新:我还将代码放在部署到同一区域的另一个lambda函数中,因此我认为网络延迟最小,看起来肯定更快,但似乎有相同的问题

START RequestId: 7bd3339d-8986-11e5-85d1-67b32d2e2f9c Version: $LATEST
2015-11-12T21:44:00.923Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #0
2015-11-12T21:44:01.003Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #1
2015-11-12T21:44:01.005Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #2
2015-11-12T21:44:01.063Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #3
2015-11-12T21:44:01.065Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #4
2015-11-12T21:44:01.122Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #5
2015-11-12T21:44:01.123Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #6
2015-11-12T21:44:01.124Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #7
2015-11-12T21:44:01.124Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #8
2015-11-12T21:44:01.182Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #9
2015-11-12T21:44:01.182Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Execution time: 753ms
END RequestId: 7bd3339d-8986-11e5-85d1-67b32d2e2f9c
REPORT RequestId: 7bd3339d-8986-11e5-85d1-67b32d2e2f9c  Duration: 873.46 ms Billed Duration: 900 ms     Memory Size: 128 MB Max Memory Used: 14 MB  

我的问题是,有没有办法在很短的时间内调用大容量lambda?

如果您将
调用类型
请求响应
切换到
事件
,那么您的函数将运行调用以异步调用。

如果您将
调用类型
请求响应
切换到
事件
,则您的函数将运行调用以异步调用。

您需要异步调用lambda(如@Matt Beckman所示),您需要增加。如果您必须维护状态或检索返回的结果,则需要找到另一种方法,例如附加到SQS队列或DynamoDB表。

您需要异步调用lambda(如@Matt Beckman所示),您需要增加。如果您必须维护状态或检索返回的结果,那么您需要找到另一种方法,例如附加到SQS队列或DynamoDB表。

我想从lambda函数获取结果,我认为InvocationType事件不会得到结果,我必须找到另一种方法来获取结果返回?我想从lambda函数返回结果,我认为InvocationType事件不会得到结果,我必须找到另一种方法返回结果?
START RequestId: 7bd3339d-8986-11e5-85d1-67b32d2e2f9c Version: $LATEST
2015-11-12T21:44:00.923Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #0
2015-11-12T21:44:01.003Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #1
2015-11-12T21:44:01.005Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #2
2015-11-12T21:44:01.063Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #3
2015-11-12T21:44:01.065Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #4
2015-11-12T21:44:01.122Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #5
2015-11-12T21:44:01.123Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #6
2015-11-12T21:44:01.124Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #7
2015-11-12T21:44:01.124Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #8
2015-11-12T21:44:01.182Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Lambda invoke #9
2015-11-12T21:44:01.182Z    7bd3339d-8986-11e5-85d1-67b32d2e2f9c    Execution time: 753ms
END RequestId: 7bd3339d-8986-11e5-85d1-67b32d2e2f9c
REPORT RequestId: 7bd3339d-8986-11e5-85d1-67b32d2e2f9c  Duration: 873.46 ms Billed Duration: 900 ms     Memory Size: 128 MB Max Memory Used: 14 MB