本文へスキップ

ベクタークロックとは?

べくたーくろっく

ベクタークロックとは、分散システムにおいて複数ノード間のイベントの因果関係(順序)を論理的に追跡するためのアルゴリズムで、各ノードが他ノードの論理時刻をベクトルとして保持します。

ベクタークロック(Vector Clock)とは、分散コンピューティングの分野で複数のノード(サーバーや処理ユニット)が独立して動作する環境において、イベント間の因果関係(「どちらが先に起きたか」「互いに依存しているか」)を特定するためのアルゴリズムです。レスリー・ランポートが提案した「論理時計」をノードごとに拡張したものです。

仕組みとしては、システム内の各ノードが「ノード数と同じ要素数のカウンタ配列(ベクター)」を保持します。自分がイベントを発生させるたびに自分のカウンタをインクリメントし、メッセージを送受信する際に相手のベクターと自分のベクターを比較・マージします。

ベクタークロックで分かることは次のとおりです。

  • 因果関係あり(happens-before):あるノードのベクターが別のノードのベクターの全要素以下であれば、前者が後者より前に発生したといえます。
  • 並行(concurrent):どちらのベクターも一方を支配していない場合、2つのイベントは並行して発生したと判断できます。

ベクタークロックは分散データベース(DynamoDBやRiakなど)で書き込み競合の検出に利用されるほか、分散トレーシングや分散デバッグの文脈でも重要です。衝突解決のポリシー(最後書き込み優先・マージなど)と組み合わせて使われます。

使い方・例文

分散KVSで2つのノードが同じキーを同時に更新した場合、ベクタークロックを比較することで「どちらが先か」または「並行して起きた競合」かを判断し、適切な衝突解決処理を行います。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語