web-dev-qa-db-ja.com

CORBAはなぜ人気を失ったのですか?

CORBAについて、10年以上前に蜂の膝だったことを考えると奇妙な言葉でしか話されません。 CORBAが恵みから落ちたのはなぜですか?純粋に実装が悪かったのでしょうか、それとももっと根本的な何かがありましたか?

67
MrEvil

CORBAだけでなく、一般的にRPCです。これには、DCOM、Java-RMI、.NET Remotingなどのすべてが含まれます。

問題は基本的に、分散コンピューティングがローカルコンピューティングと基本的に異なることです。 RPCはこれらの違いが存在しないふりをして、リモート呼び出しをローカル呼び出しのように見せます。しかし、優れた分散システムを構築するには、それらの違いに対処する必要があります。

Bill Joy、Tom Lyon、L。Peter Deutsch、James Goslingは、8Fallacies of Distributed Computing、つまり、分散プログラミングの初心者が真実であると考えるものを特定し、しかし、それは実際には誤りであり、通常はプロジェクトの失敗またはコストと労力の大幅な増加をもたらします。 RPCは、同じ誤った仮定に基づいて構築されているため、これらの誤りの完全な具体化です。

  1. ネットワークは信頼できます。
  2. 待ち時間はゼロです。
  3. 帯域幅は無限です。
  4. ネットワークは安全です。
  5. トポロジーは変わりません。
  6. 管理者は1人です。
  7. 輸送費はゼロです。
  8. ネットワークは均一です。

これはすべてローカルコンピューティングに当てはまります。

たとえば、ローカルでメソッドを呼び出すと、呼び出し自体alwaysが成功します。確かに、呼び出されたメソッド自体にエラーがある可能性がありますが、メソッドの実際のcallingは常に成功します。そして、結果は常に返されます。メソッドが失敗した場合は、エラーが通知されます。

分散システムでは、これは真実ではありません:callingメソッドの動作itself失敗する可能性があります。つまりあなたの側からは、メソッドを呼び出したように見えますが、呼び出しは実際にはネットワーク上で失われ、メソッドに到達しませんでした。または、メソッドは呼び出しを正常に受信して操作を実行しましたが、結果が戻ってくる途中で失われました。または、メソッドは失敗しましたが、エラーは失われました。

レイテンシと同様:ローカルでは、メソッドの呼び出しは基本的に無料です。メソッドitselfは、答えをcomputeするために任意の時間がかかる場合があります、ただしcallは無料です。ネットワーク経由では、通話に数百ミリ秒かかる場合があります。

そのため、CORBAを含むほとんどすべてのRPCプロジェクトが失敗しました。

逆の方法でも問題なく機能することに注意してください。あなたがそのふりをした場合、all呼び出しはremote呼び出しの場合、発生する可能性のある最悪の事態は、パフォーマンスが少し低下し、アプリに使用されないエラー処理コードが含まれていることです。たとえば、Erlangはこのように動作します。

Erlangでは、プロセスは常にに別々のヒープとガベージコレクターを持ちます。同じVM。あるプロセスから別のプロセスにデータを渡す場合、そのデータは常にですプロセスが異なるマシン上にある場合と同じように、コピーされます。非同期メッセージが送信されると、呼び出しは常に行われます。

したがって、ローカルとリモートの呼び出しを同一に見えるようにすることは問題ではありません。それらをlocal呼び出しのように見せることはそうです。

CORBAでは、問題は実際にはそれよりも少し複雑です。彼らは実際にはdidローカル呼び出しをリモート呼び出しのように見せますが、CORBAは委員会によって設計されたため、リモート呼び出しは信じられないほどでした非常に不合理な要件を処理できる必要があったため、複雑です。そして、その複雑さは、ローカルコールであってもeverybodyに強いられました。

繰り返しますが、Erlangと比較すると、複雑さははるかに低くなります。 Erlangでは、プロセスへのメッセージの送信は、Javaでのメソッドの呼び出しほど複雑ではありません。インターフェースは基本的に同じですが、期待されるものだけが異なります。Javaのメソッド呼び出しは瞬時で同期的であることが期待されています。Erlangでは、メッセージ送信は非同期的であり、レイテンシが見えることが期待されています。 。しかし実際にはusingそれらは単純なローカルプロシージャコールよりも複雑ではありません。

もう1つの違いは、Erlangは、プロセス内でのみ発生し、常にローカルである関数呼び出しと、プロセス間で発生し、リモートではないと常に見なされるメッセージ送信を区別することです。 CORBAでは、すべてのメソッド呼び出しがリモートであると見なされます。

146
Jörg W Mittag

CORBAやDCOMなどの分散オブジェクトテクノロジーには、粒度に関する問題がありました-実装はネットワーク上で実行するには「おちゃつき」になりがちでした。また、一般にリークされた実装の詳細により、ソリューションが脆弱になりました。

これらの懸念への反応として、サービス指向が目立つようになりました。

9
Sam