この記事では、Couchbase Severのデータ分散についてご説明します。
Couchbase Serverは、偏りが無いデータ分散アーキテクチャを実装しています。また、クラスタへのサーバ追加、サーバ停止などの変化に対応したデータ分散処理を実現しています。
データ分散処理は、Couchbaseバケット、Ephemeralバケットが管理する「アクティブバケット」及び、「レプリカバケット」のデータを対象としています。
Couchbase Serverのデータ分散方式
Couchbase Serverのデータ分散方法は、シャーディング方式を利用しデータを分散します。シャーディングでは、大規模なデータを複数のサーバに偏りなく分散するために、データの識別子(一意のキー)を基に予め決めた規則に従って、細かくデータを分割します。そして、データを細かく割り当てることをシャードと呼びます。
シャーディング方式のデータ分散には、以下のような規則(ルール)を利用する場合が多いです。
・「範囲指定」
・「ハッシュ関数」
・「範囲指定とハッシュ関数の両方を利用」
Couchbase Serverはハッシュ関数を採用しデータを分散します。
ハッシュ関数は必ず異なる値(不規則な値)を戻します。この特性を活かし、データを識別するキー値をハッシュ関数に渡し、ハッシュ関数の戻り値とCouchbase Serverが管理しているクラスタ内の「データ分散管理の情報」を基にデータを偏りなく分散するアーキテクチャを実装しています。
下の図を基に、Couchbase Serverのデータ分散についてご説明します。
1.バケット内で一意なドキュメントキー値を基に、Couchbase Serverが使うハッシュ関数から一意の値を求めます。
2.求めた値を基に、Couchbase Serverが管理している「データ分散管理の情報」から、データの割り当て先、vBucket(≒シャード)を見つけます。
3.vBucketは書き込み先のサーバ情報を管理し、書き込み先のサーバへデータを書き込みます。
クラスタ内のDataサービスが稼働しているサーバ構成に変更があると、Couchbase Server内部で、管理している「データ分散管理の情報」を変更します。
そして、「データ分散管理の情報」を基にデータの再配置を行うリバランス機能を使い、クラスタ構成変更後もデータの偏りが無いクラスタ環境を実現しています。
「データ分散管理の情報」は、クライアントアプリケーションが利用するCouchbase のSDKと連動し、クラスタ構成の変更後も迷うことなくデータを操作することができます。
まとめ
Couchbase Serverのデータ分散は、大規模なデータをクラスタ内で共有します。そして、クラスタ内の複数サーバからデータを読み取ることができるため、大量のクエリ処理に対して迅速な応答処理を実現しています。