【问题标题】:Couchbase Server NodeJS SDK Cluster.openbucket Takes 58 Seconds to Open a ConnectionCouchbase 服务器 NodeJS SDK Cluster.openbucket 需要 58 秒来打开连接
【发布时间】:2017-12-01 23:52:00
【问题描述】:

我正在使用 NodeJS SDK。在下面的基本示例中,我打开一个存储桶来插入一条记录。我已经将每个方法都放入了一个承诺中,强制它们一个接一个地运行(按顺序),这样我就可以测量每个方法的运行时间。

我的操作系统:Ubuntu 16.04

'use strict';

const couchbase = require('couchbase');
const cluster = new couchbase.Cluster('couchbase://localhost');
const uuid = require('uuid/v4');

console.time('auth');
cluster.authenticate('administrator', 'adminadmin');
console.timeEnd('auth');

function open() {
    return new Promise((resolve, reject) => {
        console.time('open');

        let bucket = cluster.openBucket('test', function (err) {
            if (err) {
                console.error(err);
                reject(err);
            }            
            resolve(bucket);
        });
    });
}

function insert(bucket, obj) {
    return new Promise((resolve, reject) => {
        console.time('upsert');

        bucket.upsert(`uuid::${blog.name}`, blog, function (err, result) {            
            if (err) {
                console.log(err);
                reject(err);                
            }
            resolve(bucket);
        });
    });
}

function dc(bucket) {    // disconnect
    return new Promise((resolve, reject) => {       
        console.time('dc');

        bucket.disconnect();
        resolve('ok');
    });
}

// data to insert
let blog = {
    id: uuid(),
    name: 'Blog A',
    posts: [
        {
            id: uuid(),
            title: 'Post 1',
            content: 'lorem ipsum'
        }
    ]
};

open().then((bucket) => {
    console.timeEnd('open');

    insert(bucket, blog).then((bucket) => {        
        console.timeEnd('upsert');

        dc(bucket).then((res) => {            
            console.timeEnd('dc');
            console.log(res);
        });
    });
});

输出是:

auth: 0.237ms
open: 58117.771ms <--- this shows the problem
upsert: 57.006ms
dc: 0.149ms
ok

我运行了 sdk-doctor。它给了我两行值得一提的:

  1. “警告:您的连接字符串仅指定了一个主机。您应该考虑将集群中的其他静态节点添加到此列表中,以提高应用程序的容错能力”
  2. “INFO:获取集群信息失败(状态码:401)”

总结如下:

总结: [警告] 您的连接字符串仅指定一个主机。您应该考虑将集群中的其他静态节点添加到此列表中,以提高应用程序的容错能力

有人帮忙吗?

【问题讨论】:

    标签: node.js couchbase couchbase-nodejs-sdk


    【解决方案1】:

    根据 Couchbase 论坛中的this answer,看来我的 DNS 服务器配置不正确。

    您的 DNS 服务器似乎配置不正确。作为正常引导过程的一部分,我们尝试解析提供的主机名的 SRV 记录,看起来您的 DNS 服务器在尝试执行此操作时可能会超时,从而导致连接时出现大量延迟。测试该理论的一种快速方法是在引导列表中添加一个额外的主机名,以取消我们的 DNS-SRV 策略中的连接字符串的资格(例如,使用:couchbase://localhost,invalidhostname)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      • 2019-03-08
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      相关资源
      最近更新 更多