表2●リソースの抽象化がもたらす透過性

論理法則による制約も存在する

 物理法則による制約と似ているのが,ソフトウェアの構造による制約や振る舞い上の制約など,論理法則が原因となるトレードオフである。例えばセキュリティの実装や,ロックによる同期制御などである。

 コンポーネント・ミドルウェアは,並列処理や同期制御,イベント処理などを考慮しなければならない。例えばHTTPサーバーの要求受信処理では,個々の同時要求にプロセスやスレッドを割り当てて並列に処理するのが基本だ。しかし要求ごとにプロセスやスレッドを生成する単純なアルゴリズムでは要求が多くなったときに破綻する。多くのプロセスやスレッドが,限られた数のCPUを使おうとしてコンテキスト・スイッチが頻発する。コンテキストが切り替わるとCPUのキャッシュが有効に使えなくなる。結果として要求数が一定以上になるとスループットが頭打ちとなる。このほか同期制御によるロック待ちも並列処理の代表的なオーバーヘッドである。

 そこでよく採用されるアルゴリズムは,非同期処理と同期処理に分割するパターンと,コンテキスト・スイッチを回避するパターンである。前者はHTTP要求に対応する処理を二つに分ける。HTTPによる要求は非同期に発生するので,要求を受信する入口の部分はマルチスレッドにして非同期に処理する。ここで処理結果をキュー(待ち行列)に順に挿入して次の受信に備える。別の同期処理層はキューから通知を受けて,要求に対してスレッドを割り当てて受信処理を継続する。ただしこの場合,一つの要求を処理するときに必ずコンテキスト・スイッチが発生する。また,キューを使うことに伴うデータコピーと同期制御が発生する。

 これらのオーバーヘッドを回避するのが後者の方式だ。要求処理完了まで同一スレッドを使用する。このために,あらかじめHTTPサーバーはスレッドを何本か確保しておく(スレッドプール)。ここに割り当てられたスレッドを使って,単一スレッドでHTTP要求受信処理からディスパッチ,要求実行のすべてを処理する。この方法を使えば,スケーラビリティを持たせるうえでボトルネックとなるコンテキスト・スイッチとロックの問題は改善する。その代わり,キューを持たないのでイベント処理順の変更ができない,イベント受信処理が1スレッドごとで,イベント処理のボトルネックが発生するなどの問題がある。

リソースの抽象化により透過性を確保

 分散システムは,リソースの抽象化により実現できた。リソースの抽象化では9種の透過性がさまざまな場合に出現する(表2[拡大表示])。透過性はリモート・サービスやオブジェクトへのアクセスのときなどに機能し,開発者やユーザーから実装の詳細を隠蔽する。

 ただし見かけの透過性に潜んだ隠れたコストを支払わなければならないのも事実である。例えば,前述のようにリモート・アクセスにはネットワーク転送の物理コストを払う必要がある。ローカルで呼び出すなら,モジュールやフレームワークのコンテキストをまたがない限り,セキュリティ・チェックも不要である。しかしリモートの場合はそのセキュリティ処理に関するコストも払う必要がある。呼び出しオブジェクトの位置を問わないためには,名前エントリの登録,管理コストや名前サービスの検索コストが支払われる。オブジェクトの障害以外にも,ネットワーク障害への対応,障害時の切り替え時間遅延への対応が必要である。

 また,オブジェクトのライフタイム管理の課題がある。通常,オブジェクトはクライアントからの要求を処理する間,すなわち参照されている間は生き続ける。分散システムでは,クライアントやネットワーク障害が発生したときにオブジェクトとそれが利用するリソースの解放が必要となる。DCOMでは定期的にpingをクライアントからサーバーに送信し,一定数のpingが届かなくなるとクライアントまたはネットワークに障害が発生したと判断する。ただしpingによってデータ転送量は増加する。.NETではリース時間を導入し,一定時間アクセスがないとオブジェクトを解放する方式を採っている。従来の分散オブジェクト技術(DCOM)がインターネットではなく高速LANを前提としていることの一端を示している。

 異機種間の透過性は呼び出しに関してであって,OSやアーキテクチャに依存しない実装を強制するわけではない。同様に移動の透過性も移動前後でのオブジェクトの実装形式の同一性を強制するわけではない。異機種間で透過性を実現するには,OSやアーキテクチャに依存しない通信サービスと通信データ形式を定義すればよい。ただし通信サービスを実現する際に,ローカル・サービス機能を利用してもいい。例えば,トランザクション・サービスはローカル・データベースのログや同時性制御の機能を利用する。認証サービスもローカルOSの認証サービスに対応付けて実装してもよい。

 移動とコピーの透過性は,位置の透過性と同じ名前サービスのコストに加え,オブジェクト状態の同期の問題が発生する。この状態同期と同時性制御の透過性は,同期を保証するための待ち時間のコストを伴う。規模の透過性は移動とコピーを応用して実現できるものだ。最近のデータセンターにおける動的リソース割り当てやハードウェア仮想化技術が適用可能である。