2.4.8 データアクセスの流れ
データアクセスの流れについて説明します。
- 〈この項の構成〉
(1) データの更新操作
EADsクライアントは,EADsクライアントが保持しているクラスタ構成情報を基にデータの格納先EADsサーバを特定し,データを更新します。
多重度を3に設定している場合のput処理を例に,データアクセスの流れを次の図に示します。
EADsクライアントがput処理のリクエストを送信します。
EADsサーバ1がリクエストを受信すると,データのコピー先EADsサーバに対して合意メッセージを送信し,put処理を実行してよいか合意を取ります。
EADsサーバ1は,各EADsサーバから合意メッセージを受信し,多重度と同数の合意が得られると処理を行います。これによって,データを多重化する際の,データの整合性を確保します。この例の場合,多重度が3なので,put処理を実行するためには3つのEADsサーバの合意が必要です。
なお,一定時間内(デフォルトは0.8秒)に合意処理が完了しない場合はタイムアウトして,再度,合意処理を行います。
自EADsサーバを含む3つの合意を得ると,データの格納および多重化を行います。この例の場合,多重度が3なので,EADsサーバ2,およびEADsサーバ3にデータがコピーされます。なお,各EADsサーバ内の処理は非同期に行われます。
リクエストを受信したEADsサーバ1にデータが格納されると,EADsクライアントに処理結果が返されます。
次に,データの格納や多重化に失敗した場合について説明します。
データの格納や多重化に失敗した場合は,次の要因が考えられます。
-
接続先EADsサーバやネットワークに障害が発生している。
-
keyとvalueのうち,value部分を格納する領域が不足している。
-
1EADsサーバに格納できるデータ数を超えている。
(a) データの格納に失敗した場合
多重度を3に設定している場合のput処理を例に,データの格納に失敗した場合の動作について説明します。
この例の場合,EADsサーバ1へのデータの格納に失敗し,EADsクライアントにエラーが返却されます。
データの多重化は実行されます。
データの格納に失敗したEADsサーバは縮退状態※に遷移しますが,クラスタは継続します。この状態では,データの多重度が下がったままです。データの多重度を元に戻すには,縮退状態に遷移したEADsサーバの問題を取り除いてから,復旧を行います。
- 注※
-
縮退状態とは,EADsクライアントからのリクエストが受け付けられない状態です。
(b) データの格納は成功したが,データの多重化に失敗した場合
多重度を3に設定している場合のput処理を例に,データの格納は成功したが,データの多重化に失敗した場合の動作について説明します。
この例の場合,put処理を実行するためには,3つのEADsサーバの合意が必要です。しかし,データのコピー先であるEADsサーバ3からの応答がないため,別のEADsサーバ(EADsサーバ4)の合意を得て,put処理を実行します。ただし,EADsサーバ4は,データの多重化は実行しません。
データの多重化に失敗したEADsサーバは縮退状態に遷移しますが,クラスタは継続します。この状態では,データの多重度が下がったままです。データの多重度を元に戻すには,縮退状態に遷移したEADsサーバの問題を取り除いてから,復旧を行います。
(2) データの参照操作
EADsクライアントは,EADsクライアントが保持しているクラスタ構成情報を基にデータの格納先EADsサーバを特定し,データを参照します。
データの格納先EADsサーバがダウンしている場合,データが多重化されていれば,データのコピー先EADsサーバにアクセスしてデータを参照します。