2017-12-01 15 views
0

NodeJS SDKを使用しています。次の基本サンプルでは、​​単一のレコードを挿入するバケットを開いています。私は、それぞれのメソッドを順番に実行するように約束していますので、各メソッドの実行時間を測定できます。Couchbase Server NodeJS SDK Cluster.openbucketが接続を開くために58秒かかる

マイOS: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-医師を走りました。

  1. "警告:接続文字列には1つのホストしか指定されていません。クラスタ情報を盗んに失敗しました:あなたは、あなたのアプリケーションのフォールトトレランス」
  2. 『INFO改善するために、このリストにあなたのクラスタからの追加の静的ノードを追加することを検討すべきである(状態コード:401)』

をし、概要は次のとおりです。

概要: [WARN]接続文字列には1つのホストのみが指定されています。クラスタの静的ノードをこのリストに追加することを検討して、アプリケーションの耐障害性を向上させることを検討する必要があります。

誰でもお手伝いしますか?

答えて

0

Couchbaseフォーラムのthis answerによると、私のDNSサーバーが正しく構成されていないようです。

DNSサーバーが不適切に構成されているように見えます。通常のブートストラップ手順の一環として、提供されているホスト名のSRVレコードを解決しようとしています。これを行うときにDNSサーバーがタイムアウトする可能性があり、接続時にかなりの遅延が発生します。この理論を簡単にテストするには、ブートストラップリストに追加のホスト名を追加して、DNS-SRVポリシー(たとえば、couchbase:// localhost、invalidhostname)から接続文字列を失効させることです。

関連する問題