通过CloudFormation,我有一个设置,包括DynamoDB表,DAX,VPC,Lambdas(生活在VPC中),安全组(允许访问端口8111),等等。
一切正常,除非它没有。
我可以99%的时间从我的VPC和Lambdas访问DAX。除了偶尔他们得到NoRouteException错误...看似随机。这是CloudWatch针对单个Lambda函数的输出,每次执行完全相同的操作(DAX get)。注意它是如何工作的,失败的,然后再次工作:
compile 'com.google.android.gms:play-services-safetynet:11.6.2'
任何想法可能是什么?
它可能不是VPC和安全访问,因为9/10次访问完全没问题。我有各种各样的CIDR IP,所以我不认为它与EIN配置有关...但还有什么?
我唯一的提示是初始错误,表明"在群集刷新期间捕获异常"。什么是"群集刷新"怎么会导致这些失败?
答案 0 :(得分:1)
“群集刷新”是DAX客户端使用的后台进程,用于确保其对群集成员身份状态的了解与实际情况相符,因为DAX客户端负责将请求路由到群集中的相应节点。
通常刷新失败不是问题,因为群集状态很少更改(因此可以重用现有状态),但在启动时,客户端“阻塞”以获取初始成员资格列表。如果失败,则客户端无法继续,因为它不知道哪个节点可以处理哪些请求。
在Lambda冷启动期间创建VPC连接的ENI可能会有轻微延迟,这意味着客户端无法在初始化期间到达群集(因此,“无路由到主机”)。一个Lambda容器正在运行它应该不是问题(如果网络打嗝,你可能仍会在日志中得到异常,但它不应该影响任何东西)。
如果它只是在冷启动期间发生,稍微延迟后重试应该可以解决它。