distributed systems 第10章 distributed object-based systems
TRANSCRIPT
アーキテクチャ
プロセス
通信
名前付け
同期
一貫性と複製
フォールトトレラント性
セキュリティ
まとめ
共通の呼び出し規約に従って動作するソフトウェア部品(オブジェクト)をネットワーク上の複数のコンピュータに配置し、それらを連携動作させることによりシステムを構築する
オブジェクト指向の分散システムの一般的アーキテクチャ
Enterprise Java Beans (EJB)
Globe分散共有オブジェクト
オブジェクトの「状態」は分散していない
インタフェースのみが分散
コンパイル時オブジェクト
◦ (Javaの場合) オブジェクトの分散を意識せず、Javaコードのみを見て開発することができる
◦ 特定のプログラミング言語に依存してしまう
実行時オブジェクト
◦ 分散アプリケーションを書いたプログラミング言語から独立できる
◦ 遠隔オブジェクトを呼び出すためのラッパーとして機能するオブジェクトアダプタを使用するのが一般的
永続オブジェクト
◦ サーバプロセスのアドレス空間に含まれていなくても存在し続けるオブジェクト
◦ 永続オブジェクトを管理しているサーバは、オブジェクトの状態を補助ストレージに格納し、終了することができる
一時オブジェクト
◦ サーバが管理している間だけ存在するオブジェクト
◦ サーバが終了するとオブジェクトは消滅する
ほとんどのオブジェクト指向分散システムは両方をサポートする
Javaで書かれた再利用可能コンポーネント(JavaBeans)の分散版
Container : アプリケーション
サーバが実装する下位層へのサービスインタフェースを提供する
RMI : 遠隔メソッド呼び出し
JDBC: データベースアクセス
JNDI: 名前付け
JMS: メッセージング
EJBサーバの一般的アーキテクチャ
状態不保持セッションビーン (Stateless session beans)◦ 一度だけ呼び出される一時オブジェクト
状態保持セッションビーン (Stateful session beans)◦ クライアントの状態を保持するオブジェクト
◦ ライフタイムに制限がある
エンティティビーン (Entity beans)◦ 永続オブジェクト
メッセージ駆動ビーン (Message-driven beans)◦ メッセージに対応するプログラムオブジェクト
オブジェクトの状態が複数のプロセス上に分散・複製される
例:それぞれ別のマシン上で実行している4つのプロセスによりオブジェクトが分散している
Globeのローカルオブジェクトを構成する4つのサブオブジェクト
セマンティクスサブオブジェクト◦ 分散共有オブジェクトが提供する機能
通信サブオブジェクト◦ 下位ネットワークへのインタフェース
複製サブオブジェクト◦ オブジェクトの実際の分散を担当
◦ セマンティクスサブオブジェクトが提供するメソッドがいつ実行されるべきかを制御
制御サブオブジェクト
オブジェクトサーバ
Ice実行時システム
分散オブジェクトをサポートするためのサーバ
サービスを提供するのはサーバ内のオブジェクト
それ自身ではサービスを提供しない
オブジェクトサーバにより異なる要素
◦ オブジェクトのデータ・メソッドが分離しているか
◦ メソッドの実装が複数のオブジェクトで共有されているか
◦ オブジェクトの呼び出し方法
全てのオブジェクトが同じように見え、オブジェクトを呼び出す方法は1つだけと仮定する
最初の呼び出し要求時に一時オブジェクトを生成し、そのオブジェクトに結ばれるクライアントがなくなると消滅
サーバが立ち上がったとき、すべての一時オブジェクトを生成
サーバの各オブジェクトを固有のメモリセグメントに配置する◦ 各オブジェクトはコードもデータも共有しない
オブジェクトのコードのみ共有する
スレッドの単位
◦ 単一スレッド制御
◦ オブジェクトごとにスレッドを持つ
◦ メソッドごとにスレッドを持つ
スレッドの寿命
◦ スレッドをリクエストごとに生成
◦ サーバがスレッドのプールを維持
Object Adapter
◦ 起動ポリシー(どのようにオブジェクトを呼び出すか)に沿ってオブジェクトをグループ化するメカニズム
サーバには異なる起動ポリシーを持つ複数のObject Adapterが存在する
Object Adapter自体は各オブジェクトの
直接のインターフェースには関与しない
Iceでのオブジェクトサーバ生成例
Communicator: 基本的リソースを管理するコンポーネント
◦ 上記例ではオブジェクトアダプタの生成に使用されている
オブジェクト指向分散システムで処理される通信方法について
◦ 遠隔クライアントに対してオブジェクトを呼び出す手段
◦ Remote Procedure Call (RPC) に基づく
(a) 暗黙的バインディング (implicit binding)
◦ クライアントはオブジェクトへのリファレンスのみを使ってメソッドを直接呼び出す
(b) 明示的バインディング (explicit binding)
◦ クライアントはオブジェクトにバインドするために特別な関数を呼び出す
一番単純なオブジェクトリファレンス
◦ オブジェクトが存在するマシンのネットワークアドレスとオブジェクトを管理するサーバを識別するエンドポイント、どのオブジェクトへの指示かを含む
◦ サーバがクラッシュ->回復して異なったエンドポイントが割り当てられると、リファレンスが無効になる
改善版
◦ サーバからエンドポイントへの割り当てを記録したエンドポイント表を持つ位置サーバを設置する
遠隔メソッド呼び出し (Remote Method Invocation, RMI)◦ RPCと違って、システム全体に有効なオブジェクトリファレンスを提供する
静的呼び出し (static invocation)◦ 事前に定義されたインタフェース定義を使用する
◦ インタフェースが変わった場合は再コンパイルが必要
◦ fobject.append(int)
動的呼び出し (dynamic invocation)◦ どのメソッドが遠隔オブジェクトで呼び出されるかを
アプリケーションが実行時に選択する
◦ invoke(fobject, id(append), int)
ローカルオブジェクトはオブジェクトそのものがコピーされ、遠隔オブジェクトは参照がコピーされる
上記の違いから、ローカルオブジェクトと遠隔オブジェクトを区別して扱わなければいけない (言語レベルでは隠蔽可能)
Java RMIはこのアプローチ
非同期メソッド呼び出し (asynchronous method invocation) の2つの形式◦ コールバックモデル
◦ ポーリングモデル
アーキテクチャ
プロセス
通信
名前付け
同期
一貫性と複製
フォールトトレラント性
セキュリティ
まとめ