2013-09-05 9 views
5

私は、世界48カ国にオフィスを持つ組織のためにいくつかの仕事をしています。基本的には、現在作業している方法は、データベースのローカルコピーにすべてデータを格納し、それを世界中のすべての地域/オフィスに複製することです。ロンドンのサーバーに「開発コピー」がある場所で直接作業する必要のある奇妙な機会に、世界中のどこにいるかにかかわらず、ロンドンのサーバーに直接接続する必要があります。グローバルに分散されたNeo4jのアーキテクチャ?

したがって、組織全体に1つのグラフを作成して、各領域が比較的高速にグラフを読み込むように断片化したいとしましょう。私は書き込みがパフォーマンスを殺すだろうと心配しています。私は書き込みが単一のマスターを通過することを理解します。つまり、グローバルに単一のマスターが存在するのでしょうか?つまり、そのマスターがロンドンにいる場合、シドニーからデータベースに書き込むたびに、ローカルシャーディングに関係なくその距離を移動する必要がありますか?シドニーとロンドンが(何らかの理由で)断ち切れば、どうなるでしょうか?

本質的に、Neo4jはどのようにグローバルな配布の問題を解決しますか?

答えて

7

Neo4j Enterprise Editionの配布メカニズムは、確かにマスタースレーブスタイルです。マスタへの書き込み要求はローカルでコミットされ、push_factor(デフォルト:1)で定義されたスレーブの番号に同期転送されます。スレーブへの書き込み要求は、それ自身と、そしてpush_factorを満たすのに十分なマシンにそれを同期して適用します。同期されたスレーブからマスターへの通信が性能を上げる可能性があるので、マスターへのリダイレクト書き込みを行い、スレーブを介して読み込みを配布することが推奨されます。クラスタ通信は、高レイテンシのネットワークで正常に動作します。

マルチリージョンの設定では、「プライマリリージョン」にフル(別名で最低3つのインスタンス)クラスタを持つことをお勧めします。別の3インスタンスのクラスタは、スレーブ専用モードで実行されるセカンダリ領域にあります。プライマリ領域が完全にダウンした場合(非常に稀であるが、それが発生する)、監視ツールはセカンダリ領域のコンフィグレーション変更をトリガして、インスタンスがマスタになるようにする。高速読み取りアクセスを必要とする他のすべてのオフィスでは、スレーブ専用のインスタンスx(x> = 1、読み取りパフォーマンスに応じて)があります。各場所には、マスタ(通常はプライマリリージョン)への書き込みを指示し、ローカルリージョンに読み込むHAプロキシ(または他のLB)があります。

単一クラスタのインスタンス数を20個以上に増やしたい場合は、最初に概念の重大な証明を行うことを検討してください。マスタースレーブアーキテクチャのため、このアプローチは無期限に拡張されません。

+0

偉大な答え:2つの場所間のリンクが切断され、両方のクラスタに変更が加えられた後、リンクが復元されるとどうなりますか?私は、競合イベントのハンドラを提供しなければならないことについて何かを読んだと思います...そうですか? – gremwell

+0

マスター選挙では、クォーラムを持つためには、クラスタメンバーの半分以上が必要です(そのため、奇数が必要です)。クォーラムがなければ、マスターは選出されません。クラスタの孤立した少数派は依然として読み込みを処理できますが、書き込みは受け付けません。 –

+0

しかし、ロンドンには3つのクラスターがあり、シドニーには3つのクラスターがあります。マスターはロンドンにいて、誰かがロンドンのオフィスを切り離しています(注:サーバーはまだ稼動しており、ロンドンのオフィスにいるすべてのユーザーが引き続き使用しています)。シドニーは現在新しいマスターを選出し、しばらくの間運営しています。しばらくしてロンドンオフィスとの接続がオンラインに戻ります。何が起こるのですか? – gremwell

関連する問題