Я работаю над предложением системы с семью серверами CouchDB (A, B, C, D, E, F, G) в разных странах. Идея состоит в том, чтобы настроить репликацию с несколькими мастерами, чтобы все данные можно было синхронизировать.
Я мог настроить двунаправленную репликацию с каждого сервера на другой сервер
но я подозреваю, что это может привести к слишком большому количеству подключений, которые могут снизить производительность из-за увеличения используемой полосы пропускания (так ли это?).
Итак, моя следующая идея - настроить их как кольцо:
Теперь у нас намного меньше подключений, но по-прежнему сохраняется избыточность, поскольку каждый узел подключен к двум серверам. Проблема для моей конкретной ситуации состоит в том, что мы не хотим иметь все базы данных на всех узлах. Мы хотели бы иметь два узла (A и B) со всеми базами данных, а остальные - с разными подмножествами. По этой причине я думаю об этом:
Поскольку я не специалист по топологии сети, я хотел бы спросить:
Для полноты картины цифры были сгенерированы с помощью следующих команд 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 создан для поддержки настройки узлов с несколькими мастерами. Но вы также правы, думая об используемой пропускной способности при репликации на такое количество узлов с большим количеством подключений. Предлагаю вам следить за этим.
CouchDB следует теореме CAP с AP: доступность и устойчивость к разделам. Это означает, что данные в конечном итоге согласованы (см. http://guide.couchdb.org/draft/consistency.html). Поэтому вам также следует подумать о разделении данных, что приведет к другой настройке, которую вы показали выше.
Или вы можете взглянуть на CouchDB 2.0, выпущенный 20 сентября. Теперь CouchDB поддерживает кластеризацию. Я почти уверен, что это может решить вашу проблему. Предлагаемая установка заключается в запуске кластера по крайней мере (естественно) с тремя узлами (n), содержащими 8 шардов (q) в каждом узле (https://blog.couchdb.org/2016/08/01/couchdb-2-0-architecture/). Использование репликации все еще возможно, и я думаю, что это может быть способом уменьшить вашу настройку (хотя я не знаю, почему вы думаете о настройке с семью узлами).