我正在使用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。它给了我两行值得一提:
,摘要是:
要点: [WARN]您的连接字符串仅指定单个主机。您应该考虑将群集中的其他静态节点添加到此列表中,以提高应用程序的容错能力
有人请帮忙吗?
答案 0 :(得分:0)
根据Couchbase论坛中的this answer,似乎我的DNS服务器配置不正确。
看起来您的DNS服务器可能配置不正确。作为正常引导程序的一部分,我们尝试解析所提供的主机名的SRV记录,看起来您尝试执行此操作时DNS服务器可能会超时,从而导致连接时出现大量延迟。测试此理论的一种快速方法是在引导列表中添加一个额外的主机名,以取消DNS-SRV策略中的连接字符串的资格(例如,使用:couchbase:// localhost,invalidhostname)。