考察:「分散処理ミドルウェア」

by ご近所のきよきよ


 

 グリッドとか、クラウド、ユビキュタスというものを実現するミドルウェアとはどんな物かなと考えてみました。どこからも特定のプログラム(プロセス)につながって、最適なサイトでそのプロセスが実行される。そうして、ミドルウェアの基盤はSOAで設計されているというような拡張性の高いものになっている。ちょっと考えてみました。もう実現されているかもしれませんけれど、春の日差しのもと、うつらうつら読んでみてください。

 ネットワークと言いますとセキュリティの確保のため、データをヘッダーとかトレーラーで包んで、トンネル技術を使う物なのですね。それを拡張して、システムの性能計測のためのデータもトレーラーの所に設定するようにするというのが基本的なアイデアです。ネットワークを越えてデータを送ることには、そのデータ転送時間を計数するタイムスタンプを付加する。プロセスの実行には開始と終了の時間をスタンプする。そうすると管理プロセスはネットワークの効率を正確に把握できるようになります。ネットワークのノードの生き死にも把握できますから、ネットワークトポロジーのダイナミックな変換もできます。


 ネットワークのノードはRTミドルウェアで構築されているとします。各ノードのコンポーネントがネットワークを越えてデータとか制御を(メッセージ)渡す場合、特別なコンポーネント(コネクションコンポーネント)を介すようにします。このコンポーネントはヘッダーとフッターをデータに付加します。性能計測用のタイムスタンプも押します。また、このコンポーネントから同じRTミドルウェアの配下のコンポーネントにデータを送るときにはヘッダーとフッターを削除します。そのとき、どのコンポーネントにデータを送ったかをタイムスタンプと同時に覚えて起きます。コンポーネントは固有の名前で管理し、URLとかIPとかで実際のアドレスと動的に対応付けられるようになっていることも必要です。名前に解決は、このメッセージ渡しをするネットワーク管理コンポーネントがやるわけですが、もっと大きなネットワーク全体については、専用のコンポーネントを設けて、どこかのノードで実行、集計することになります。それは、DNSの役目も果たすわけです。


 性能データによって、ネットワーク内のどのコンポーネントを使ったらよいかをメッセージ渡しをするネットワーク管理コンポーネントは計画していきます。それは、コンポーネントの名前とURLやIPとの対応付けを動的に変えることによって実現します。


 あるコンポーネント(コンポAとします)が処理を要求します。その処理コンポーネントをプロセス名X(コンポXとします)とします。IPとかURLが指定されていないと、この処理要求メッセージはメッセージキューバスによってコネクションコンポーネントに渡されます。

 コネクションコンポーネントは自分のノード内で同じ名前のコンポーネントがあればそこにメッセージを転送します。制御の戻りはもちろん、コネクションコンポーネント自身にします。また、コネクションコンポーネントから制御を戻すのはコンポAであるように記録を取ります。ノード内にコンポXが無いときにはシステム全体を管理するコネクションコンポーネントにメッセージを送ります。この管理コンポーネントはコンポXのアドレスを得て(IPとかURL)、コンポAの呼び出しターゲットメッセージ部のコンポXの所にこのアドレスを設定して、コンポXのあるノードのコネクションコンポーネントにメッセージを転送します。


 コネクションコンポーネントのネットワークは連絡がとれたノードの間で、自分の知っている隣人ノードを知らせ合うことで構築を実現します。これは、P2Pの技術でいいと思います。


 
 

おわり