Use Couchbase hosted in Amazon from a client hoste

2019-07-11 13:00发布

问题:

I'm trying to use a Couchbase cluster hosted in Amazon EC2. The client I'm trying to use it from is hosted in Microsoft Azure.

The performance is terrible, in ~10% of the time opening a bucket takes a lot of time.
This is my configuration:

<couchbaseClients>
  <couchbase useSsl="false" operationLifespan="1000">
    <servers>
      <!-- Ip addresses obscured... -->
      <add uri="http://1.1.1.1:8091/pools"></add>
      <add uri="http://1.1.1.2:8091/pools"></add>
    </servers>
    <buckets>
      <add name="default" useSsl="false" operationLifespan="1000">
      </add>
    </buckets>
  </couchbase>
</couchbaseClients>

This is the code I'm testing with:

var cluster = new Cluster("couchbaseClients/couchbase");

using (var bucket = cluster.OpenBucket("bucketname")) // This sometimes takes 3-50 seconds.
{
    var obj = new TestClass { };

    // This is fast
   var result = bucket.Insert(new Document<TestClass> { Content = obj, Expiry = 300000, Id = Guid.NewGuid().ToString() });
}

Opening the Couchbase bucket sometimes (not always) takes a lot of time, anywhere between 3-50 seconds. It happens often enough that it makes it completely unusable.

When it happens, I can see the following error message in the Couchbase logs:

2015-12-10 14:18:57,644 [1] DEBUG Couchbase.Configuration.Server.Providers.ConfigProviderBase - Bootstrapping with 1.1.1.2:11210
2015-12-10 14:19:07,660 [1] INFO Couchbase.IO.ConnectionPool`1[[Couchbase.IO.Connection, Couchbase.NetClient, Version=2.2.2.0, Culture=neutral, PublicKeyToken=05e9c6b5a9ec94c2]] - Node 1.1.1.2:11210 failed to initialize, reason: System.Net.Sockets.SocketException (0x80004005): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
   at Couchbase.IO.DefaultConnectionFactory.<GetGeneric>b__0[T](IConnectionPool`1 p, IByteConverter c, BufferAllocator b)
   at Couchbase.IO.ConnectionPool`1.Initialize()

Note that 10 seconds are passed there. (I obscured the IP-addresses.)

What can cause this problem and how could I troubleshoot?
This seems to be Azure-specific, I could not reproduce this on my local dev machine or on a machine hosted in the Google cloud. However, it is consistently happening on two different Azure VMs.