DDSインターオペラビリティ・プロトコル
今回は前回に引き続いて、OMGのデータ・ディストリビューション・サービス(DDS)についてお話します。DDSのネットワークアーキテクチャは、分散リアルタイム系アプリケーションの必須の条件を満たさなければなりません。遅延を最小にするために、初期の実装では、中継ノードをホップするごとに加算される予測しがたい遅延を回避するためにピアツーピアの通信が採用されていましたが、OMGメンバーは、DDSインターオペラビリティ・プロトコル標準を議定する際にもこのデザインを踏襲しています。
DDSインターオペラビリティ・プロトコルは、国際電気標準会議(IEC)のリアルタイム産業用イーサネット標準IEC-PAS-62030をベースに構築されています。PAS62030は、DDSとほぼ同一の産業用ネットワーク通信の必要条件を前提として設計され、産業界で広く普及しており、DDSの初期の実装(標準化前)もPAS62030上に構築されています。DDS標準プロトコルは、既に有効となっていたPAS62030標準にインターオペラビリティを追加するために、RTPSメッセージ、フォーマット、解釈とシナリオを定義しています。OMGのモデル駆動型アーキテクチャ(MDA)とUMLに基づき、プラットフォーム独立モデル(PIM)と、1つのプラットフォーム依存モデル(PSM)が用意されています(訳注)。
標準的なプロトコルによってデータを交換し合うことは、インターオペラビリティの問題を半分しか解決していません(しかも簡単なほうの半分)。残る問題は、ネットワーク上に(確実に、そして速く)DDSの独立した実装を2つのステップで発見することです。
最初のステップは、独立した実装同士がお互い見つける方法で、Participant Discovery Protocol(PDP;参加者発見プロトコル)と呼ばれます。そして次のステップは、Endpoint Discovery Protocol(EDP;エンドポイント発見プロトコル)と呼ばれ、ドメインごとにトピック同士をつなぐものです。数多くのPDPとEDPが考えられます(ネットワークが大きくなるにつれ多彩なプロトコルが想定されます)が、仕様では各プロトコルに最低限必要な単純なプロトコル(すなわち、Simple PDPとSimple EDP)のみを規定しています。仕様はDDSのノードが、他のノードを検出し接続するために、自らの存在を示すパケットを定期的に発信しなければならないと定めています。
DDSのためのUMLプロファイル
DDSとインターオペラビリティ・プロトコルは共にMDAに基づいて定義されており、DDSそのものが大きな統合化システムに適合しているために、プロファイルそのものも、非常に自然なものとなっています。プロファイルは、DDSの構成要素の定義を標準化し、システムアナリストや開発者が基本的な部分から組み立て直す必要もなく、簡単にモデリングできるようになっています。また、これらの標準化された要素を用いて、PIMからPSMへの変換を自動化することが可能で、MDA開発サイクルを短くすることができます。
拡張可能で動的に定義可能なトピックの型
これまでの議論から、DDSが扱うすべてのトピックの型がコンパイル時にすでにわかっていることを前提として設計されており、トピックのデータの値はさまざまに変わり得るものの、トピックの型そのものはソフトウェアの更新の際にしか変えられないということは明白です。ところが、巨大なネットワークシステム、なかでもコンポーネントが独立して作られるような環境下では、この前提は大きな足かせとなります。そこで、OMGで現在進行中のDDSの改定作業では、拡張可能で動的なトピック型をDDSに追加することを準備しています。これはデータ・モデルがシステムとともに進化するのを可能にし、動的に定義可能なトピックの型を導入します。この仕様改定によって解決されるもうひとつの問題はスパースデータ型と呼ばれるもので、比較的複雑な構造を持ち、送信ごとにごく一部しか変化しないようなデータ型(たとえば飛行計画)の取り扱い方です。
標準C++マッピング
UMLで記述されたPIMはインタフェース定義言語(OMG IDL)に変換され、DDSはIDL言語マッピングがサポートされるすべてのプログラミング言語で実装することが可能です。しかし、IDLからC++へのマッピングでは、C++言語固有の先進的な特性のほとんどが利用されません。OMGは言語に最適化したマッピングを標準化しています。新しいマッピングでは、メモリ管理および、文字列とベクトルの定義と使用(std::stringとstd::vector)をより最適化された形で行い、QoSと状態ために拡張可能なAPIを用意しています。
CORBAコンポーネントモデル(CCM)のためのDDS
CORBAコンポーネント・モデル(CCM)のためのDDSは、DDSがCCMにもたらした変化の面白さという点で、非常に興味深い仕様です。CCMにDDS固有の拡張を行うのではなく、呼び出しモードが加えられるのを可能にする一般的なフレームワークを構築し、一般的な機能を使って、CCMにDDSのサポート機能を付け加えました。
まとめ
DDSは、OMGの当初の予想をはるかに超えて幅広く使われていますが、今回紹介した新しい標準をサポートすることで、さらに適用範囲が広がっていくものと思います。これらの新しい機能により、より多くのアプリケーション群がOMG標準に基づくミドルウェアとプロトコルを使って、通信のセマンティックス要件を満たすことが可能になります。
引用と関連
- zDDS仕様
-
このWebページからリアルタイムシステムためのDDSの仕様や、DDSインターオペラビリティ・プロトコル仕様、そしてDDSのためのUMLプロファイル仕様をダウンロードすることができます。CCMのためのDDS仕様は、現在採択のための投票が行われています(2009年1月現在)。完了後は、上記のDDS仕様カタログページに掲載される予定です。OMGの会員は、組織のウェブサイトから、製作中の拡張可能DDSトピック型とDDS-C++マッピング標準の進展をモニターすることができます。
- xDDS関連のホワイトペーパー