ESBのわかりにくさ (ESB本の感想に代えて)

CORBAに比べるとESBはつかみ所がありません。CORBAにはIDLというインタフェース定義言語があって、IIOPという通信プロトコルがありました。ESBにはIDLも通信プロトコルもありません。ESBを構成する材料としては、HTTP, XML, SOAP, MOMが使われているようです。でも、ESBのプロトコルSOAP/HTTPでもMOMでも良いというし、接続するサービスはESBコンテナ+プロトコルアダプタを介して接続できればなんでも良い。これだと、WebサービスをMOMを使って繋げばESBなのか、ということにもなりかねません。たぶん、重要なのは、通信プロトコルのような個別インフラの規格ではなく、もっと上位のコンセプトにあると思います。

ESBでは、サービスを開発する人はメッセージの受信/送信の口を自分の好きな言語で実装して、EJBコンテナを介してメッセージをバスに送信するようです。つまり、バスの通信モデルとしては従来からあるMOMとそれほど違わない。疎結合、非同期通信、データ中心のモデルです。サービスAからサービスBにアクセスするには、サービスBの既定義のインタフェースをたたくのではなく、サービスBが理解できるデータを送信する。この流れるデータをXMLで表現すれば、将来にわたって拡張性に富んだメッセージを定義できるでしょう。

非同期なバスだからといって同期通信ができないわけではありません。SOAP over JMSという組合せがすでにあるように、メッセージの往復によってRequest/Replyを実現すれば(つまりESBコンテナががんばれば)、従来のWebサービス通信をバスの上に流すこともできるでしょう。その意味で、バスにつなぐendpointとしてのアーキテクチャ上の制約は大きくないように思います。実際には、従来型のシステムからESBへ移行できるかどうかは、ESBコンテナの機能やアダプタの品揃えに依存するのでしょう。

ESBがわからないのは、SOAPやMOMといった個別の規格にとらわれているるからでしょう。ESBが本来やりたいと思っていることに立ち返って考えて見ます。ESBを、標準技術を使ってMOM相当の非同期通信モデルを提供するバス、そしてその中を流れるのがメッセージ、サービスはメッセージを受けてイベント駆動で動く、というように抽象的に考えてみます。ESBにつながれたサービスは、自分宛のメッセージを受信すると、それを解釈・実行し、その結果を次のendpointとなるサービスへ送信します。次のendpointを探すのには、そのサービスが持つルールを使います。メッセージに含まれるReply先に送るのか、メッセージの内容に応じて動的に宛先を決定するのか、一斉同報的にばら撒くのかはルール次第です。

インテグレーションの基本は掛け算を足し算にすることです。Javaで、(アプリケーション) X (OSの種類)のバイナリコードを用意する必要がないのはバイトコードのおかげ。PostScriptは印刷アプリケーションが特定のデバイスに依存しないようにしてくれます。しかし、この考え方を大規模なシステム間のインテグレーションまで適用すると無理がある。そうESBは提唱しているように思います。多様な企業間システムを単一プロトコルを結ぶという考え方自身が現実的ではないのでしょう。のりもテープも使う、だけどユーザからみたら同じバスに見える。それがESBではないでしょうか。

ESB本を読むと、ESBはアプリケーションと統合ロジックが分離されているのが特徴と書かれています。ESBが目指すのは企業や技術の垣根を越えた統合の広がりです。そのためには通信プロトコルを統一するのではなく、抽象的なバス上で抽象的なendpointをつなぐという結論に至ったのでしょう。冒頭に書いたESBのつかみどころの無さは、この抽象的な部分がベンダー間で普遍な、一般的なものとして認知されていないからではないかと思います。

本書を読むと、ESBがあると、こんなに良いことがあるということが良くわかります。しかし同時に、本書で不満なのは、この抽象的なバスの上の抽象的なendpointをどのように定義するのか、それらをどのように管理するのかというESB本体のイメージがさっぱりわかりらないことです。この本の全体的なわかりにくさは、ESB実装への要求や技術要件は説明されているものの、バス自身の肝となる内部構造や動作がまったく説明されていないことによるのだと思います。だから、endpointの管理がどうなっているかわからない以上、ESB自身がスケーラブルであることはこの本からは読み取れません。

このわからなさは、アニメ「巨人の星」において、消える魔球の秘密の80%まではわかったけど、残り20%がわからないというイライラ感、のようです。Inside ESBやEssential ESB Programmingのような本がないとだめかな。