これは少し耳障りに聞こえるかもしれませんが、基本的に ESB が必要な場合は、ESB が必要であることがわかります。
ほとんどのユースケースでは、ESB は問題を探すソリューションです。これは、ほとんどのシナリオ向けに設計されたソフトウェアのスタックです。ほとんどの人は、それを正当化するのに十分な種類の処理を行っていません。「エンタープライズ」の「E」はここで注目に値します。
簡単なケースでは:
tail -F server.log | grep SEVERE >> severe.log
これは、ESB シナリオのインスタンスの簡単な例です。
「しかし、それは単なる UNIX コマンド パイプラインです!」
はい、正確に。
「ESB」の部分は「|」です。そして>>"
ESB は、モジュールをリンクしたり、トラフィックを監視したり、ファンアウトや結合などのあらゆる種類の奇抜なシナリオを設計したりできるランタイムです。
ESB は、多数のソースを読み取り、多数の宛先を書き込むための多数のコネクタを備えていることで注目に値します。それらは、かなり粗い論理ブロックを使用して処理するためのより複雑なグラフとワークフローを織り込むことで有名です。
しかし、ほとんどの人が通常行うことは次のとおりです。
input -> DO_STUFF -> output
ESB を使用すると、次のことが得られます。
ESB[input -> DO_STUFF -> output]
実際、ほとんどのパイプラインはそれほど複雑ではありません。再利用できない 1 回限りのロジックを持つ傾向があり、人々はそれを 1 つのロジック モジュールにまとめる傾向があります。
ええと、Perl スクリプトでそれを行うことができます。
ESB の長いパイプラインは、非効率よりも非効率になる傾向があります。汎用モジュールとの間でデータを大量にマーシャリングします (バイナリ ペイロードを使用することはめったにないため)。
たとえば、CSV が入力され、XML に変換され、処理され、別のステップへの入力用に XML が XML として出力されます。XML はそれをマーシャリングし、処理し、さらに別のステップのために XML に変換します。CPU が 400% (マルチコア FTW) に達するまで、すすぎと繰り返しを繰り返します。
次に、「ねえ、これらのモジュールを 1 つのルーチンにまとめてドロップすると、この XML ジャンクはすべてスキップされます!」という人がいて、「入力 -> DO_STUFF -> 出力」という結果になります。
カジュアルなアドホックな統合を行う必要がある Web サービスが多数ある大規模なシステムの場合は、問題ありません。あなたがそれをたくさん行うビジネスにいるなら、彼らは本当にうまくいくことができます. 数十のパイプラインがある場合、それらを管理する運用面で役立ちます。
しかし、複雑なパイプラインの場合、多くのステップがある場合、特に実際のボリュームが関係している場合は、プロトタイピングを超えてあまり良いアイデアではないかもしれません. 統合するシステムによっては、選択の余地がないことに注意してください。
そうでない場合は、立ち上がる必要がある単一のインターフェイスがある場合は、それを実行してください。Perl、Java、C# など、あらゆる方法で実行してください。100MB の奇妙なインフラストラクチャと複雑さを使い果たしてスプールし、学習、習得、維持する必要はありません。
繰り返しになりますが、ESB が必要な場合は、ご存知でしょう。本当。異種のものを組み合わせて構築したシステムが何であれ、それと戦い、これらすべてがどれほど苦痛であるかについて同僚と話し、あるベンダーへのサイトへのリンクに出くわして読むでしょう。ホワイト ペーパーを読んで「それだ!」と言ってみてください。