AWS dax 稳定性问题

Mar*_*inS 5 amazon-web-services amazon-dynamodb-dax

我正在尝试将 DAX 引入我们的架构,但到目前为止尚未成功。通过 lambda 发生与 dax 的连接,完成的设置类似于 AWS 文档中的示例。Lambda 和 Dax 位于同一个 vpc 中,它们大部分时间都可以看到对方,并且 dax 正在返回响应。Dax 还开放了 8111 端口。

然而,运行几次回归测试后,cloudwatch 中开始出现错误。最常见的是:

  • “无法从 [daxurlhere] (10.0.1.177,10.0.1.25,10.0.2.11) 拉取:超时错误:10000 毫秒后连接超时”
  • 错误:NoRouteException:无法解析地址:[{“host”:“[daxurlhere]”,“port”:8111}]
  • 集群刷新期间错误捕获异常:DaxClientError:NoRouteException:无法解析地址:[{“host”:“[daxurlhere]”,“port”:8111}]
  • 错误无法解析 [daxurl]:错误:queryA ECONNREFUSED [daxurl]

当这些错误发生时,它们会破坏我们的一些回归测试。有趣的是,他们并不持久,而且很难跟踪问题。

任何建议将非常受欢迎!

ram*_*lli 1

看来你的配置没问题。检查以下步骤:

1. 确保你没有强烈地持续阅读

来自 AWS文档

DAX 本身无法提供强一致性读取,因为它与 DynamoDB 没有紧密耦合。因此,从 DAX 进行的任何后续读取都必须是最终一致的读取

看到这段代码结果强一致读取并使连接不稳定

const parameters = {
      TableName: 'Travels',     
      ConsistentRead: false,
      ExpressionAttributeNames: {
        '#createdAt': 'createdAt',        
      },
      ExpressionAttributeValues: {
        ':createdAt': Date.now(),  -----> Look at this       
      },
      KeyConditionExpression: '#createdAt >= :createdAt',          
    };

    
    const endpoint = DAX_CLUSTER_ENDPOINT;
    const daxService = new AmazonDaxClient({ endpoints: [endpoint], region });
    const daxClient = new AWS.DynamoDB.DocumentClient({ service: daxService });
    response = await daxClient.query(parameters).promise(); 
Run Code Online (Sandbox Code Playgroud)

Date.now()不会每次都产生相同的值。如果请求与先前的请求不完全匹配,则它不会是cache hit. 检查大请求的参数,如限制、投影表达式、独占启动键;

2. 检查集群监视器 - Cloudwatch 查询/扫描缓存命中、缓存数据的集群。

3.其他有用的链接: