演習3 米澤研究室 発表2 山崎孝裕
主な内容 分散動的サーバモデル(復習) 掲示板システムの問題点と仮定 掲示板システムの大まかな動き(細かい エラー処理は考慮しない)
分散動的サーバモデル 従来の Client/Server モデルにおいて特定のサー バがやっていた処理の一部を、 P2P オーバレイ 上の複数のノードに処理をさせる。 P2P 上に構築された分散的な Client/Server モデ ルということができる。 → 目的は負荷の分散。高い秘匿性ではない。 P2P ノードがサーバの肩代わりをするため、 ノードの動的参加・脱退を意識する必要があ る。
掲示板システム(1) ユーザがスレッドを立て、スレッドにレ スを書き込むという形の掲示板を想定す る。 スレッドの管理は動的に決定され、ある ノードがそのスレッドへの書き込み・読 み込みを管理するサーバとなる。 どのスレッドをどのノードが現在管理し ているかの情報は、中央管理サーバが 持っている。
掲示板システム(2) 中央管理サーバが落ちることはない、と仮定 する。 実際に信頼性の高いシステムを構築する場合は、中 央管理サーバを多重化するなどの工夫が必要となる。 負荷分散のため、中央管理サーバを分散処理させる ことも考えられうる。 スレッドは特定のノードが所有する、という わけではない。 スレッドを立てたノードが落ちても、常にスレッド への書き込み・読み込みはできる。
問題点と仮定(1) 疑問 「 P2P オーバレイから全てのノードが脱退した場合、 スレッドデータを誰が持つのか?」 「次に P2P オーバレイに参加したノードは最新の データをどこからとってくるのか?」 常に生きていることを仮定した中央データ サーバにデータを置いておくことで一応の解 決はできる(?) 次に参加するノードは中央データサーバから データをもらってきて、そのデータの管理者 となる。
問題点と仮定(2) そもそも、参加ノードがゼロになってしまう ことがあるような参加ノード数が極端に少な いネットワークならば、分散させる必要はな い。 → 従来の Client/Server モデルでも十分。 上記のような問題がおきるのは特殊ケースと して別に扱い、通常時は起きないものと仮定 する。 分散動的サーバとして動くノードの数は、ク ライアントとしてのみ動くノードの数に比べ て十分に小さいものとする。
掲示板の規模の例 1 レス = 500Byte 1 スレッド = 300 レス = 150KB 1 掲示板 = 1,000 スレッド = 150MB 100,000 レス /day ≒ 1 レス /sec 数十~数百スレッド /day ※ 2ちゃんねるの大き目の板を参考に推 定 2ちゃんねる
分散サーバと分散サーバ群 中央管理サーバは、新規に分散サーバ郡が必 要だと判断したとき、現在分散サーバでない N 個のノードを分散サーバに任命する。この N 個 の分散サーバの集まりを分散サーバ群と呼ぶ。 分散サーバ群の各分散サーバには 1 からの優先 度が順に割り振られている。 優先度 1 の分散サーバは分散メインサーバと呼 ばれ、スレッドへの管理・変更を行う。 優先度が 2 ~ N の分散サーバは分散サブサーバ と呼ばれ、データのコピーを常に持つ。
保持データ 中央管理サーバ スレッドがどの分散サーバ群に属するかの表を持つ。 各分散サーバ群の分散サーバの IP アドレスを持つ。 分散サーバ 同じ分散サーバ群に属するノードの優先度と IP アド レスを保持している。 分散サーバ群に割り当てられたスレッドデータを、 全ての各分散サーバが持つ
システムの動き 分散サーバの動的指定 メインサーバの引き継ぎ サブサーバの補充 スレッドとレスの管理 スレッドの参照 レスの書き込み スレッドの作成 スケーラビリティの確保 分散サーバ群の分割と統合
メインサーバの引き継ぎ 分散サーバはサーバ群に属する他のサーバと 一定間隔で互いの存在を確認しあう。 メインサーバの存在が確認できなかった場合、 サブサーバの優先度が繰り上げられ、優先度 が 2 であったサブサーバが優先度 1 となりメイ ンサーバに昇格する。 サブサーバの存在が確認できなかった場合、 そのサーバより小さい優先度を持つサブサー バの優先度が繰り上げられる。
サブサーバの補充 分散サーバ群のサーバ数がノードの脱退 によって N より小さくなった場合、メイ ンサーバは中央管理サーバに新たにサブ サーバを要求し、割り当てられたサブ サーバを分散サーバ群に組み込み、優先 度を割りあてる。 新たに分散サーバに割り当てられたノー ドは、スレッドデータを他の分散サーバ からもらいコピーを作成する。
スレッドの参照 スレッドがどの分散サーバ群に属するか の情報は中央管理サーバが持っている。 クライアントはスレッドの分散サーバ群 を中央管理サーバに問い合わせてノード アドレスを取得する。 分散サーバ群の任意のノードにスレッド データを要求することで、データを取得 できる。
レスの書き込み スレッドの属する分散サーバ群のメインサー バに対して、レス書き込み要求を送信する。 メインサーバは優先度 2 のサブサーバに対して 書き込みデータを送信し、受信したサブサー バは次の優先度のサブサーバにデータを送信 する。 最後に優先度 N のサブサーバは、メインサーバ にデータを送信し、メインサーバは書き込み データが正しいかどうかをチェックする。こ のチェックが終わった時点で正式に書き込み が完了したこととなる。
スレッドの作成 クライアントは、スレッド作成要求を中 央管理サーバに送信する。 中央管理サーバは新規スレッドの属する 分散サーバ群を決定し、そのサーバ群に スレッド作成命令を送信する。 新規スレッドの属する分散サーバ群が新 規のサーバ群である場合は、先にサーバ 群を作成する。
分散サーバ群の分割と統合 一つの分散サーバ群への負荷が大きい場 合、サーバ群の分割を行う。 中央管理サーバが分散サーバになってい ない N 個のノードを選出する。 これともとのサーバ群のサーバとを半々 に混ぜ、新規サーバに分割されたスレッ ドデータをコピーする。
来週の予定 各処理の状態遷移図 各処理の各状態でノードがダウンしたと きなどの細かいエラー処理 その他