図3●プロセス/スレッドとロジックの分離
ロジックを複数のプロセスやスレッドを使って実現することで,効率よく実行することを考慮したデザイン・パターンである。

抽象化には前提と限界がある

 分散システムの透過性の課題においては,ソフトウェアで実現する抽象化には何らかの前提条件と限界があると認識することが重要だ。分散システムでは入出力操作と同様に,操作のコストが大きいので,複数要求を一つにまとめるバッチ処理や非同期処理を行う。例えば入出力ではデータの書き込みを遅らせて,必要な時期まで操作のオーバーヘッドを遅延させる。しかしその結果,処理が完了するまでの間一時的にデータの一貫性がなくなったり,期待する動作の意味が正しくなくなるといった問題が生じてしまう。

 正常に動作が終了すれば最終的にはデータの一貫性や動作の意味の正しさは保証される。しかしこの前提条件が予想外の結果となる。例えばログをファイルに書き出す操作を遅延させると,プロセスがクラッシュしたら実際の処理の進行状況がログに反映されないことになる。また別スレッドを生成して非同期的に処理を実行する場合を考えてみよう。OSのセキュリティ・コンテキストはスレッド単位で管理されるので,要求スレッドから生成された非同期処理スレッドにセキュリティ・コンテキストをコピーしてやらなければならない。これがコンテキスト・スイッチに加えて非同期処理のオーバーヘッドとなる。このことがあるので,非同期処理が常に性能を改善するとは限らない。

 このように,前提条件が壊れることで抽象化の潜在的副作用が表面化する「抽象化のやぶれ」はほかにも多い。例えば,配列の参照順,SQL構文での条件文の付け方,コンテナ・オブジェクトへのアクセス法などで見られる。論理法則の制約における代表的な抽象化のやぶれである,プロセス/スレッドとロジックの分離の例を見てみよう。

 プロセス/スレッドとロジックの分離は,複数のプロセスやスレッドを使い,ロジックを効率よく実行することを考慮したパターンである(図3[拡大表示])。コンポーネントと(機能要件を満たす)ロジックの分離のパターンに似ている。技術と業務要件を分離する手法である。しかし,プロセス/スレッドは実行制御や同期制御,セキュリティの基本的単位である。またアプリケーション・サーバーや「制御の逆転」の原則で実行制御するフレームワークでは,トランザクション識別,その他分散サービスのコンテキストやコネクションなど内部状態のコンテキスト管理の識別単位にプロセス/スレッドを使う。従ってプロセス/スレッドとロジックを分離すると,さまざまな問題が発生する。例えば,OSはプロセス/スレッドを単位として権限を与えるので,実行プロセス/スレッドを変更するとリソースにアクセスできなくなる。

 デザイン・パターンが適用可能範囲から外れると機能しないのも同種の問題である。だからこそ,内部実装を隠蔽するアーキテクチャ,フレームワーク,デザイン・パターンを利用して,ソフトウェアの品質を高めるためには仕組みと前提条件を理解して,正しく検証することが重要となる。しかし,この理解と検証は抽象化技術の高度化と複雑化により困難さを増している。オープンソースなら内部実装が見えるというが,ソフトウェア・プラットフォームは大規模化し複雑化しており,理解は容易ではない。ソースコードよりもむしろ,物理法則や前提条件の理論的背景を習得し,大域的な理解が肝要である。

抽象化は今後も進展する

 ソフトウェアの抽象化は,ファイル,メッセージ,プロセス,スレッド,ポートなどから始まった。コンピュータを知らないユーザーにとってこれらの概念を理解するのは大変である。しかし,理解してしまえばある種当たり前の概念となる。そして,その抽象化は絶えず進展している。コンポーネント,インタフェースはもとより,エンティティ,サービス,ルール,アスペクト,ロールなどである。しかも,一般的用語と特定の製品に特化した方言とが混在していて正しい理解はより困難となっている。どんな抽象化であっても,それが出現するには正当な理由が必須だ。そうでなければ,その抽象化の概念は生き続けることはできない。

 また,抽象化の実装には必ず前提条件が壊れ,抽象化の潜在的副作用が表面化する可能性を理解しなければならない。もう一度コンピュータと接した原点に帰り,当たり前の概念を疑ってかかることは重要である。例えば,ファイルは本当に必要なのか,ファイル単位でドキュメントを管理することは正しいだろうかと。ファイルの生成日時,タイトル,重要度や秘密度,サイズが分かればいいのならフォルダは不要ではないか。現在お使いのメール・クライアントはその条件を満たしている。ユーザーはメッセージがどのフォルダに管理されているかを知る必要はない。つまり,ファイルの概念がなくても,ドキュメント管理は可能である。コンピュータはあるべき姿に向かい,さらなる抽象化を進めている。