4

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

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

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

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

任何建议都将受到欢迎!

4

1 回答 1

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(); 

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

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

3. 其他有用的链接:

于 2021-11-23T07:07:43.700 回答