BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース 大規模なNeo4jクラスタにおける因果一貫性

大規模なNeo4jクラスタにおける因果一貫性

原文(投稿日:2017/04/15)へのリンク

Neo4J TechnologyのチーフサイエンティストであるJim Webber氏は、QCon London 2017で、Neo4Jが因果一貫性(causal consistency)をどのように実装しているか詳しく説明した。プレゼンテーションで取り上げられたのは、Neo4Jのクラスタリングアーキテクチャの概要、Raftを使用したコンセンサスの実装、リード・アフター・ライト(read-after-write)一貫性の実現に使用されているブックマーキングというパターンといった話題だ。

クラスタリングの問題を分割統治する手段として、Neo4Jのノードには“コア”と“読み取り”という2つの異なる役割がある、とWebber氏は説明した。クラスタの“コア”ノードは書き込みに使用され、その持続性を保証する。一方の“読み取り”ノードは、読み取り専用のコアクラスタの非同期レプリカであり、参照負荷の高い状況下でのスケーリングを目的としている。

持続性(durability)に関する保証を満足するため、コアノードにはコンセンサスアルゴリズムとしてRaftを実装している、とWebber氏は説明した。トランザクションが書き込まれると、Raftはそれをログ記録し、クラスタ内のすべてのコアノードに内容をレプリケートする。ただしRaftは、トランザクションが完全に複製されるのを待つことはせず、過半数の投票のみを待つ。書き込みを保証するにはこれで十分なのだ。

さらにWebb氏は、パフォーマンスとレジリエンスの面でのメリットも説明した。パフォーマンスの面では、過半数のレプリケーションのみを待つことでブロッキング時間が短くなり、クエリの待ち時間の短縮が実現する。レジリエンスの観点からは、一部のノードに障害が発生した場合でも、過半数が投票可能であることによって、コアクラスタの機能を継続することが可能になる。

Webber氏はまた、RaftとPaxosを比較して、Raftを選択したのは実装がシンプルかつ容易であるからだ、と説明した。これによってアプリケーションのバグの可能性が減少し、保守性が向上する、と氏は考えている。

さらにWebber氏は、グラフデータベースが一般的に読み取り処理の重いデータベースであることと、書き込み操作中であってもグラフを読み取ってトラバースする必要があることを説明した。一般的なNeo4Jの構成において、コアノードの数よりも読み取りノードの数が多いのはこのためだ。 これらのノードはコンセンサスコミットに関与しないため、自動スケーリングに適しており、必要に応じて簡単に破棄あるいはプロビジョニングすることができる。

トランザクションが非同期に読み取りノードに複製されることを、Webber氏は簡単な問題で実演して見せた。書き込みの持続性が保証されていても、生成した直後にデータを読み取ると、そのデータを見つけられない場合がある。これは、データの一貫性が最終的なものであるため、クエリした時点ではまだノードにレプリケートされていない可能性があるからだ。

リード・アフタ・ライトのこのような問題に対処するため、Webber氏は、ブックマーキングと名付けられたNeo4Jの因果一貫性パターンについて説明した。

ブックマーキングの第1段階では書き込みが行われ、完了すると対応するトランザクションIDがクライアントに返される。第2段階は読み取りで、クライアントがクエリでそのトランザクションIDを送信する。このIDを使用すれば、読み取りが行われるノードがトランザクションの存在をブロックすることが可能になるのだ。

Webber氏はブックマークの実際のコード例も示して、実装が極めて簡単であることを強調した。例の中ではクライアントがIDを受け取り、それを次のクエリへと渡していた。

詳細については、プレゼンテーション全体をこちらからオンラインで見ることができる。さらにWebbe氏は、Raftに関する研究論文を読むように勧めている。

この記事を評価

関連性
スタイル

この記事に星をつける

おすすめ度
スタイル

特集コンテンツ一覧

BT