Aws lambda 间歇性DynamoDB DAX错误:群集刷新期间发生NOROUTEXCEPTION

Aws lambda 间歇性DynamoDB DAX错误:群集刷新期间发生NOROUTEXCEPTION,aws-lambda,amazon-dynamodb,amazon-cloudformation,amazon-dynamodb-dax,Aws Lambda,Amazon Dynamodb,Amazon Cloudformation,Amazon Dynamodb Dax,通过CloudFormation,我有一个包括DynamoDB表、DAX、VPC、Lambdas(生活在VPC中)、安全组(允许访问端口8111)等的设置 一切都正常,除了不正常的时候 我99%的时间都可以从我的VPC Lambdas访问DAX。除了偶尔出现异常错误。。。似乎是随机的。下面是CloudWatch每次执行完全相同操作的单个Lambda函数的输出(一个DAX get)。注意它是如何工作的、失败的,然后再次工作的: /aws/lambda/BigOnion_accountGet STA

通过CloudFormation,我有一个包括DynamoDB表、DAX、VPC、Lambdas(生活在VPC中)、安全组(允许访问端口8111)等的设置

一切都正常,除了不正常的时候

我99%的时间都可以从我的VPC Lambdas访问DAX。除了偶尔出现异常错误。。。似乎是随机的。下面是CloudWatch每次执行完全相同操作的单个Lambda函数的输出(一个DAX get)。注意它是如何工作的、失败的,然后再次工作的:

/aws/lambda/BigOnion_accountGet START RequestId: 2b732899-f380-11e7-a650-cbfe0f7dfb3d Version: $LATEST
/aws/lambda/BigOnion_accountGet END RequestId: 2b732899-f380-11e7-a650-cbfe0f7dfb3d
/aws/lambda/BigOnion_accountGet REPORT RequestId: 2b732899-f380-11e7-a650-cbfe0f7dfb3d  Duration: 58.24 ms  Billed Duration: 100 ms     Memory Size: 768 MB Max Memory Used: 48 MB
/aws/lambda/BigOnion_accountGet START RequestId: 3b63a928-f380-11e7-a116-5bb37bb69bee Version: $LATEST
/aws/lambda/BigOnion_accountGet END RequestId: 3b63a928-f380-11e7-a116-5bb37bb69bee
/aws/lambda/BigOnion_accountGet REPORT RequestId: 3b63a928-f380-11e7-a116-5bb37bb69bee  Duration: 35.01 ms  Billed Duration: 100 ms     Memory Size: 768 MB Max Memory Used: 48 MB
/aws/lambda/BigOnion_accountGet START RequestId: 4b7fa7f2-f380-11e7-a0c8-513a66a11e7a Version: $LATEST
/aws/lambda/BigOnion_accountGet 2018-01-07T07:56:40.643Z    3b63a928-f380-11e7-a116-5bb37bb69bee    caught exception during cluster refresh: { Error: NoRouteException: not able to resolve address
    at DaxClientError (/var/task/index.js:545:5)
    at AutoconfSource._resolveAddr (/var/task/index.js:18400:23)
    at _pull (/var/task/index.js:18421:20)
    at _pullFrom.then.catch (/var/task/index.js:18462:18)
  time: 1515311800643,
  code: 'NoRouteException',
  retryable: true,
  requestId: null,
  statusCode: -1,
  _tubeInvalid: false,
  waitForRecoveryBeforeRetrying: false }
/aws/lambda/BigOnion_accountGet 2018-01-07T07:56:40.682Z    3b63a928-f380-11e7-a116-5bb37bb69bee    Error: NoRouteException: not able to resolve address
    at DaxClientError (/var/task/index.js:545:5)
    at AutoconfSource._resolveAddr (/var/task/index.js:18400:23)
    at _pull (/var/task/index.js:18421:20)
    at _pullFrom.then.catch (/var/task/index.js:18462:18)
/aws/lambda/BigOnion_accountGet END RequestId: 4b7fa7f2-f380-11e7-a0c8-513a66a11e7a
/aws/lambda/BigOnion_accountGet REPORT RequestId: 4b7fa7f2-f380-11e7-a0c8-513a66a11e7a  Duration: 121.24 ms Billed Duration: 200 ms     Memory Size: 768 MB Max Memory Used: 48 MB
/aws/lambda/BigOnion_accountGet START RequestId: 5b951673-f380-11e7-9818-f1effc29edd5 Version: $LATEST
/aws/lambda/BigOnion_accountGet END RequestId: 5b951673-f380-11e7-9818-f1effc29edd5
/aws/lambda/BigOnion_accountGet REPORT RequestId: 5b951673-f380-11e7-9818-f1effc29edd5  Duration: 39.42 ms  Billed Duration: 100 ms     Memory Size: 768 MB Max Memory Used: 48 MB
/aws/lambda/BigOnion_siteCreate START RequestId: 0ec60080-f380-11e7-afea-a95d25c6e53f Version: $LATEST
/aws/lambda/BigOnion_siteCreate END RequestId: 0ec60080-f380-11e7-afea-a95d25c6e53f
/aws/lambda/BigOnion_siteCreate REPORT RequestId: 0ec60080-f380-11e7-afea-a95d25c6e53f  Duration: 3.48 ms   Billed Duration: 100 ms     Memory Size: 768 MB Max Memory Used: 48 MB
有什么想法吗

这大概不是VPC和安全访问,因为9/10倍的访问是完美的。我有一个广泛的苹果酒IP,所以我不认为这是任何有关的EIN供应。。。但还有什么

我得到的唯一提示是初始错误,它表示“在集群刷新期间捕获异常”。什么是“群集刷新”以及它如何导致这些故障?

DAX客户端使用“群集刷新”作为后台进程,以确保其对群集成员状态的了解与实际情况相符,因为DAX客户端负责将请求路由到群集中的适当节点

通常情况下,刷新失败不是问题,因为集群状态很少更改(因此可以重用现有状态),但在启动时,客户机“阻塞”以获取初始成员列表。如果失败,客户端将无法继续,因为它不知道哪个节点可以处理哪些请求

在Lambda冷启动期间,创建VPC连接的ENI可能会有轻微延迟,这意味着客户端在初始化期间无法到达群集(因此,“没有到主机的路由”)。Lambda容器正在运行的情况下,它不应该是一个问题(如果出现网络故障,您可能仍然会在日志中看到异常,但它不应该影响任何事情)


如果这只发生在冷启动期间,在稍微延迟后重试应该可以解决问题。

Hi@jeff hardy:“无路线”在这种情况下似乎与冷启动无关(我们在函数的整个生命周期中会间歇性地看到错误)。新DAX群集的前几个小时通常没有错误;然后缓慢地构建约50%的DAX调用,但“无路由”失败。经过40个小时的开发,我们要放弃这艘船了。我们认为问题可能在于Amazon的Node.js Amazon dax客户端中套接字连接池管理不善,可能无法正确重用/清理连接。(代码中有很多待办事项和“坏”的符号。)希望新版本很快就会出现?所以“无路由”错误的数量会增加,但至少部分工作正常?您收到的是失败的请求还是日志中的消息?嗨@jeff hardy:是的,部分工作正常。正如我所提到的,当CF堆栈在一个新区域中新旋转一个小时左右时,它将可靠地工作,然后错误开始增加,直到几小时后达到50%或更多。我们在日志中得到了“无路由”错误(有时但不总是带有“集群刷新”注释);我们总是同时收到失败的请求。我们在amazon dax客户端中添加了警告,并看到大量连接重试(没有日志错误)。。。有时它们最终成功,有时多次失败导致错误日志/请求失败。