Typemock: その過去・現在・未来
Eli Lopian氏率いるTypemock社の過去・現在・未来について、インタビュー形式にて記します。

作者 Boris Lublinsky, 翻訳者 松本 清一 投稿日 2007年8月14日 午後11時47分
SOAの出版物のほとんどは、個々のビジネスサービスの定義と実装に集中しています。エンタープライズソリューションの構築は、通常、現存する多くのエンタープライズサービスの結合を必要とします。これらのコンポジットサービスは、他のサービスをよりハイレベルなソリューション等へ、順々に再帰的に組み立てることができます。そういったビジネスサービスの再帰的なコンポジションは、既存のビジネスサービスをベースとした新しいソリューションをすばやく構築することを可能とする、最も重要なSOAの特徴の一つです。個々のビジネスサービス(とそれらのコンポジション)が増大するにつれ、新しいエンタープライズソリューションはより簡単なものへとなってゆきます。
このコンポジションのアプローチは、階層的に分解されるシステムの実装に自然とフィットするものです。階層の全てのレベルが、低レベルでの(コンポジット)サービスの実行を協調する、個々のコンポジットサービスとして実装されます。それは、一連のアクティビティを作成することによるワークフローシステムのハイレベルなソリューションをモデリングするための共通の方法でもあります。そのアクティビティのそれぞれが、低レベルのビジネスプロセスや、人やプログラムによって実行される何らかのタスクに対応しています。すべてのコンポジットサービスが、それを利用する外部のシステムから監視、もしくは割り込みが発生している間は、元々の呼び出しを除いた全てのサービスコンシューマとの機能的なインタラクション1をサポートしません。
ブラックボックスのコンポジションアプローチ(即ち、階層的なコンポジション)は、複雑なものを扱う方法として非常に強力なものである一方、コンシューマが、サービスの実行結果を中間結果として、コンポジットサービスの実行の制御を必要とする状況もあります。そのような実装には、対話的なコンポジションがサポートされています。この場合も、コンポジットサービスの実装がサービスコンシューマから完全に見えないようになっていますが、所定の中間結果を見ることができます。(即ち、グレーボックスです)
これは、コンポジットサービスとサービスコンシューマのための公開されている複数のインターフェースにより、明確な対話状態(対話状態と実行状態の特徴に関しては[4]を参照して下さい)をサポートすることによって実現可能となります。つまり、初めに、あるサービスの呼び出しを行って中間結果を受け取り、それをベースに処理を制御します。(図2)
図2 対話的なサービスコンポジション
このタイプのコンポジションは、コンシューマとプロバイダのインタラクションを、データと制御のシグナルをやり取りするピアとして見ることができます。
両方のインタラクションのスタイルは、コンポジション設計の実現可能な方法です。厳密な階層的なサービスコンポジションの利用方法は、ワークフロー技術の成功によって立証されているように、複雑なビジネスプロセスのモデリングアプローチとして有用です。一方、対話的なサービスコンポジションは、ネゴシエーションや結果のモニタリングなどといった、コンシューマとサービス間のメッセージのインタラクションを明確にモデリングすることを通じて、汎用的なビジネスインタラクションを容易にする表現力を持っています。
コンポジットサービスの設計は、サービスインタラクションの定義を必要とするだけでなく、コンポーネントのセットやそれらの実装に対する接続形態も必要となります。コンポジットサービスの接続形態には、以下の二つの主要な設計アプローチがあります。"Service–Oriented Composition in BPEL4WS"(英語・PDFファイル)
メディエータベースの接続形態(図3)は、サービスコンシューマとコンポジションに加わっているその他のサービス(コンポーネントサービス)の実行の制御の相互作業を行う、特別な役割をもったメディエータと呼ばれる単体のサービスを担っています。
図3 Mediatorベースのコンポジションの接続形態
メディエータベースの階層的なサービスの場合、 メディエータが、特定の制約内で特定の目的を達成するための、コンポーネントサービスの呼び出し順を定義したオーケストレーションスキーマを実行します。異なるアプローチとして、オーケストレーション言語/エンジンを含む、OWL-Sコンポジションや Petri nets等は、メディエータの実装として利用することが可能です。
メディエータベースの対話的なサービスの場合、 メディエータは、コンシューマの入力ベースとしたサービスの状態と状態遷移を実装します。典型的なメディエータの実装は、遷移システムや有限状態マシンをベースとしています。
peer-to-peerの接続形態の場合、メディエータサービスという概念はありません。参加している全てのサービス(コンポーネントサービス)が、(一部の)コンポジットサービスを実行します。(図4)
図4 Peer-to-peerコンポジションの接続形態
この場合、あるコンポジションは、メッセージングテンプレートとそれにプラグインできるコンポーネントサービスとして定義されています。ターゲットの振舞いは、システムによって実現されるべき許可されたメッセージ交換のシーケンスの集まりとして定められています。一般的に、この接続形態は対話的な状態(対話的なインタラクションの実装に必要なもの)をサポートするのに必要なメカニズムが欠けているので、階層的なサービスの実装のためだけに利用されます。
サービスメディエータの最も簡単な実装方法は、一般的なプログラミング言語を使用することだと思われます。(図5)
図5 コンポジットサービスのプログラム実装
不運なことに、このソリューションにはいくつかの欠点があります。
コンポジットサービスの実装のためのフレームワークがいくつか存在する(例えば WS-CAF(英語))という事実をよそに、コンポジットサービスのプログラム実装は正しいアプローチではないように思われます。
コンポジットサービスの実装の代わりとなりうるアプローチとして、イベントベースのコンポジションがあります。 このコンポジション実装は、イベントベースのサービスインタラクションを基本としています。
サービスコンシューマは、パブリッシュ/サブスクライブを仲介としてイベントをパブリッシュし、それらを実際のサービスコンシューマに渡します。(図6)
図6 パブリッシュ/サブスクライブを通じたサービスインタラクション
このケースの場合、パブ/サブエンジンは全ての仲介役としてサービスコンシューマとプロバイダの間の分離したレイヤーを提供し、それらは、コンポジットサービスの非常にフレキシブルな実装を可能とします。コンポジットサービスは以下のように実装されます。(図7)
図7 イベントを利用したコンポジットサービスの実装
そのサービスコンシューマは、イベントに許可されたサービスのセットに対し(パブ/サブエンジンを通じて)渡された起動イベントを送信します。それぞれのサービスは、次々に代わりとなるメッセージを送信し、さらに別のサービスのセットを(パブ/サブエンジンを通じて)呼び出します。このイベントのシーケンスは、効果的にコンポジットサービスを作成します。パブ/サブを通じたコンポジットサービスの実装には、以下の特徴があります。
図8 オーケストレーションエンジンを利用したコンポジットサービスの実装
この実装は、コンポジット実装のための一般的な言語の代わりにオーケストレーション言語を使用することで、プログラム実装を改善しています。 これは、ビジュアルエディタを利用することでコンポジションロジックのプログラミングや保守が可能となります。そして、特にこの種のプログラミングを単純化するように作られています。それは、非同期呼び出し、状態管理、等に対するビルトイン機能を提供しているオーケストレーションエンジンのパワーを利用することもできます。コンポジットサービスの実装に対するオーケストレーションエンジンの利用により、以下の利点があります。
上記を踏まえ、議論した三つのアプローチから、オーケストレーションベースの実装は、コンポジットサービスの作成の最も現実的な方法であるように思います。
サービスコンポジションは、以下の利点によりSOA実装の重要な役割を果たしています。
Boris Lublinsky氏は、ソフトウェアエンジニアリングとテクニカルアーキテクチャーの経験を25年以上持っています。この数年間、彼はエンタープライズアーキテクチャー、SOA、プロセスマネジメントに力を入れています。彼は、これまでに数多くの講演を行い、書籍を書いています。様々な雑誌に40を超える技術記事を書き、 (Avtomatika i telemechanica、IEEE Transactions on Automatic Control、Distributed Computing、Nuclear Instruments and Methods、Java Developer's Journal、XML Journal、Web Services Journal、JavaPro Journal、Enterprise Architect Journal、EAI Journal など) で発表しています。現在勤務している大規模な保険会社では、SOA ストラテジーおよびフレームワークの開発、保守などを職務としています。彼の連絡先は、blublinsky@hotmail.comです。
1. Ali Arsanjani. Toward a pattern language for Service-Oriented Architecture and Integration, Part 2: Service composition. Developworks, December 2005.
2. Richard Hull, Jianwen Su. Tools for Composite Web Services: A Short Overview.
3. Rania Khalaf, Nirmal Mukhi, Sanjiva Weerawarana. Service–Oriented Composition in BPEL4WS.
4. B. Lublinsky. Defining SOA as an architectural style. IBM Developworks, January 2007
5. Web Services Composite Application Framework (WS-CAF)
この論文では、仮想化やクラウドサービスの複雑なメリットと実世界における応用を検討します。さらに重要なこととして、Contegixが複雑な問題の解決に仮想化を実装している方法や、仮想化を使うべきではないケースについて詳細を提供します。
Fiberはユーザに試練を課すことなくこの考えを実装する有益な並行性ツールとして、ライブラリが2つあります。まさにこのためのソリューションとしてあるのがNeverBlockライブラリです。私たちはNeverBlockプロジェクトのMohammad A. Ali氏とRevactorライブラリのTony Arcier氏に話を聞きました。
システムの保守容易性や拡張性を確保するためのベスト・プラクティスに関する記事は数多くありますが、この記事では避けた方がいい、いくつかの悪習慣(ワースト・プラクティス)を強調します。
この記事では、私達がどのようにして大規模(240人月、10万行強)でインドとオランダの開発者も参加したスクラム・プロジェクトを成功させたのかを示しています。
Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。参加者はカンファレンスで各々の発表や、各セッションへの参加、諸外国のエンジニアとの出会い、ステージ上で DearXPを熱演などの様々な思い出を抱えて、無事日本に戻ってきました。
マイクロソフトのRobert Bellが、SilverlightとJavaを使用したインターオペラビリティのシナリオを紹介し、サンプルコードを例にとってアーキテクチャの手引きを提供します。
No comments
返信