Архитектура для глобально распределенного Neo4j?

Я выполняю некоторую работу для организации, которая имеет офисы в 48 странах мира. По сути, сейчас они работают так, что все они хранят данные в локальной копии базы данных, которая реплицируется во все регионы/офисы по всему миру. В редких случаях, когда им нужно работать напрямую над чем-то, где «разрабатываемая копия» находится на лондонских серверах, им приходится напрямую подключаться к лондонским серверам, независимо от того, где они находятся в мире.

Итак, скажем, я хочу иметь один граф, охватывающий всю организацию, который разбит на сегменты, чтобы каждый регион имел относительно быстрое чтение графа. Я беспокоюсь, что записи убьют производительность. Я так понимаю, что записи идут через одного мастера, значит ли это, что глобально один мастер? то есть, если этот мастер окажется в Лондоне, то каждая запись в базу данных из Сиднея должна пройти это расстояние независимо от локального сегментирования? И что произойдет, если Сидней и Лондон будут отрезаны (по какой-либо причине)?

По сути, как Neo4j решает глобальную проблему распространения?


person gremwell    schedule 05.09.2013    source источник


Ответы (2)


Механизм распространения в редакции Neo4j Enterprise действительно является стилем master-slave. Любой запрос на запись к ведущему фиксируется локально и синхронно передается на количество ведомых устройств, определенное push_factor (по умолчанию: 1). Запрос на запись подчиненному устройству будет синхронно применяться к главному устройству, к самому себе и к достаточному количеству машин для выполнения push_factor. Синхронная связь между ведомым устройством и ведущим может снизить производительность, поэтому рекомендуется выполнять перенаправление записи на ведущее устройство и распределение операций чтения по ведомым устройствам. Кластерная связь отлично работает в сетях с высокой задержкой.

В конфигурации с несколькими регионами я бы рекомендовал иметь полный (минимум 3 экземпляра) кластер в «основном регионе». Еще один кластер с 3 экземплярами находится в дополнительном регионе, работающем только в подчиненном режиме. В случае, если первичный регион полностью выходит из строя (случается очень редко, но он отключается), инструмент мониторинга инициирует изменение конфигурации в вторичном регионе, чтобы его экземпляры стали главными. Все остальные офисы, которым требуется быстрый доступ для чтения, имеют x (x>=1, в зависимости от производительности чтения) экземпляров только для ведомых. В каждом месте у вас есть прокси-сервер HA (или другой LB), который направляет записи на главный сервер (обычно в основной регион) и читает в локальный регион.

Если вы хотите выйти за пределы примерно 20 экземпляров для одного кластера, подумайте о том, чтобы сначала провести серьезное доказательство концепции. Из-за архитектуры ведущий-ведомый этот подход не может масштабироваться бесконечно.

person Stefan Armbruster    schedule 05.09.2013
comment
Отличный ответ: что происходит, когда связь между двумя местоположениями разрывается, в оба кластера вносятся изменения, а затем связь восстанавливается? Кажется, я читал что-то о необходимости предоставления обработчика событий состязания... Верно? - person gremwell; 06.09.2013
comment
для основных выборов вам нужно более половины членов кластера (поэтому у вас должно быть нечетное число), чтобы иметь кворум. Без кворума ни один мастер не будет избран. Изолированное меньшинство вашего кластера по-прежнему может обрабатывать операции чтения, но не будет принимать записи. - person Stefan Armbruster; 06.09.2013
comment
Но у нас есть группа из 3 человек в Лондоне, группа из 3 человек в Сиднее. Мастер находится в Лондоне, и кто-то отключил лондонский офис (примечание: серверы все еще работают, и все в лондонском офисе продолжают их использовать). Сиднейский теперь избирает нового хозяина и работает какое-то время. Через некоторое время связь с лондонским офисом возобновляется. Что случается? - person gremwell; 06.09.2013
comment
В Лондоне до сих пор бегает, синдей вообще без выборов (раб-только там). Только если Лондон полностью отключен (например, из-за отключения электроэнергии), Сидней становится мастером. Когда Лондон появляется снова, они воссоединяются как рабы. После этого вы вручную (или с помощью мониторинга) отключаете главный сервер Сиднея, перенастраиваете его как подчиненный и вуаля — Лондон снова становится ведущим. - person Stefan Armbruster; 06.09.2013
comment
@StefanArmbruster в этом сценарии изменения, сделанные в кластере Лондона, не будут видны тем, кто находится в Сиднее, верно? Значит, это влияет на согласованность запросов на чтение, сделанных в этих кластерах? - person Luccas; 14.05.2015

По состоянию на 2020 год Neo4J по-прежнему является графовой базой данных только для репликации. У него есть некоторое количество основных серверов чтения-записи, которые существуют как часть его синхронизированного кластера, а затем некоторое количество реплик чтения-записи. Обновления выполняются на одном из основных серверов, а затем обновление синхронизируется на (N/2)+1 основных серверах до того, как клиент будет уведомлен об успешной фиксации. Это реализация Neo4J протокола RAFT. Все это означает, что Neo4J реализует репликацию и реплики распределяются. Все узлы и ребра графа могут находиться только на одном сервере.

Objectivity/DB реализует распределенную базу данных. Objectivity/DB позволяет пользователю распределять свой график по 65 000 серверов, где узел A может находиться на сервере 10, а узел B может находиться на сервере 47550, а граница между ними может находиться на сервере 543. Это позволяет одному подключенному графу выйти за пределы масштаба любого отдельного сервера. Интерфейс (API) к базе данных создает так называемое Единое логическое представление, где после подключения к федеративной базе данных клиент имеет Единое логическое представление всех данных во всей федерации, независимо от того, на каком хосте он находится. Это позволяет пользователю создавать массивные графики с использованием меньшего стандартного оборудования вместо того, чтобы покупать эксабайтный сервер для создания эксабайтного графика.

Другим преимуществом является то, что он позволяет пользователю размещать данные рядом с тем местом, где они будут использоваться. Если ваша организация распределена по всему миру, вы можете разместить данные по Гонконгу в Гонконге или рядом с ним, а данные по Нью-Йорку — в Нью-Йорке или рядом с ним. И вы можете создавать ребра между узлами в Гонконге и Нью-Йорке. И пользователь в Денвере может выполнять навигационные запросы по всему этому, потому что механизм запросов является распределенным.

person djhallx    schedule 13.11.2020