CouchDB复制build议使用拓扑结构

我正在研究在不同国家/地区使用七个CouchDB服务器(A,B,C,D,E,F,G)的系统的build议。 这个想法是configuration多主复制,使所有的数据可以保持同步。

我可以configuration从每个服务器到其他服务器的双向复制

Mathematica图形

但我怀疑这可能会导致太多的连接,可能会增加使用的带宽,从而降低性能(是这种情况?)。

所以我的下一个想法是像一个戒指configuration他们:

Mathematica图形

现在我们有更less的连接,并且每个节点连接到两个服务器时仍然有冗余。 我的特定情况的问题是,我们不希望所有节点中都有所有的数据库。 我们希望有两个节点(A和B)与所有的数据库,其余的不同的子集。 出于这个原因,我正在考虑这样做:

Mathematica图形

由于我不是networking拓扑专家,我想问一下:

  • 对所有节点复制所有节点真的不是一个好主意吗?
  • 这是一个合理的拓扑(最后显示)?
  • 我可以在哪里了解更多?

为了完整起见,这些数字是使用以下Mathematica命令生成的:

Graph[Rule @@@ Permutations[CharacterRange["A", "G"], {2}], VertexLabels -> "Name"] Graph[Rule @@@ (Partition[CharacterRange["A", "G"], 2, 1, {-1}] /. {a_, b_} :> Sequence[{a, b}, {b, a}]), VertexLabels -> "Name"] Graph[Flatten[Outer[{#1 -> #2, #2 -> #1} &, {"A", "B"}, CharacterRange["C", "G"]]~Join~{"A" -> "B", "B" -> "A"}], VertexLabels -> "Name"] 

我没有七个节点(但是有三个节点)的特殊经验,但是复制每个节点都不会有任何问题。 我也用我在项目中使用的三个节点来做这个。 CouchDB的构build是为了支持多主节点的设置。 但是,在复制到具有多个连接的许多节点时,您也正确地考虑使用的带宽。 我build议你监视一下。

CouchDB遵循CAP的定理:可用性和分区容忍度。 这意味着数据是最终一致的(参见http://guide.couchdb.org/draft/consistency.html )。 所以你也应该考虑分割你的数据,这将导致你在上面显示的不同的设置。

或者…你应该看看9月20日发布的CouchDB 2.0。 现在CouchDB确实支持集群。 我很确定,这可以解决你的问题。 build议的设置是在每个节点( https://blog.couchdb.org/2016/08/01/couchdb-2-0 )中至less(自然地)有三个节点(n)运行一个集群,其中包含8个分片(q) -architecture / )。 使用复制仍然是可能的,我认为这可能是减less您的设置的一种方法(虽然我不知道为什么你在考虑七节点设置)。

http://docs.couchdb.org/en/2.0.0/index.html