AWS Lambda执行模型(线程?)

时间:2017-06-14 11:21:05

标签: java aws-lambda

我正在进行样本测试,通过客户端构建调用lambda函数,如下所示:

LambdaInvokerFactory.builder
    .lambdaClient(AWSLambdaClientBuilder.defaultClient)
    .build(classOf[HelloLambdaClient])

每当我连续执行同步执行时,我的lambda初始化启动随机变量。此随机值以Lambda响应打印(如下所示)。 Lambda代码具有睡眠功能,可以执行~2s。这是输出:

  

请求返回成功:b3059f87-50f1-11e7-9f5d-ed6e02ee1217。随机值为:5861335772453319884剩余ms:28498 ms VALUE IS:10
  成功返回请求:b3f41e37-50f1-11e7-82fb-3750155d81e4。随机值为:5861335772453319884剩余ms:28498 ms VALUE IS:11
  成功返回请求:b4e4243d-50f1-11e7-8abb-ad83d8f0c65c。随机值为:5861335772453319884剩余ms:28498 ms VALUE IS:12
  成功返回请求:b5d33eef-50f1-11e7-b89a-79ba5c4113d5。随机值为:5861335772453319884remaining ms:28498 ms VALUE IS:13
  成功返回请求:b6c31caf-50f1-11e7-86ab-cd495fa85bb3。随机值为:5861335772453319884remaining ms:28498 ms VALUE IS:14
  成功返回请求:b7b322bc-50f1-11e7-b7a3-f789b1e8355b。

我们清楚地看到我们有相同的JVM,同一个类响应每个请求(随机值总是相同的)。

现在,如果我在这些调用之间添加一些异步调用(InvocationType=Event) - 因此实际上有很多并发调用,输出就会像这里一样开始改变:

  

成功返回请求:1dd4caca-50ef-11e7-8a78-83ef7e890b67。随机值为:-18127642905056328剩余ms:28498 ms VALUE IS:21
  成功返回请求:1ec45ae6-50ef-11e7-b7ed-a77459f1846a。随机值为:-18127642905056328剩余ms:28498 ms VALUE IS:22
  成功返回请求:1fb54a81-50ef-11e7-94d2-97694951faa1。随机值为:-18127642905056328剩余ms:28498 ms VALUE IS:23
  成功返回请求:20b3332a-50ef-11e7-b99e-0955a3fdf5d0。随机值为:663265193956577535剩余ms:28498 ms VALUE IS:7

(上面的最后一次调用结束于另一个lambda实例,然后是之前的那个)。

每次进行并发呼叫时,它都具有相当的可重现性。

问题:

  • AWS Lambda的已知功能是将并发呼叫路由到不同的Lambda实例吗?
  • AWS Lambda是否为您提供类似的单线程保证,例如Akka为您提供演员(当您处理消息时,您保证在thread-safe环境中 - 至少在您自己引入多线程之前)?

0 个答案:

没有答案