2006年07月15日

「SOA」と「SIProp」の関係

近いうちに書こうと思っていた内容にちょうど良いエントリーを、アークランプのゆすけさんが書かれていたので、便乗させていただこうと思います。(いつも、参考にさせてもらっております。)
そのエントリーとは、「階層化するサービス」というもので、近いうちに書こうと思っていた内容である、

なぜ、プロトコルを操作するアプリであるSIPropが、設計テクノロジーにおいてJ2EEサーバ(DIコンテナ)であるJeronimoだのESBであるServiceMixだのスクリプト言語であるRihnoだの書かれている理由

に、ちょうどマッチするエントリーとなっています。

まずは、SOAの構成内容の引用から、

SOAがサービス(コンポーネント化された処理)とプロセスマネージメント(その呼び出し手順)によって構成される

これが、SIPropにおいては、
・SOAにおける「サービス」が、SIPropにおける「制御モジュール」に相当
・SOAにおける「プロセスマネージメント」が、SIPropにおける「Router/Resolver部のスクリプト」に相当

ということになります。

なぜ、このようなことになっているかというと、SIPにおいては、1つの制御モジュールを決定するまでには、複数のメッセージのやりとりが必要なためです。
例えば、A社のUAにおいて、Ver.2で転送機能が付加された場合、Ver.1とVer.2において、通話のメッセージとシーケンスは全く同じと言うことが考えられます。この場合は、通話シーケンスにおいては、Ver.1のモジュールを使用すべきかVer.2のモジュールを使用すべきかが決定できないのです。そのため、通話シーケンスにおいては、Ver.1とVer.2の両方のモジュールを使用できるようにする必要があり、転送シーケンスにおいて初めてどちらを使用すべきかを決定する必要があります。
そのため、制御モジュール(SOAのサービス)の粒度を細かくする必要があります。ただ、細かくすると複雑度が増すため、実装が困難となります。そこで、

僕はサービスの階層化を進めればよいと思っています。
 現実の世界を考えると非常に簡単です。商品販売をサービスとして提供する会社は、別の会社から商品供給をサービスされています。さらにその会社は、別の会社から原材料を供給するサービスを受けている。しかも、それぞれの会社では、同じ会社から文房具を供給するサービスを受けていることもあるでしょう。

と言う話が出てきます。
上記から例であれば、「通話」というサービスを提供する制御モジュールがあり、そのモジュールが裏側でVer.1とVer.2のモジュールを制御しているというような階層化をしている感じです。
さらに、このときの制御が、非常に複雑となるため、XMLでは定義しきれず、スクリプト言語による定義を考慮しています。それが、下記の部分に相当する内容となります。
スクリプト言語というのは、この階層化された世界において、XMLとJavaコードの真ん中、つまりパワーユーザやエンドユーザーエンジニア向けのDSLとして大いに可能性があるわけです。例えば、BEPL仕様のスクリプト言語というのがあればよい気がしています。XMLで表現するBPELは難しいものですが、スクリプト言語であれば、可能性が広がるのではないでしょうか。

という理由がありまして、SIPropのアーキテクチャ概念は、SOAに相当似ているため、DIコンテナだのESBだのスクリプトだの書いてあるわけです。

Creative Commons License
This weblog is licensed under a Creative Commons License.