サービス指向のあいまいさ

2005年7月1日

Thoughtworksが私をクライアントの目の前に出してしまったときには、「SOA (サービス指向アーキテクチャ)についてどう思いますか?」という質問をされるのが決まりです。SOAは人によって意味するところが大きく異なるので、この質問に答えるのはほぼ不可能です。

  • SOAとはソフトウェアをウェブサービスとして公開することだと考える人もいます。このグループはさらに、さまざまなWS-*標準を期待する人と、http上のXMLのあらゆる形式を受け入れる人(XMLでもないこともある)に細分化されます。
  • SOAにはアプリケーションが消えゆくアーキテクチャが伴うと考える人もいます。その代わりに、ビジネスの機能とデータを供給するコアサービスがあり、コアサービスによって提供されるものを一緒にまとめるプレゼンテーションを適用するUIアグリゲーターによって分離されます。
  • SOAとは、(通常はXMLベースの)何らかの標準構造を通じてシステムが他のアプリケーションと通信することを可能にすることだと考える人もいます。最悪の場合、これは「アングルブラケット付きCORBA」ということになります。より洗練された形では、組織の標準的なバックボーンの何らかの形を生み出し、アプリケーションをそれで動作させることが含まれます。このバックボーンはhttpを含んでも含まなくてもかまいません。
  • SOAとは、(主に)非同期メッセージングを使用してドキュメントを異なるシステム間で転送することだと考える人もいます。これは本質的に、EAIベンダのロックインなしですべての費用のかかるEAIベンダなしのEAIです。

SOAの良いところはデータとプロセスを分離すること、データとプロセスを組み合わせること、ウェブ標準を使用すること、ウェブ標準に依存しないこと、非同期であること、同期であること、同期的であるかどうかに関係のないことなどだと聞いたことがあります。

私は数年前のMicrosoft PDCにいました。SOAのプレゼンテーションを1日かけてじっくりと見たのですが、最後にSOAパネルに登壇しました。私は冗談を言うと、他にSOAが何であるかを理解している人はいないかと尋ねました。その後、誰かがこのあいまいさはオブジェクト指向でも起こるものだとコメントしていました。それはある意味真実ですが、オブジェクト指向の意味については異なる見方がありました(そして今も)。しかし、サービス指向のあいまいさはオブジェクトのあいまいさよりもはるかに少ないです。

それでどうすればよいでしょうか?まず、SOAという名称のもとにどれほど多くの異なる(しかもほとんど互換性のない)アイデアがあるかを常に覚えておく必要があります。これらはSOAとは無関係に適切に説明(および命名)する必要があります。SOAは「コンポーネント」や「アーキテクチャ」に加えることができる意味論のない概念になってしまったと思います。それは救われることはありません。そのため、具体的に意味のあるアイデアは独立した考え方になる必要があります。