演習3 米澤研究室 発表2

演習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ちゃんねるの大き目の板を参考に推定
http://www6.big.or.jp/~beyond/bbsnews/
分散サーバと分散サーバ群
 中央管理サーバは、新規に分散サーバ郡が必要
だと判断したとき、現在分散サーバでないN個の
ノードを分散サーバに任命する。このN個の分散
サーバの集まりを分散サーバ群と呼ぶ。
 分散サーバ群の各分散サーバには1からの優先
度が順に割り振られている。
 優先度1の分散サーバは分散メインサーバと呼ば
れ、スレッドへの管理・変更を行う。
 優先度が2~Nの分散サーバは分散サブサーバと
呼ばれ、データのコピーを常に持つ。
保持データ
 中央管理サーバ


スレッドがどの分散サーバ群に属するかの表を持つ。
各分散サーバ群の分散サーバのIPアドレスを持つ。
 分散サーバ


同じ分散サーバ群に属するノードの優先度とIPアドレス
を保持している。
分散サーバ群に割り当てられたスレッドデータを、全て
の各分散サーバが持つ
システムの動き
 分散サーバの動的指定


メインサーバの引き継ぎ
サブサーバの補充
 スレッドとレスの管理



スレッドの参照
レスの書き込み
スレッドの作成
 スケーラビリティの確保

分散サーバ群の分割と統合
メインサーバの引き継ぎ
 分散サーバはサーバ群に属する他のサーバと一
定間隔で互いの存在を確認しあう。
 メインサーバの存在が確認できなかった場合、サ
ブサーバの優先度が繰り上げられ、優先度が2で
あったサブサーバが優先度1となりメインサーバに
昇格する。
 サブサーバの存在が確認できなかった場合、その
サーバより小さい優先度を持つサブサーバの優
先度が繰り上げられる。
サブサーバの補充
 分散サーバ群のサーバ数がノードの脱退に
よってNより小さくなった場合、メインサーバ
は中央管理サーバに新たにサブサーバを
要求し、割り当てられたサブサーバを分散
サーバ群に組み込み、優先度を割りあてる。
 新たに分散サーバに割り当てられたノード
は、スレッドデータを他の分散サーバからも
らいコピーを作成する。
スレッドの参照
 スレッドがどの分散サーバ群に属するかの
情報は中央管理サーバが持っている。
 クライアントはスレッドの分散サーバ群を中
央管理サーバに問い合わせてノードアドレ
スを取得する。
 分散サーバ群の任意のノードにスレッド
データを要求することで、データを取得でき
る。
レスの書き込み
 スレッドの属する分散サーバ群のメインサーバに
対して、レス書き込み要求を送信する。
 メインサーバは優先度2のサブサーバに対して書
き込みデータを送信し、受信したサブサーバは次
の優先度のサブサーバにデータを送信する。
 最後に優先度Nのサブサーバは、メインサーバに
データを送信し、メインサーバは書き込みデータが
正しいかどうかをチェックする。このチェックが終
わった時点で正式に書き込みが完了したこととな
る。
スレッドの作成
 クライアントは、スレッド作成要求を中央管
理サーバに送信する。
 中央管理サーバは新規スレッドの属する分
散サーバ群を決定し、そのサーバ群にス
レッド作成命令を送信する。
 新規スレッドの属する分散サーバ群が新規
のサーバ群である場合は、先にサーバ群を
作成する。
分散サーバ群の分割と統合
 一つの分散サーバ群への負荷が大きい場
合、サーバ群の分割を行う。
 中央管理サーバが分散サーバになってい
ないN個のノードを選出する。
 これともとのサーバ群のサーバとを半々に
混ぜ、新規サーバに分割されたスレッド
データをコピーする。
来週の予定
 各処理の状態遷移図
 各処理の各状態でノードがダウンしたときな
どの細かいエラー処理
 その他