CORBAの世界観です。GNOMEやD-Busも参照のこと。
(以下の文章は、分散オブジェクトについて何も分かっていない、経験や知識のない自分の書いた文章であるため、一般的な良識と比較して間違ったことを教えています。注意してご覧ください。)
CORBAは分散環境でシステム統合をするための技術。
CORBAにより、分散ネットワークにおいて、それぞれのマシンのリソースを多くの人の間で共有したり、分散ネットワーク環境で処理を分散させたり、あるいは適切なマシンに効率的に与えることができる。
CORBAの中核となる技術は、ORB。ORBは分散ネットワーク環境で、ローカルあるいはリモートのオブジェクト同士を結合し、ネットワーク透過に互いにアクセスして、メソッドを呼び出したり、メッセージをやり取りしたりできる。IDL言語で記述されたインターフェースはマッピングされ、プログラミング言語における差異はORBによって共通化される。オブジェクトがローカルにあるかリモートにあるのかを意識する必要はない。
また、CORBAは、プラットフォームや言語として、特定の技術に依存しない、業界標準の共通規格。また、コンポーネントのバイナリレベルでの再利用が可能。たとえばCOBOLで作られた特定機種のシステムのメソッドを、Javaで作られたネットワークで繋がった別機種から呼び出すこともできる。
このような特徴があることから、たとえばメインフレームや商用UNIXのプログラムをWindowsから使ったり、リソースを共有したり、たくさんのネットワークで繋がれたシステムをクラスタ化し、全体でひとつにすることができる。たくさんのオブジェクトを繋げて分散並列処理システムを築くこともできる。
CORBAに似た技術としてJavaのRMIがあるが、CORBAは業界標準の共通規格であり、特定の言語やプラットフォームに依存しない。どんなに閉じたシステム同士であっても、CORBAのインターフェース記述言語であるIDL定義ファイルによってインターフェースを記述し、ブローカーによってオブジェクト同士をリンクすることで、緩やかに繋がれた協調システムを築ける。RMIとCORBAの間をやり取りするCORBA上のRMIインターフェースとしてRMI-IIOPがある。
CORBAを基に構築されるサーバ側での再利用可能なコンポーネント技術としてCCMがある。これはEJB(Enterprise JavaBeans)と同様の技術であり、実際よく似ており、EJBコンテナがCCMコンテナに相当する。しかしながらEJBはJavaによる技術であり、CCMはCORBAによる技術である。そのため、CCMは言語やプラットフォームに依存しないポータブルな技術として利用できる。
CORBAはある意味でHTTPとよく似た技術である。WebサーバーとWebブラウザがアクセスすることによるWebサービスと、分散オブジェクト技術を比較し、どちらが正しいやり方であるかを決めようとする人も居る。しかしながら、それぞれはまったく異なる考え方に基づく技術である。よって、「HTTPとはまた違うやり方で、分散オブジェクトという考え方により、分散ネットワークシステムを構築する」というものであると言える。
以下は参考文献。
CORBAとGNOMEを使うことで、分散環境でのネットワークシステムが可能となる。
たくさんのパソコンがあって、さまざまなプラットフォームがあって、それがインターネットで繋がれていたとして、その中でひとつの「統合デスクトップ環境」が、分散されたそれぞれのマシンをひとつにできる。
また、COMと同様の技術であるため、エンジニアの視点から見ると、全てのネットワーク環境で、コンポーネントの再利用とネットワークインターフェースを通じたメッセージのやり取りやオブジェクトのリンクが可能となる。
すなわち、ひとつのマシンにとらわれることなく、ネットワーク上の全てのマシンを総合的に操作することが可能となることを、GNOMEは目指している。
後日注記:CORBAにより、異なるプログラミング言語やネットワーク上のオブジェクト(モジュール)がインターフェースとその記述言語IDLを通じてコミュニケーションすることが可能となる。
GNOMEも参照のこと。
GNOMEプロジェクトの創始者ミゲル・デ・イカザは、「UNIXをもう少しマシなものにしよう」という論文で、コードの再利用の行われないUNIXシステムを「最悪である」と論じました。
この論文のポイントは、
・UNIXではコードの共有や再利用がされなかった
・UNIXのどのプログラミング言語も、その言語の世界の内部でしか協調して動作しない
・UNIXのフィルタープログラムも、コンポーネント作成の最終的な答えではない
・UNIXの多くのアプリケーション(サーバ・GUI)は、libcやxlibを除いて、なんのコードの共有もなされていない
・Windowsでは「巨大すぎるモノリシックアプリケーション」として批判されるInternet Explorerも、COMコンポーネントを再利用することができる
・CORBAを用いたBonoboコンポーネントモデルによって、GNOMEは再利用可能なソフトウェアICとなる
詳しい内容は以下の論文を参照のこと。
後日注記:確かにミゲルの言うように、UNIXのCコードやライブラリがlibcとxlibぐらいしか再利用されていないというのは言えるかもしれません。ですが、再利用という点で言えば、プログラムのバイナリファイル単位での再利用はされていると思います。たとえば、sortプログラムなどがその例として挙げられます。sortをパイプやスクリプトから呼び出せば、自分でsortプログラムを書く必要はありません。Windowsとは再利用するためのレイヤーや方法が違うだけであり、UNIXでも十分にソフトウェアの再利用はされているでしょう。
GNOMEで使われていることで有名なCORBAだが、そもそもは分散システムでプラットフォームや言語の域を超えてオブジェクト同士がメッセージ通信を行う仕組み。
分散システムでネットワーク上でリモートにあるオブジェクトをローカルのオブジェクトモジュールのように使うことができる。
分散コンピュータの一例としてSETI@home(分散環境で地球外生命体を探すためのマシンリソースを提供する)などがある。かつてのUDプロジェクト(白血病や癌の調査のためにマシンリソースを提供する)も同じく分散コンピューティングの一例。
CORBA以外に、COMやJavaのRMI、あるいはさまざまなレベルのRPC(メソッドの遠隔手続き呼び出し)が同様の技術として挙げられる。
(Ruby Way 第2版 (Professional Ruby Series)を参考に執筆しました。)
GNOMEのベースになっているオブジェクト技術。WindowsのCOMと同様の技術。僕の理解では以下のようになる:
オブジェクト同士が言語やプラットフォームの違いを気にせずに相互にやり取りし、呼び出す、と言う技術だ。
主に、サーバーとクライアントが繋がる時に、サーバー側のCORBA ORBとクライアント側のCORBA ORBがリンクし、互いに相互にやりとりするように動作する。
CORBAの解説と実装例は以下を参照のこと。
(以下の内容はにわか知識で書いているため、間違っているかもしれません。注意してください。)
CORBAは、僕の勝手な理解を言うと、アプリケーションサーバーとクライアントに分けることで、XサーバーとXクライアントのように、コアの万能コンポーネントと、小さなクライアントプログラムを分けることが出来る。
これを最近の流行で実装すると、monoになる。
要は、アプリケーションサーバーを外部から操作する。そこが賢いのが、CORBAとJavaだ。だから、GTK+のLispインタープリタなんか作る意味がない。Bonoboをコマンドから呼んでもおかしくは無い。
そして、万能コンポーネントはオブジェクト指向で実現すると、本当に万能になる。
と言うことになる。大型コンピュータで使うのかもしれない。ただ、CORBAは成熟した技術らしい。
GNOMEはネットワーク・オブジェクト・モデルという考え方によって作られている。
ここには複数の意味がある。
1.ネットワーク通信によって、言語とプラットフォーム非依存なコンポーネント連携を行う。
2.X11のように、アプリケーションをリモートから操作し、さまざまなネットワーク上のアプリケーションが1つになって通信できる(ネットワーク上のオブジェクトが1つの連携したアプリケーションになる)。
3.GLibやCORBAなど、GNOMEコンポーネントはとてもオブジェクト指向的である。
GNOMEのコンポーネント・フレームワークは、コンポーネントを書くのを簡略化し、それらのオブジェクトがCORBAを話すので、Bonoboコンポーネントは、ネットワーク上の別のところにあるWindowsマシンで動いている別のCORBAコンポーネントと話すことが出来る。
特徴 | 説明 |
---|---|
ネットワークでの分散処理 | ネットワーク上で、WindowsやLinuxなど、 さまざまなCORBAアプリケーションが互いに「インターフェース定義」によって通信できる。 ライブラリやフレームワークのような「インターフェース」をネットワークを介して行うことができる。 |
言語・プラットフォームに依存しない | たくさんの言語が使え、たくさんのOSで動く。 このことにより、多くのプラットフォームを混合させたシステム全体をアプリケーションにできる。 |
コンポーネントの再利用 | 既存のコンポーネントをバイナリレベルで再利用できる。 |
ということが、CORBAの優位性である。
きちんと解説すると:
まず、プログラムコードの機能・呼び出し情報をインターフェース言語IDLで記述し、それをさまざまな言語のラッパーによってマッピングする(カプセル化)。
そして、マッピングした情報に基づいて、ネットワーク分散環境上で、ローカルホストのプログラムからネットワーク上のプログラムのメソッドをリンクして呼び出せるようにする(分散オブジェクト)。
これにより、ネットワーク上のどんな言語でも、どんなシステムでも、プログラムコードを再利用することができる。
ただのライブラリのインターフェースではなく、言語非依存、プラットフォーム非依存で、ネットワークによって繋がる。たとえば、UNIXのワークステーションとWindowsのアプリケーションで、ネットワークをまたいで、それぞれ別々の言語で、分散環境で協調動作するシステムを作ったりすることが出来る。
クラスタも参照のこと。
IDL定義ファイルは、C++やJavaのクラスファイルのような見た目をしており、そんなに難しくはない。これをサーバー側とクライアント側のORBを使った各種言語のソースコードで使って、多言語での分散ネットワーク通信を行うことができる。
以下のサイトにIDL定義ファイルの例がある。
GNOMEがCORBAで何をやりたいのかと言うと、ネットワーク上のさまざまな分散オブジェクト(関数やリソース)を一緒にして、「たくさんのコンピュータを一緒にしてひとつのインターフェースで操作する」ということをやりたいのだ。
要するに、Plan 9のような分散OSを、UNIXの基盤の上で実現したい、といった感じである。
あるいは、WindowsもLinuxも全部まぜた上で、あらゆる言語を使ってネットワーク上に分散した全てのコンピュータ上でひとつの操作体系からあらゆる場所のリソースを操作したい。
まさにこれは壮大な目標である。
ただ、実際のところは、単なるコンポーネント技術にすぎない。WindowsのCOMと同様の技術であり、「UNIXをWindows並みに新しくする試み」であると言える。UNIXのネットワークは化石のようなシステムである。socketを使って相互に通信するだけではなく、CORBAを使うことでネットワーク上の分散システムを高度に実現できる。
Plan 9も参照のこと。
僕は、CORBAでできることは主に4つあると思う。
1.家庭内あるいは会社内での、ローカルな分散システムの構築。どのパソコンでも共有されたリソースにアクセスできる。
2.さまざまな場所にあるサーバーのサービスと、自分のローカルなアプリケーションを結びつけた利用。HTTPやX11のように、プロトコル的な、サービスを提供するアプリケーションサーバーとクライアントとの間でのやり取りを行う。
3.世界中のたくさんの人々を巻き込んだ、分散・クラスタネットワーク。癌・白血病を解析するUDや地球外生命体を発見するSETI@homeのようにたくさんのコンピュータ資源を用いた分散システム。
4.たくさんのプラットフォームや言語を混在させた上でのネットワーク・コンポーネント再利用システムの構築。WindowsやUNIXとLinuxを混在させ、Pythonのような新しい言語からCOBOLのような古い言語のシステムをネットワークのたくさんの分散コンピュータから操作するかのようなシステム。
CORBAはこうしたシステムをサーバー・クライアントのコンポーネントシステムとして実現することができる。
CORBAやCOMの利点として言えるのが、別々のマシンがひとつのシステムとして通信する、ということ。
これは、ネットワーク接続されたリモートコンピュータの実行形態として、HTTPサーバとHTTPクライアントの関係と違い、コンポーネント・オブジェクトとして通信が可能であると言える。
つまり、HTTPのように、通信プロトコルによって通信するのではなく、ライブラリ関数やクラスインターフェースのような形で、ネットワーク通信によるアプリケーションを利用することができる。
実際のところ、CORBAは分散システムではあるものの、既存システムの再利用のために使われることが多い。
たとえば、COBOLで組んだ巨大システムを完全にリプレースせず、Javaなどから利用するためにCORBAのコンポーネント再利用技術を用いて、ネットワークインターフェース部分だけを拡張する。
JavaのRMIやJavaBeansなども、CORBAと同様の再利用可能なコンポーネント技術である。
後日注記:この記述は間違いかもしれません。CORBAは分散オブジェクト技術であり、再利用可能なコンポーネント技術ですが、既存システムのラッパーやアダプターではありません。
CORBAやCOMの再利用可能なコンポーネント技術について言えば、「ある程度の機能のセットをそれぞれの環境で提供し、利用する」と考えるといいでしょう。
たとえば、COMを利用したActiveXなどは、ある程度の機能をコンポーネントとして提供し、それをそれぞれのアプリケーションから再利用します。
DirectXなどもCOMを利用して実装されていますが、CORBAやCOMはこのように、ある程度の機能をそれぞれのアプリケーションの間で共有すること、これをベースとしています。これはGUIのパーツだけではなく、ファイルの読み書きなど、多岐に渡ります。
BonoboはGNOMEのコンポーネントシステム。CORBAをベースにしている。
代表的なBonoboコンポーネントにはGnumericスプレッドシートなどがある。コンポーネントとしてGnumericの表計算機能やビュー画面などを使うことができる。
GNOME 3の新しいリモートでのプロセス間通信(インターフェースを含む)であるD-BusについてはD-Busを参照のこと。
GNOMEはCORBAと呼ばれるコンポーネント技術を使って開発されています。
Bonobo(GNOMEのコンポーネントモデル)について。