POSA 本でアーキテクチャパターンを勉強しよう(4) - アーキテクチャパターン「混沌から構造へ」より「Blackboard」
- パターンとは何か?
- アーキテクチャパターン「混沌から構造へ」より「Layers(レイヤパターン)」
- アーキテクチャパターン「混沌から構造へ」より「Pipes and Filters」
- アーキテクチャパターン「混沌から構造へ」より「Blackboard」
実現手段
POSA本で紹介されているブラックボードの実現手段について簡単に紹介します。(1) 対象となる問題を定義する、(2) その問題に対応した解空間を定義する、(3) 問題解決のプロセスを複数のサブタスクに展開する、(4) 分割したサブタスクに対応するように Knowledge Source を定義する、(5) Blackboard 上に現れる語彙を定義する、(6) どのようにシステムが制御されるのか明らかにする(Control の設計を行う)、(7) 知識源を実装するという流れで、ブラックボードを実装します。
かなり文言がわかりにくいので補足しましょう。まず、「(1) 対象となる問題を定義する」は、問題領域、入出力、ユーザとシステムのやり取りを明確にすることです。また、「(2) その問題に対応した解空間を定義する」は、システムが求める解(最終結果)、Knowledge Sourceが出力する中間解を定義してから、解の構造化(階層構造など)と独立化を行うことです。(ある中間解が他の中間解に依存していると、Knowledge Source 間に依存関係が生まれてしまうため、独立化を行います。)
大きな流れとしては、処理の分割、共通語彙の定義、制御戦略の策定があることに注意してください。
バリエーション
POSA 本では、プロダクションシステムとリポジトリという二つのバリエーションパターンを紹介しています。
プロダクションシステムについては詳しくはこちらを参照してください。OPS 言語で採用されているアーキテクチャです。Control に相当する競合解消コンポーネント、Knowledge Source に相当するプロダクションコンポーネント、Blackboard コンポーネントに相当するワーキングメモリコンポーネントが登場します。
POSA 本によると、プロダクションコンポーネントは Knowledge Source と同様に条件部と結果部(実行部)に分かれています。条件部とワーキングメモリの内容をマッチングして、実行可能なプロダクションを選択します。複数プロダクションが実行可能な場合は、競合解消コンポーネントが適切なプロダクションを選択します。Blackboard パターンは、プロダクションシステムが確立した形式を一般化したものと言えます。
リポジトリはブラックボードパターンを一般化したものです。Blackboard コンポーネントのように中核となるデータを保持するコンポーネントをリポジトリと呼びます。また、リポジトリパターンには制御担当が存在しません。例を挙げると、DBMS を利用したシステムはリポジトリパターンと呼ぶことが可能で、DBMS をリポジトリ、その上で動作するアプリケーションを Knowledge Source と考えることができます。
結論
POSA本によると、ブラックボードには「試行による接近」「変更容易性と保守性の支援」「再利用可能な知識源」「フォールトトレランスと頑健性の支援」というメリットがあります。
「フォールトトレランスと頑健性の支援」とは、Knowledge Sourceの返す結果はいかなるものも仮説に過ぎないため、それぞれのコンポーネントのノイズを含むデータや不確かな結果への受容性が確保されているためです。
逆にデメリットとして「テストが困難」「解の妥当性が保証されない」「優れた制御戦略の構築が困難」「低い効率性」「開発労力が多大」「並列性を支援しない(並列実行するには、Blackboard コンポーネントが並列性を考慮して開発する必要がある)」などが挙げられています。
一つ注意して欲しいことは、メリットの「試行による接近」やデメリットの「解の妥当性が保証されない」とあるように、ブラックボードは不確実な結果を求めるためのパターンであるということです。
「混沌から構造へ」のまとめ
POSA本の「混沌から構造へ」では、レイヤ(Layers)、パイプとフィルタ(Pipes and Filters)、ブラックボード(Blackboard)の3つのパターンが紹介されています。ここまで読まれた方はこの3つのパターンの並べ方が意図的であることに気づかれていることでしょう。
どのパターンも大規模なシステムを分割するためのものです。ただ、システムに要求される信頼性と柔軟性、解決方法の不確実性から並べられていることがわかります。レイヤは柔軟性や再利用性よりも信頼性を確保した形で、システムを分割します。パイプとフィルタは、フィルタの再利用性やフィルタの組み合わせの自由度から、信頼性よりもシステム全体の柔軟性を重視していることがわかります。
前者2つのパターンではいずれも、ある程度処理の順序を規定してコンポーネントを連ねてシステムを実現します。対してブラックボードは明確に順番を定めない(定められない)、もしくは本質的に順番が重要でないシステムに適用されます。
信頼性重視のレイヤ、柔軟性と再利用性重視のパイプとフィルタ、不確実性への対処を重要視したブラックボード、いずれにせよ大きくて複雑な問題をいかに整理するのかを重要視しているのがPOSA本の「2.2 混沌から構造へ」の特徴であると言えます。
まとめ
以上、アーキテクチャパターンの Blackboard(ブラックボード)でした。ブラックボードは、共通の共通的なデータ構造上で複数の独立したプログラムが処理を行う仕組みを提供するためのパターンです。
次回はPOSA 本の「2.3 分散システム」に相当する部分を紹介します。パターンとしては Broker パターンが登場します。それでは!
TrackBack URL :
