説明

ルーティング方法、ルーティング装置、ルーティング/キャッシング方法、ルーティング/キャッシング装置及びネットワーク

【課題】分散型ネットワークのコア内のルータにおいて、サービス品質保証を行ったうえで、例えばビデオ、音楽、ソフトウェア等のデジタルコンテンツの配信サービスを提供する。
【解決手段】ルータ12は、コンテンツの購読予約に対応するフィルタを保存する。ルータ12は、パケットを受け取ると、属性を含むパケットのペイロードセクションを検査し、コンテンツの購読予約のためのフィルタをこれらの属性に適用する。属性がフィルタを満たす場合、パケットは、次のリンクにルーティングされる。属性がフィルタを満たさない場合、ルータは、パケットを削除する。これらの経路決定は、ネットワークコア10において、ルータ12間に配信される。ルータ12は、データをネットワークコア10においてローカルにキャッシングする。

【発明の詳細な説明】
【関連出願】
【0001】
本発明は、引用により本願に援用される、2002年7月8日に出願された、米国仮出願番号60/394,631号、発明の名称「サービス品質管理のためのペイロード検査によるパケットルーティング(Packet Routing Via Payload Inspection for Quality of Service Management)」に対する優先権を主張する。また、本出願は、2002年7月19日に出願され、引用により本願に援用される、米国特許出願番号10/199,356号、発明の名称「ペイロード検査によるパケットルーティング(Packet Routing Via Payload Inspection)」、米国特許出願番号10/199,368号、発明の名称「チャンネルを用いたルータにおけるコンテンツベースの経路選択及びフィルタリングの用の方法及び装置(Method And Apparatus For Content-Based Routing And Filtering At Routers Using Channels)」、米国特許出願番号10/199,439号、発明の名称「ネットワークを介して、論理関数を送受する方法(Method for Sending And Receiving A Boolean Function Over A Network)」、米国特許出願番号10/199,369号、発明の名称「ネットワークを介して評価、変更、再利用及び配信を可能にするのための論理関数を保存する方法(Method For Storing Boolean Functions To Enable Evaluation, Modification, Reuse, And Delivery Over A Network)」、米国特許出願番号10/199,388号、発明の名称「接続ベースのルーティングにおける可変長フィールドを照合するワイルドカードを効率的な実行する方法(Efficient Implementation of Wildcard Matching On Variable-Sized Fields In Connect-Based Routing)」の一部継続出願である。
【0002】
また、上述した出願の一部継続出願である、2003年3月28日に出願された、米国特許出願番号10/400,671号、発明の名称「信頼性が低いネットワークにおける信頼性が高い発行−購読システムアーキテクチャ(Reliable Publish/Subscribe System Architecture over Unreliable Networks)」、米国特許出願番号10/400,465号、発明の名称「コンパクトフィルタストレージ及びオフラインの事前計算を用いたコンテンツベースのパケットルーティングのための方法及び装置(Method and Apparatus for Content-Based Packet Routing Using Compact Filter Storage and Off-Line Pre-computation)」、米国特許出願番号10/400,453号、発明の名称「発行−購読ネットワークにおいて、問合せ−応答インタラクションを実行する方法及び装置(Method and Apparatus for Implementing Query-Response Interactions in a Publish-Subscribe Network)」、米国特許出願番号10/400,462号、発明の名称「持続的で信頼できるメッセージ配信を実行する方法及び装置(Method and Apparatus for Implementing Persistent and Reliable Message DELIVERY)」、米国特許出願番号10/400,444号、発明の名称「発行−購読ネットワークにおいて、コンテンツベースを伝搬する方法及び装置(Method and Apparatus for Propagating Content Filters for a Publish-Subscribe Network)」も引用により本願に援用されるものとする。
【技術分野】
【0003】
本発明は、ネットワークコアにおいて、警告サービス(alert service)を提供するためのパケット内のペイロードの検査(inspection)に基づいて、パケットをルーティングする方法及び装置に関する。
【背景技術】
【0004】
ネットワークの帯域幅は、指数関数的に拡大している。しかしながら、ネットワークインフラストラクチャ(ルータ、サーバ、デーモン、プロトコル等を含む。)は、未だに比較的古い技術を用いている。この結果、インターネットアプリケーション及びネットワークルータは、帯域幅の拡大の速度に対応することができない。同時に、ネットワークに対応する機器及びアプリケーションも増加している。これらの機器及びアプリケーションによるネットワークノードへの負荷は、著しく大きくなっている。また、ネットワーク負荷及びアプリケーションの数の増加のために、ネットワークアプリケーションを実行し、保守するための複雑性がより高まっている。この結果、ネットワークの帯域幅の増加、及びネットワーク機器及びアプリケーションの偏在的な(ubiquitous)使用により、古いネットワークインフラストラクチャにおけるデータの経路選択及び伝送に、特に、コンテンツを購読者(subscriber)に発行(publishing)するときに、問題が生じている。
【0005】
ネットワークにおいてサーバからクライアント装置に情報をプッシュするモデルは、発行−購読型(publish-subscribe style)と呼ばれる。このモデルでは、サーバは、どのクライアントが情報に興味を持ち、又はクライアントがネットワーク内のどこに位置するかに拘わらず、その情報の単純化された発行者装置(publisher)として機能する。クライアント装置は、情報の購読者装置(subscriber)となり、潜在的には、その情報がネットワークのどこで利用可能となったかに関する詳細に拘わらず、その情報が利用可能になると、その情報が配信される。そして、ネットワークは、発行された情報を購読者装置に効率的にルーティングし、情報を能動的な購読に適合させ、これらの処理を発行者装置及び購読者装置に対して透過的な方法で実行する責務を負う。
【0006】
発行−購読モデルにおいては、サーバの構成が著しく簡略化されるので、大型のサーバ(heavyweight server)と小型のクライアント(lightweight client)といった区別はなくなり、これらは、発行者装置、購読者装置又はその両方にもなり得るピアという呼称に統合される。様々な種類のアプリケーションは、ピア間の発行−購読型のインタラクションに近い性質を兼ね備えている。これらの多くのアプリケーションの基底に存在する課題では、発行及び購読される情報は、イベントの形式で提供される。例えば、投資家が株式を購入又は売却することにより、株価が変動する。また、高速道路上で交通事故が発生すると、交通が渋滞する。ソフトウェアシステムのセキュリティホールが発見されると、ソフトウェアのユーザのためにパッチが開発される。インターネットゲームのプレーヤが武器を使用すると、他のプレーヤのアバタが死ぬ。これらの例示的な現象は、全て、多数の購読者が潜在的に興味を有するイベントであり、このようなイベントが生じたことをこれらの購読者に通知するために、ネットワーク内で伝搬(propagate)させることができる。すなわち、イベントは、ある時刻に、ネットワーク上のある場所で発生した、潜在的に興味が持たれる何かに関する、自己充足的(self-contained)で簡潔な情報片(succinct piece of information)である。
【0007】
発行−購読モデルにおいて、発行されたコンテンツをどこに送信するかをネットワークに指示するための経路決定(routing decision)は、通常、サーバ又は発行者装置が行う。発行者装置は、それが発行したコンテンツに関する購読予約(subscription)を保存している。発行者装置は、新たなコンテンツを受信又は生成すると、そのコンテンツと各購読予約とを比較し、何らかの一致がないかを調べる。コンテンツ(イベント)がいずれかの購読予約を満たす場合、発行者装置は、ネットワークを介して、対応する購読者装置にコンテンツをプッシュする。この従来の発行−購読モデルでは、特に、より多くの機器がネットワークに対応し、購読予約の数が増加すると、発行者装置に大きな負担がかかる。
【0008】
インターネットにおける無数のアプリケーションの集中度が高まることにより、事象通知(event notification)を利用する可能性も無限になる。ここで、これらの可能性のために、経路決定を効率的に行い、イベントがいつ購読予約を充足するかを効率的に判定して、発行者装置の負担を軽減する手法を実現することが必要である。したがって、普遍的で持続的な事象通知サービス(event notification service)を実現すれば、インターネットアプリケーション並びに他のアプリケーションに、及びそれらの実行に大きな付加価値を与えることができる。
【発明の概要】
【課題を解決するための手段】
【0009】
本発明に係るルーティング方法は、プロセッサによって実行され、ネットワークにおいて、サービス品質保証に基づいてパケットをルーティングするルーティング方法において、ヘッダ部と、ペイロード部とを有するパケットを受信する受信ステップと、ネットワークコアにおいて、パケットをルーティングする前に、パケットのペイロード部を検査する検査ステップと、パケットの確保された帯域幅に関するサービス品質保証を判定する判定ステップと、検査及びサービス品質保証に基づいて、パケットを選択的にルーティングするルーティングステップとを有する。検査ステップは、ペイロード部からデータ属性を抽出するステップと、抽出したデータ属性を2つ以上の属性フィルタと比較するステップと、2つ以上の属性フィルタのそれぞれが満たされる場合、1組の機能を実行するステップとを有する。各属性フィルタは、購読者が、発行者から受信した興味があるイベントの組を記述している。
【0010】
本発明に係るルーティング方法は、プロセッサによって実行され、ネットワークにおいて、メッセージをルーティングするルーティング方法において、ヘッダ部と、少なくとも1つの主語と、複数のデータ属性とを有するメッセージを受信する受信ステップと、メッセージから、主語及びデータ属性を読み出す主語/属性読出ステップと、主語に基づいて、複数の属性フィルタを指定する購読予約を読み出す購読予約読出ステップと、メッセージの確保された帯域幅に関するサービス品質保証を判定するステップと、メッセージをどのようにルーティングするかを決定するために、ネットワークコアにおいて、購読予約にデータ属性を適用する適用ステップと、適用及びサービス品質保証に基づいて、メッセージを選択的にルーティングするステップとを有する。適用ステップは、パケットからデータ属性を抽出するステップと、抽出したデータ属性を2つ以上の属性フィルタと比較するステップと、2つ以上の属性フィルタのそれぞれが満たされる場合、1組の機能を実行するステップとを有する。各属性フィルタは、購読者が、発行者から受信した興味があるイベントの組を記述している。
【0011】
本発明に係るルーティング装置は、プロセッサ及びメモリを有し、ネットワークにおいて、サービス品質保証に基づいてパケットをルーティングするルーティング装置において、ヘッダ部と、ペイロード部とを有するパケットを受信する受信手段と、ネットワークコアにおいて、上記パケットのペイロード部を検査する検査手段と、パケットの確保された帯域幅に関する上記サービス品質保証を判定する判定手段と、検査手段及び判定手段による判定の結果得られた検査結果及びサービス品質保証に基づいて、パケットを選択的にルーティングするルーティング手段とを備える。検査手段は、ペイロード部からデータ属性を抽出し、抽出したデータ属性を2つ以上の属性フィルタと比較し、2つ以上の属性フィルタのそれぞれが満たされる場合、パケットをどのようにルーティングするかを決定し、各属性フィルタは、購読者が、発行者から受信した興味があるイベントの組を記述している。
【0012】
本発明に係るルーティング装置は、プロセッサ及びメモリを有し、ネットワークにおいて、メッセージをルーティングするルーティング装置において、ヘッダ部と、少なくとも1つの主語と、複数のデータ属性とを有するメッセージを受信する受信手段と、メッセージから、主語及びデータ属性を読み出す主語/属性読出手段と、主語に基づいて、購読予約を読み出す購読予約読出手段と、メッセージを購読者装置にどのようにルーティングするかを決定するために、ネットワークコアにおいて、購読予約を複数のフィルタに照合する照合手段と、パケットの確保された帯域幅に関するサービス品質保証を判定する判定手段とを備える。主語/属性読出手段は、購読予約に対応した複数のフィルタを読み出す手段を備え、各フィルタは、購読者が、発行者から受信した興味があるイベントの組を記述している。
【0013】
本発明に係るルーティング/キャッシング方法は、マルチキャストネットワークにおいて、データのパケットをルーティング及びキャッシングするルーティング/キャッシング方法において、ヘッダ部と、ペイロード部とを有するパケットを受信する受信ステップと、パケットを購読者装置にどのようにルーティングするかを決定するために、ネットワークコアにおいて、パケットのペイロード部を検査する検査ステップと、検査に基づいて、パケットを選択的にルーティングするルーティングステップと、パケットに対応するチャンネルを判定するステップと、チャンネルのチャンネル特性を読み出すステップと、チャンネル特性から、チャンネルが持続的なチャンネルであるか否かを判定するステップと、チャンネルが持続的なチャンネルである場合、パケットからデータを、ネットワークコアのコアルーティングノードで局所的にキャッシングするステップとを有する。コアルーティングノードは、エッジルーティングノードの上流の購読者装置から離れる方向に位置する。
【0014】
本発明に係るネットワークは、データのパケットをルーティング及びキャッシングするネットワークにおいて、ヘッダ部と、ペイロード部とを有するパケットを受信して、ルーティングするエッジルーティングノードであって、受信したパケットをルーティングするインテリジェントルータを含むエッジルーティングノードと、ネットワークコア内に位置するコアルーティングノードと、コアルーティングノード内に位置し、インテリジェントルータに動作可能に接続されたキャッシュマネージャとを備える。インテリジェントルータは、パケットを購読者装置にどのようにルーティングするかを決定するために、ネットワークコアにおいて、パケットのペイロード部を検査する命令と、検査に基づいて、パケットを選択的にルーティングする命令とを有し、キャッシュマネージャは、パケットのそれぞれに対応するチャンネルを判定する命令と、チャンネルのチャンネル特性を読み出す命令と、チャンネル特性から、各チャンネルが持続的なチャンネルであるか否かを判定する命令と、チャンネルが持続的なチャンネルである場合、対応するパケットからデータを、コアルーティングノードのローカルキャッシュで局所的にキャッシングする命令とを有する。コアルーティングノードは、エッジルーティングノードの上流の購読者装置から離れる方向に位置する。
【0015】
本発明に係るルーティング/キャッシング装置は、マルチキャストネットワークにおいて、データのパケットをルーティング及びキャッシングするルーティング/キャッシング装置において、複数のプロセッサと、複数のプロセッサによって実行される命令とを備える。命令は、ヘッダ部と、ペイロード部とを有するパケットを受信する命令と、パケットを購読者装置にどのようにルーティングするかを決定するために、ネットワークコアにおいて、パケットのペイロード部を検査する命令と、検査に基づいて、パケットを選択的にルーティングする命令と、パケットに対応するチャンネルを判定する命令と、チャンネルのチャンネル特性を読み出す命令と、チャンネル特性から、上記チャンネルが持続的なチャンネルであるか否かを判定する命令と、チャンネルが持続的なチャンネルである場合、パケットからデータを、ネットワークコアのコアルーティングノードで局所的にキャッシングする命令とを有する。コアルーティングノードは、エッジルーティングノードの上流の購読者装置から離れる方向に位置する。
【図面の簡単な説明】
【0016】
【図1】ネットワークコアにおけるこのインテリジェントルーティングを概念的に示すブロック図である。
【図2】発行者装置及び購読者装置用のインテリジェントルータを示すネットワーク図である。
【図3】インテリジェントルータ及びバックボーンルータの例示的なネットワークインフラストラクチャの構成を示す図である。
【図4】インテリジェントルータのハードウェア構成を示す図である。
【図5】発行者装置及び購読者装置の構成を示す図である。
【図6】インテリジェントルータのチャンネルマネージャの構成を示す図である。
【図7】インテリジェントルータを有するネットワークに接続するためのユーザ装置のソフトウェアコンポーネントの構成を示す図である。
【図8】インテリジェントルータのためのソフトウェアコンポーネントの構成を示す図である。
【図9】メッセージのパケット構造を示す図である。
【図10】発行方法のフローチャートである。
【図11】購読方法のフローチャートである。
【図12】チャンネル及び購読者装置の画面を示す図である。
【図13】コンテンツベースの経路選択方法のフローチャートである。
【図14】キャッシング方法のフローチャートである。
【図15】キャッシュインデックスを示す図である。
【図16】送信メッセージのためのエージェント方法のフローチャートである。
【図17】受信メッセージのためのエージェント方法のフローチャートである。
【図18】メッセージの符号化の具体例を説明する図である。
【図19】購読予約を保存するためのデータベース構造を示す図である。
【図20】ワイルドカード方法のフローチャートである。
【図21】デジタルビデオ監視システムの構成を示す図である。
【図22】2段階法による、デジタルビデオ監視システムのためにプロキシを示す図である。
【図23】デジタルコンテンツ配信のためのアーキテクチャを示す図である。
【図24】デジタルコンテンツ配信のための第1の段階のアーキテクチャを示す図である。
【図25】デジタルコンテンツ配信のための第2の段階のアーキテクチャを示す図である。
【図26】サービス品質管理のための複数のアウトリンクを示す図である。
【図27】サービス品質管理のための単一のアウトリンクを示す図である。
【図28】ISPの外部におけるフィルタリング及びキャッシングを説明する図である。
【図29】ネットワーク内のキャッシュを示す図である。
【図30】上流ルータにおけるバックアップキャッシングを説明する図である。
【図31】プロキシを有するキャッシュとルータのとの間のインタラクションを示す図である。
【図32】購読予約に対するキャッシュの作成を説明する図である。
【図33】インデックスツリーを示す図である。
【図34】複数のキャッシュからの検索を示す図である。
【図35】キャッシュマネージャと、システム内の他のモジュールとのインタラクションを示す図である。
【図36】キャッシュのためのファイルディレクトリ構造を示す図である。
【発明を実施するための形態】
【0017】
概観
インターネット規模又は他の分散ネットワーク規模においては、事象通知システム(event notification system)により、アプリケーションにおいて、強力で柔軟な発行−購読ネットワーク(publish-subscribe networking)が実現される。この事象通知システムでは、アプリケーションプログラムは、通知アプリケーションプログラムインタフェース(application program interface:以下、APIという。)を用いて、ネットワーク内で発生するイベントに関する通知を発行し及び/又は通知を購読又は受信する。
【0018】
この事象通知システムにおける通知には、主語(subject)が与えられており、主語は、文字列(string)、又は通知がカプセル化している情報の種類を分類する(classify)他のデータ構造として示される。また、通知には、その通知に特有の情報を含む1組の属性によって完結されている。例えば、アプリケーションは、subject quotes.nyse(ニューヨーク証券取引所における主語の株価)と、属性シンボル及び価格とを用いて、ニューヨーク証券取引所における取引に関する通知を発行してもよい。例えば、アプリケーションは、SNE(ソニー株式会社(商標)の株価表示板のシンボル)に等しいシンボルと、85.25ドルの株価とを含む特定の属性値を有する個々の通知を発行する。通知の全ての属性ではなく、殆どの属性は、主語が同じファミリに関する全ての通知において見出されるという意味で、予め定義されている。なお、発行者は、イベント固有の情報を追加するために、通知毎に又は他の単位で、通知に任意の属性を加えることができる。したがって、一部又は全ての属性は、予め定義されている必要はない。
【0019】
この事象通知システムでは、購読者は、主語又は全チャンネルの購読のみに制限されるわけではない。チャンネルについては、後に説明し、定義する。チャンネルは、例えば主語フィールド及び関連したサブフィールド(サブ主語)の1つ以上のレベルを指定する階層構造を含むことができる。したがって、購読者は、通知の属性に対して、コンテンツベースのフィルタを指定することによって、興味に応じてより精密に調整された表現を指定することができる。例えば、購読者は、SNEに等しいシンボルと、90.00ドルより高い価格(例えば、購読者が所有している株式の売りの指値)とを有するsubject quotes.nyseに対する全ての通知を購読予約してもよい。購読予約に一致する全ての通知は、コールバック、あるいは購読者が購読予約を登録したときの又は他の時点における他の種類の機能によって、購読者に配信される。1つの購読予約は、複数のフィルタに分割することができる。
【0020】
コールバックは、多くの計算(computation)を実行することができ、これらには、例えば端末機器にメッセージを書き込む又は電子メールを送信する等の単純な処理から、例えば株式の売却を開始する等のより複雑な処理、新たな発行−購読活動を開始する(例えば、既存の購読予約を75.00ドルの買いの指値とする新たな購読予約に置き換え、又は購読者のポートフォリオが手直しされた新たな通知を発行する)等の更に複雑な処理までの処理が含まれる。
【0021】
アプリケーションにおける発行及び購読活動は、例えば、エージェントによって支援してもよい。エージェントは、プロキシを使用することができ、又はプロキシによって実現することができる。エージェントは、それが用いられるときには、通知及び購読予約を出力するネットワーク接続性と、照合通知(matching notification)を購読者装置に入力する配信とを提供する。通知がネットワークに出されると、この事象通知システムのルータのネットワークは、その通知に購読予約が一致する全ての購読者装置に通知を伝搬(propagate)する。この処理を実現する一手法は、ネットワーク内の全ての点に通知を同報通信し、アプリケーションエージェントに、対応する購読者装置にその通知が関連するか否かを判定させる手法がある。しかしながら、これは必ずしも拡張性がある手法であるというわけではなく、通常、ネットワークは、特に多数の活発で冗長な購読者装置がある場合、メッセージトラヒックの負荷によって、急速に機能しなくなる(overwhelmed)。更に、帯域幅が十分な場合でさえも、購読者装置は、大量の通知を処理しきれなくなると考えられる。
【0022】
本発明に基づくシステムの一例として示すネットワークは、非常に効率的に通知をルーティングする。まず、このネットワークは、マルチキャストルーティングを用いて、例えば、ネットワーク内の全てのリンクにおいて最大で1回、通知を伝搬させることができる。次に、このネットワークは、フィルタに対して多数の高度な最適化処理を採用して、通知の伝搬の回数を可能な限り削減することができる。
【0023】
図1は、ネットワークコア10におけるこのインテリジェントルーティングを概念的に示す図である。発行者装置14は、エッジルータ(edge router)16を介して、発行−購読ネットワークにおいて用いられているネットワークコア10にメッセージのコンテンツを送信する。発行−購読ネットワークは、発行者装置14から購読者装置24にデータ又はコンテンツをルーティングするためのあらゆる種類のネットワークであってもよい。コンテンツは、ルータ間又は他の機器間の論理的接続を表す1つ以上のチャンネル18を介して伝送される。ネットワークコア10におけるインテリジェントルータ12は、メッセージをルーティング又は転送するか否かを判定する。特に、インテリジェントルータ12は、メッセージが購読者装置24によって購読予約されているコンテンツを含んでいるか否かを判定することができる。
【0024】
各購読予約は、主語フィルタ(subject filter)と属性フィルタ(attribute filter)とをカプセル化している。ルータは、主語フィルタを一致する主語の集合に拡張し、又は主語毎に属性フィルタを併合することができる。インテリジェントルータは、通知の主語に対して主語フィルタを評価し、通知における属性値に対して属性フィルタを評価する。主語フィルタの構文では、ワイルドカードを用いることができ、属性フィルタの構文では、論理式(Boolean expression)を用いることができ、これらについては、後に更に詳細に説明する。「フィルタ」という用語は、購読者装置が発行者装置から受信を望んでいる1組のイベントを意味する。経路選択規則(routing rule)は、フィルタから生成され、インテリジェントルータは、この規則を用いて経路決定を行う。
【0025】
したがって、メッセージ26がフィルタ集合の全部を充足していない場合、例えば、インテリジェントルータ12は、メッセージ26をドロップ(破棄)し、これは、メッセージ26が転送されないことを意味する。主語フィルタ及び属性フィルタの評価に基づき、メッセージ20がフィルタの集合の一部又は全部を充足していると判定された場合、例えば、インテリジェントルータ12は、エッジルータ22及び他の機器を介して、購読者装置にメッセージ20をルーティング(転送)し、又は、一致したフィルタについて規定されている全ての経路選択及び/又は動作規則(action rule)に基づいて、インテリジェントルータ12内でメッセージ20に対する他の機能を実行する。検索は、フィルタの集合全体に対する処理が完了するまで、又は全ての規則に関する判定が得られるまで続けられ、どちらが最初であってもよい。この2つの条件のいずれか1つが満たされると終了する。
【0026】
ネットワークコア内のこの種類のインテリジェントなコンテンツベースの経路選択は、例えば警告及び更新のためのリアルタイムデータ配信を実現する。警告のためのリアルタイムデータ配信の具体例としては、以下に限定されるものではないが、例えば、株価速報(stock quot)、交通情報、ニュース、旅行、天気、不正検出(fraud detection)、セキュリティ、テレマティックス、ファクトリオートメーション、サプライチェーン管理(supply chain management)及びネットワーク管理等がある。更新のためのリアルタイムデータ配信の具体例としては、以下に限定されるものではないが、例えば、ソフトウェアの更新、アンチウイルスの更新、映画及び音楽配信、ワークフロー、保管管理(storage management)及びキャッシュコンシステンシ(cache consistency)等がある。購読予約された情報を配信するシステムは、他の様々な分野に応用することができる。
【0027】
表1は、フィルタ用の主語(subject)及び述語(predicate)によって保存される購読予約を示している。購読予約は、希望されれば、又は必要に応じて、ネットワークの如何なる場所に、あらゆる種類のデータ構造を用いて保存してもよい。後述するように、述語は、購読予約の構成要素である。購読予約は、如何なる形式で表現してもよく、その具体例を以下に示す。
【0028】
【表1】

【0029】
表2は、株価速報サーバ(quote server)用の発行及び購読予約の具体例を示している。この具体例は、説明を目的とする例示的な具体例に過ぎず、購読予約は、あらゆる種類のデータ又はコンテンツに対するあらゆる数の及び種類のパラメータを含むことができる。
【0030】
【表2】

【0031】
述語は、購読予約用の論理式を提供し、主語は、購読予約用のチャンネルの指標(indication)を提供する。購読予約は、他の様々な手法で表現することができる。論理式は、このような手法の一例であり、論理式を用いることにより、購読予約を主語フィルタと属性フィルタに容易に変換する機能を、コンテンツベースの経路選択に提供する。これに代えて、主語を参照することなく、購読予約を表現することもできるが、主語又はチャンネル(後に詳細に説明する。)を用いることにより、フィルタを解釈して、属性に適用するコンテキスト(context)を提供する。
【0032】
経路決定は、ネットワークコアで行って、ネットワークを介して配信することができるので、発行者装置及び購読者装置の機器の負担を軽減し、ネットワーク効率を大幅に高めることができる。図1では、説明を目的として、単一の発行者装置14、単一の購読者装置24及び単一のインテリジェントルータ12のみを示しているが、実際には、発行者装置、購読者装置及びインテリジェントルータは、それぞれ複数設けることができる。インテリジェントルータという用語は、ネットワークコア又は他の位置において、パケット又はメッセージのペイロードを検査することによって経路を決定する能力を有するルータ又は他のエンティティ(entity)を意味する。
【0033】
ネットワークインフラストラクチャ
図2は、発行者装置及び購読者装置用のインテリジェントルータを示すネットワーク図である。例えば、チャンネルサービスを提供する経路選択エンティティ(以下、チャンネルサービスともいう。)30は、後述するように、インテリジェントルータ38、40、42、44、46、48間でメッセージをルーティングするために、ネットワークインフラストラクチャ上に効果的に階層化されている。例えば、発行者装置32は、概念的に、発行されたコンテンツの指標、例えばコンテンツを検索するためのポインタを受信するアプリケーション34と、チャンネルサービス30を介したネットワーク伝送のためにコンテンツを符号化するエージェント36とを含む。論理的に互いに接続されたインテリジェントルータ38、40、42、44、46、48の集合は、購読予約の主語フィルタ及び属性フィルタから生成された経路選択規則を用いて、発行者装置32からのコンテンツをルーティングする。複数のリンク39、41、43、45は、インテリジェントルータ38、40、42、44、46、48間を論理的に接続する。他のリンク37、47は、それぞれ、発行者装置32とインテリジェントルータ38間及び購読者装置54とインテリジェントルータ46間を論理的に接続する。購読者装置54は、購読するコンテンツを検出して、受信するエージェント50と、コンテンツを表示するアプリケーション52とを備えている。
【0034】
チャンネルは、例えば、分散方式によって実行される論理的なマルチキャスト接続の関連した集合を含むことができる。この例示的な実施例におけるチャンネルは、コンテンツを交換する発行者装置と購読者装置のコミュニティとして機能する論理的に関連したネットワークリソースの集合である。コンテンツは、チャンネル主語名前空間(channel subject namespace)に従って分類され、ネットワークリソースは、チャンネルマネージャ(channel manager)によって提供されるチャンネルサービス30を介して、管理され、制御され、供給される。複数のチャンネルが同じネットワークリソースを共有してもよい。チャンネルは、非常に拡張性があるディレクトリサービス、例えば、以下に限定されるものではないが、発行者及び購読者の情報、認証(authentication)及び許可(authorization)情報、メッセージの種類、管理情報、会計及び課金情報(accounting and billing information)が含まれる。また、チャンネルは、例えば、キャッシングによる持続性(persistence through caching)、高速データ配信機構、セキュリティ、ユーザ及びネットワーク管理等を提供することができる。また、チャンネルは、他の如何なる目的にも利用することができる。
【0035】
インテリジェントルータによるフィルタリングをネットワークコアで行って、経路決定をネットワーク内に配信することができる。更に、インテリジェントルータは、発行者装置又は購読者装置等のユーザ機器をネットワークコアに接続するエッジルータとして機能することができる。また、ネットワークに接続された同じ機器が、ネットワークにおける経路決定に基づいて、購読者装置にコンテンツをプッシュする発行者装置と、プッシュされたコンテンツを受信する購読者装置との両方として機能することができる。インテリジェントルータ及びチャンネルは、特定の実施例における必要又は要望に応じて、如何なる構成で接続してもよく、図2の構成は例示的に示しているに過ぎない。
【0036】
図3は、インテリジェントルータ及び従来のバックボーンルータの例示的なネットワークインフラストラクチャの構成を示しており、チャンネルの論理的接続も示している。この実施例におけるインテリジェントルータ61〜70は、インターネット又は他の分散ネットワーク等のネットワークの既存のバックボーンルータを用いており、したがって、インテリジェントルータ61〜70は、バックボーンルータ上に効果的に階層化されている。この実施例では、インターネットサービスプロバイダ(Internet Service Provider:以下、ISPという。)ネットワーク58、59、60は、メッセージ又はパケットの従来の経路選択を行う幾つかのバックボーンルータをそれぞれ備えている。複数のインテリジェントルータ61〜70は、ISPネットワーク58、59、60内の1つ以上のバックボーンルータによって接続されている。また、インテリジェントルータ61〜70は、実際のリンクを例示的に示す複数のリンク73〜85によって、互いに接続されており、また、これらのリンク73〜85を介して、エンドユーザ機器にも接続することができる。インテリジェントルータ61〜70は、例えばエンティティ71等の1つ以上の管理装置(administrator machine)及び例えばエンティティ72等の1つ以上の仮想私設ネットワーク(virtual private network:以下、VPNという。)コントローラによって制御される。ISPネットワーク58、59、60は、発行者装置及び購読者装置(図3には示していない。)に接続してもよい。ISPネットワーク58、59、60内及び間のバックボーンルータは、既存のネットワークインフラストラクチャにおいて、従来の如何なる手法で互いに接続してもよい。
【0037】
図3に示すように、既存のネットワークインフラストラクチャを用いて、インテリジェントルータ61〜70及びリンク73〜85を実現することができ、これらは、ネットワークコアにおけるコンテンツベースの経路選択を提供する。リンク73〜85は、インテリジェントルータ61〜70間の論理的接続を表し、例えば、既存のネットワークインフラストラクチャ又は他の機器を用いて実現することができる。リンクは、例えば、トンネル(tunnel)と呼ばれる論理的接続を用いて実現することができる。トンネルは、ハードウェアと、ソフトウェアと、リンクを実現するためのネットワークインフラストラクチャとを含み、1つのトンネルは、複数のチャンネルの一要素であってもよい。チャンネルは、特定の種類のコンテンツのための論理的な構成を提供することによって、インテリジェントルータにおけるコンテンツベースの経路選択を容易にし、したがって、チャンネルを介して伝送される属性にコンテキストを提供する。インテリジェントルータは、チャンネルを用いることなく、経路決定を行うこともできるが、チャンネルは、ネットワークコアにおけるインテリジェントルータによるコンテンツベースの経路選択の効率を高める。
【0038】
この例示的な実施例は、チャンネルとリンクの使用を含んでいる。リンクは、例えばインテリジェントルータである2つのルータ間の接続を表す。チャンネルは、ルータの(通常は大きな)集合を含むネットワークエンティティであり、相互接続リンク(interconnecting link)によって静的又は動的に構成されており、1対多又は多対多の論理的接続を実現する。特に、チャンネルは、チャンネルの本質的特徴を記述する最上位レベルの論理的エンティティである。1つのチャンネルには、多くの主語が存在することができる。各主語は、互いに接続されたルータの集合を含むサブネットワーク(例えばマルチキャストツリー)を形成する。これらの主語ベースのサブネットワークは、様々な手法で、割当、適応化及び構成を行うことができる。全てのサブネットワークの集合であり、その下に主語を形成するチャンネルは、例えばネットワークのメッシュ(mesh of networks)に似ている。
【0039】
図4は、インテリジェントルータ92のハードウェア構成要素を示しており、インテリジェントルータ92は、符号が付された他の如何なるインテリジェントルータに対応させることができる。ネットワークノード90は、従来のバックボーンルータ95に接続されたインテリジェントルータ92を備えている。インテリジェントルータ92は、メモリ94及び補助記憶装置97(例えば、独立した装置として実現してもよい。)に接続されたプロセッサ93を備え、メモリ94及び補助記憶装置97は、いずれも、キャッシュデータを含むデータを保存し、及びプロセッサ93によって実行されるアプリケーションプログラムを保存する。補助記憶装置97は、データの不揮発性記憶装置である。後述するように、プロセッサ93は、ソフトウェアによって制御され、バックボーンルータ95にインストラクション(instruction)を発行し、このインストラクションに応じて、バックボーンルータ95は、購読予約の主語フィルタ及び属性フィルタから生成された経路選択規則に基づいて、メッセージ又はパケットをルーティング(転送)し又はルーティングしない(破棄する)。ここでは、インテリジェントルータ92をプロセッサによって制御される独立した装置として示しているが、インテリジェントルータ92は、ソフトウェアを組み込むことによって、ハードウェアにインテリジェント経路選択機能を提供する特定用途向け集積回路(application specific integrated circuit:ASIC)91によって実現することができる。また、これに代えて、インテリジェント経路選択機能は、1つ又は複数の経路選択機器において、ソフトウェアとハードウェアの組合せとして実現することができる。
【0040】
図5は、発行者装置及び購読者装置の具体的な構成を示している。発行者装置100、118は、例えば、1つ以上の発行者アプリケーション104及びエージェントアプリケーション106を記憶するメモリ102と、データの不揮発性記憶装置である補助記憶装置112と、情報又はコマンドを入力する入力装置108と、メモリ102に記憶されている又は他の記憶装置から受け取ったアプリケーションを実行するプロセッサ114と、情報を出力する出力装置110と、情報を視覚的に表示する表示装置116とを備えている。
【0041】
購読者装置122、140は、例えば、1つ以上のアプリケーション126及びエージェントアプリケーション128を記憶するメモリ124と、データの不揮発性記憶装置である補助記憶装置130と、情報又はコマンドを入力する入力装置132と、メモリ124に記憶されている又は他の記憶装置から受け取ったアプリケーションを実行するプロセッサ134と、情報を出力する出力装置136と、情報を視覚的に表示する表示装置138とを備えている。発行者装置100、118及び購読者装置122、140は、如何なる構成であってもよく、上述したものとは異なる構成要素を備えていてもよく、構成要素は、上述したものより多くても少なくてもよい。
【0042】
発行者装置100、118は、上述したネットワーク等のネットワーク120を介して購読者装置122、140に接続されている。ネットワーク120は、ネットワークコアにおいて、パケット又はメッセージを介して、データ又はコンテンツの分散経路選択(distributed routing)を行うインテリジェントルータを含んでいる。ここでは、それぞれ2つの発行者装置100、118及び購読者装置122、140のみを示しているが、より多くの発行者装置及び購読者装置を含むようにネットワーク120を拡張することができる。発行者装置100、118及び購読者装置122、140は、プロセッサによって制御される如何なる装置、例えば、以下に限定されるものではないが、サーバ、パーソナルコンピュータ、ノートブックコンピュータ、携帯情報端末、電話機、携帯電話機、ページャ又は他の機器によって実現することができる。また、インテリジェントルータを有するネットワーク120は、有線機器、無線機器又はその両方を接続する如何なる有線又は無線分散ネットワークを含むことができる。また、ネットワーク120は、潜在的には、既存の又は従来のネットワークインフラストラクチャを用いることができる。
【0043】
図6は、インテリジェントルータのためのチャンネルマネージャ(channel manager)150の構成を示している。この実施例では、チャンネルマネージャ150は、複数のサーバ152、154、156によって実現されている。各サーバ152、154、156は、それ自体の局部記憶装置(local storage)158、160、162を備えている。インテリジェントルータ164、166、168は、特定のチャンネルに関する情報を得るために、チャンネルマネージャ150に接触する。また、チャンネルマネージャ150は、データ持続性(data persistence)、フェイルオーバ機能(fail over function)及び他の機能を提供することができる。したがって、チャンネルマネージャ150は、ネットワークの任意の場所において、例えばチャンネル関連情報、データ持続性の属性、発行者及び購読者のユーザ情報、及びインフラストラクチャ情報を指定するデータベース又はデータベースの集合を含むチャンネルサービスを提供する。インフラストラクチャ情報は、例えば、インテリジェントルータ164、166、168及びこれらを接続するトンネルの識別情報、チャンネルの主語、及びチャンネルの属性(各属性の名称と種類)を含むことができる。また、パケット又はメッセージは、固定の属性及び可変の属性の識別情報を含むチャンネル関連情報を搬送することができる。
【0044】
ユーザは、オンラインのとき、経路情報(channel information)をダウンロードすることができる。例えば、ユーザは、ユーザ名とパスワードを用いて、自らを登録することができる。ユーザのログオンが認証されると、ユーザは、チャンネルを開き(呼び出し)、チャンネルマネージャ150からチャンネルに関する情報を検索することができる。発行者装置は、コンテンツを発行する際に、この情報を用いることができ、購読者装置は、購読予約を入力及び登録するために、この情報を用いることができる。
【0045】
この実施例では、チャンネルマネージャ150の各サーバ152、154、156は、各インテリジェントルータ164、166、168のためのプライマリ(primary)として機能する。特に、この実施例では、各インテリジェントルータ164、166、168は、2つのインターネットプロトコル(Internet Protocol:以下、IPという。)アドレスが供給され、一方のIPアドレスは、プライマリチャンネルマネージャ用であり、他方のIPアドレスは、バックアップチャンネルマネージャ用である。インテリジェントルータ164、166、168は、これらのIPアドレスを用いて、チャンネルマネージャ150の各サーバ152、154、156に接触し、経路情報を検索する。プライマリチャンネルマネージャに障害が発生すると、インテリジェントルータ164、166、168は、バックアップチャンネルマネージャと接触することができる。したがって、チャンネルマネージャ150のサーバ152、154、156は、これらを繋ぐ線によって示すように、チャンネル属性及び他の情報に関するデータを共有する。また、各サーバ152、154、156は、所定のバックアップチャンネルマネージャを有し、プライマリチャンネルマネージャに障害が生じた場合、他のバックアップチャンネルマネージャに処理を引き継がせることができる。ネットワーク内の機器は、コマンド、例えば経路情報を検索するコマンドを用いることができ、表3は、コマンドの具体例を示している。これに代えて、インテリジェントルータ164、166、168は、プライマリチャンネルマネージャのみを有していてもよく、あるいは3つ以上のチャンネルマネージャを有していてもよい。
【0046】
図7は、ユーザ装置又は機器をインテリジェントルータを有するネットワークに接続するためのユーザ装置又は機器内の具体的なソフトウェアコンポーネントのスタック180を示している。ユーザ装置は、発行者装置、購読者装置又はこれらの両方として用いることができ、ユーザ装置は、具体例として上述した様々な機器を含むことができる。スタック180は、1つ以上のユーザアプリケーション182を含むことができ、ユーザアプリケーション182は、ユーザからの購読予約の受信、発行者装置からの経路情報の受信又は発行するコンテンツ又はデータの受信に用いることができる。また、ユーザアプリケーション182は、ユーザ装置又は機器によって実行される他のあらゆる種類のアプリケーションを含んでいてもよい。
【0047】
また、スタック180は、例えば、エージェント184と、イベントライブラリ186と、キャッシュライブラリ188と、チャンネルライブラリ190と、メッセージングライブラリ192と、ディスパッチャライブラリ194とを含んでいてもよい。エージェント184は、ネットワーク接続の確立又は他の機能を提供し、表3は、エージェント184によって実行されるコマンドの具体例を示しており、エージェント184は、プロキシコマンド又は他の種類のコマンドを用いることができる。イベントライブラリ186は、ユーザ装置に関するイベント又は他のイベント又は情報を記録する。キャッシュライブラリ188は、データのローカルキャッシングを行う。チャンネルライブラリ190は、チャンネルの識別情報と、それらのチャンネルに関する情報とを保存する。ディスパッチャライブラリ194は、制御パス196、チャンネルマネージャ198、1つ以上のインテリジェントルータ200への接続を提供し、ディスパッチャライブラリ194は、表4に示す例示的な機能を含むことができる。メッセージングライブラリ192は、データパス204への接続を提供する。
【0048】
Cプログラミング言語で書かれたメッセージングAPI(以下、単にAPIという。)の具体例を表5〜表9に示す。表5及び表6は、メッセージを送信及び検索するAPIの具体例を示している。表7及び表8は、通知を送信及び検索するAPIの具体例を示している。表9は、制御メッセージを送信及び検索するAPIの具体例を示している。ここに示す特定の機能又は特徴を実現するAPI及び他のAPI、プログラム及びデータ構造は、例示的に示しているに過ぎず、これらの機能は、如何なるプログラミング言語で書かれたあらゆる種類のAPI又は他のソフトウェアエンティティとして実現してもよい。
【0049】
【表3】

【0050】
【表4】

【0051】
【表5】

【0052】
【表6】

【0053】
【表7】

【0054】
【表8】

【0055】
【表9】

【0056】
図8は、上述したようなインテリジェントルータ及び図4に示すインテリジェントルータ92等のインテリジェントルータの例示的なソフトウェアコンポーネント210を示している。ソフトウェアコンポーネント210は、例えば、インテリジェントルータ92のメモリ94に格納されており、プロセッサ93によって実行することができる。ソフトウェアコンポーネント210は、例えば、フィルタリングデーモン212と、ディスパッチャ214と、経路選択デーモン216と、キャッシュマネージャ218とを含んでいる。フィルタリングデーモン212は、後述するように、購読予約のコンテンツを経路選択規則に基づいて処理するフィルタリングを、コンテンツベースの経路選択に提供する。ディスパッチャ214は、パス220を介してフィルタを伝搬するために必要な制御メッセージの通信を行い、また、ディスパッチャ214は、ユーザのエントリの単一点及びチャンネルマネージャを有する1つの安全なソケット(one secure socket)を提供することができ、ネットワークのセキュリティを向上させる。換言すれば、この具体例では、ユーザは、チャンネルマネージャに直接接触しないが、他の実施例において、ユーザは、チャンネルマネージャと直接接触してもよい。ディスパッチャ214は、制御メッセージを用いて、チャンネルマネージャから属性(名称−値の対)を得る。
【0057】
経路選択デーモン216は、データパス222による通信を行い、データパス222は、図4に示すような従来のバックボーンルータ95又は他の経路選択機器によって形成することができる。キャッシュマネージャ218は、対応するインテリジェントルータを含むネットワークノードにおけるデータのローカルキャッシングを行う。キャッシュマネージャ218の動作は、後に詳細に説明するが、キャッシュマネージャ218は、ネットワークコアを介したデータの分散キャッシングを行う。
【0058】
コンテンツベースの経路選択は、アプリケーションレベルではなく、カーネルレベルにおいて実行することができる。カーネルによってアクセス可能なメモリは、アプリケーション層におけるメモリから独立している。アプリケーションにおいて、コンテンツベースの経路選択を実行するためには、例えば、メッセージデータをカーネルメモリ領域からアプリケーション領域にコピーし、アプリケーションのコンテキスト(context)をカーネルのコンテキストから、経路選択アプリケーションのコンテキストに切り換える必要がある。これらの処理は、いずれもかなりのオーバヘッドを引き起こす。ここで、コンテンツベースの経路選択をサポートするようにカーネルを変更すれば、上述したオーバヘッドが取り除かれ、経路選択をより高速に行うことができるようになる。
【0059】
このようなカーネルにおけるコンテンツベースの経路選択機能により、経路選択デーモン216は、実装例に応じて、データパス222を介してデータを直接又は間接的に送信又は受信することができる。経路選択デーモン216は、アプリケーション層において実行されるプロセスであり、カーネルに導入する(inject)コンテンツベースの経路選択テーブル(content-based routing table)を予め計算する(pre-computing)プロセスである。なお、カーネルは、経路選択テーブルが一旦導入されると、経路選択テーブルを用いて、経路決定を行うことができる。同様に、フィルタリングデーモン212は、フィルタリングテーブル(filtering table)を予め計算し、フィルタリングテーブルをカーネルに導入する。このカーネルの実行において、経路選択デーモン216もフィルタリングデーモン212もデータパス222とは直接インタラクトしない。
【0060】
図9は、購読予約のコンテンツを含むことができるメッセージのパケット構造230の具体例を示している。コンテンツベースの経路選択に用いられるパケット又はメッセージは、例えば、ヘッダ部とペイロード部を含んでいる。ヘッダ部は、経路選択又は他の情報を指定する。ペイロード部は、データ又はコンテンツ、あるいはデータ又はコンテンツの指標(indication)を指示する。パケット構造230は、IPヘッダ232と、ユーザデータグラムプロトコル(User Datagram Protocol:以下、UDPという。)の伝送制御プロトコル(Transmission Control Protocol:以下、TCPという。)ヘッダ234と、長さの値238と、1つ以上の主語フィールド240と、1つ以上の属性242とを含んでいる。パケット構造230は、長さの値、主語及び属性のための基本構造を示している。また、コンテンツベースの経路選択で用いられるパケットは、例えば、後述する図18の実施例に示すように、他の又は異なる要素を含むことができ、コンテンツベースの経路選択のためのパケットは、如何なる手法で構成してもよい。また、属性は、例えば、メッセージの最後に付加される任意の属性を含むことができる。これらの任意の属性は、例えば発行者装置(又はルータ)によって追加される特別の情報(ad-hoc information)であり、必ずしもチャンネルに対して定められたメッセージフォーマットを用いて搬送する必要はない情報である。
【0061】
発行者装置及び購読者装置における方法(Publisher and Subscriber Methodologies )
図10は、発行者装置によって、チャンネルを設定し、コンテンツを発行する例示的な発行方法250のフローチャートである。発行方法250は、例えば、発行者装置100内のプロセッサ114によって実行されるエージェントアプリケーション(以下、単にエージェントという。)106を含むソフトウェアモジュールによって実現することができる。発行方法250において、発行者装置100のエージェント106は、チャンネル用のプロキシの発行者生成(publisher creation)を受信する(ステップ252)。プロキシは、ネットワークとの通信を行う。エージェント106は、インタフェースを介してチャンネルにおいて用いられるメッセージフォーマットを判定する(ステップ253)。フォーマット情報は、例えば、チャンネルマネージャ又はネットワークにおける他のエンティティから得ることができる。エージェント106は、受信経路情報を用いて、チャンネルのプロキシを設定し(ステップ254)、この処理は、チャンネルの属性を受信し(ステップ256)、チャンネルへの通知を生成する(ステップ258)ことを含む。この通知は、チャンネル上でコンテンツを「待機(listening)」している機器にコンテンツを提供する。属性は、通知のパラメータ及び特性を定義する。
【0062】
エージェント106は、チャンネルの識別子(ID)及びコンテンツ情報を、ネットワークコア内の又は購読予約を処理するためにそれらを用いる他の場所内のインテリジェントルータに送信する(ステップ260)。発行者装置100は、通知属性に適切な値を設定し(ステップ261)、そして、発行者装置100は、チャンネル属性に基づいて、通知に関するコンテンツを発行することができる(ステップ262)。この実施例におけるステップ260〜262により、通知の発行が完了する。この処理は、実際の個々の実施例に応じて、他の又は更なるステップを含んでいてもよい。したがって、この実施例における通知に関連した情報は、順序正しい一連の属性に区切られ、各属性は、名称と、通知内の位置(1から始まる)と、種類と、値とを有する。これに代えて、属性は、個々の実施例に応じて、異なる特性を有していてもよい。例えば、属性は、予め定義された属性、任意の属性又はこれらの両方を含むことができる。
【0063】
インテリジェントルータは、パケット内のチャンネルIDを用いて、対応するチャンネルの属性を得ることができる。この属性は、チャンネルを介して伝送されるパケットの構造と又はフォーマットを決定している。特に、各パケットは、例えば、チャンネルIDに関連したタグと、発行者ID又は主語のような他のヘッダ情報とを含むことができる。このタグは、例えば図18の具体例に示すように、主語をメッセージフォーマットの番号にマッピングするために用いることができる。この番号には、小さな整数値、例えば16ビットの値を用いることができる。これに代えて、他のあらゆる種類の番号又は情報を用いて、主語をマッピングすることができる。主語を番号にマッピングすることにより、特別な利点が得られる。例えば、これにより、メッセージフォーマット内の空間を節約でき、メッセージにおいて主語の指標を指定する一様な又は標準化された手法を提供することができ、この手法により、主語を速やかに検出し、識別できるようになる。インテリジェントルータは、マッピングを局所的に保存することができ、あるいは、これに代えて番号を用い、コマンドによって、リモートから対応する主語を取得することができる。
【0064】
表10は、主語を番号にマッピングするための構造を示しており、この具体例では、番号に整数値を用いている。表10における主語ツリーパラメータは、主語が階層関係内に1つ以上の主語フィールドを含むことができることを示しており、例えば、主語ツリーは、特定のシンボルによって区切られた一連の主語フィールドを含むことができる。主語ツリーの具体例は、表2に示されている。例えば、subject tree quotes.nyse(ニューヨーク証券取引所における主語ツリーの株価)は、主語「quote」とサブフィールド「nyse」を含んでおり、これらの2つの用語は、URL又は他のネットワークアドレスのように、「.(ピリオド)」によって区切られている。ピリオド及びURL型の文字列を用いる代わりに、如何なる文字及び区切りのためのシンボルを用いて、如何なる手法で主語ツリーを指定してもよい。
【0065】
【表10】

【0066】
特定のチャンネルのパケットフォーマット又は構造を知ることにより、インテリジェントルータは、コンテンツベースの経路選択のためのパケット内において、主語及び属性、又は他の情報を速やかに検出することができる。例えば、チャンネルは、パケット内のバイトを数えることによって、チャンネルを介して伝送されてきた主語及び属性のバイト位置を容易に特定でき、主語及び属性を簡単に検出することができる。これに代えて、インテリジェントルータは、パケットを解析して、主語及び属性、又は他の情報を検出することができる。
【0067】
表11は、C++プログラミング言語で書かれた発行者プログラムの具体例を示している。表12は、チャンネルを生成するAPIの具体例を示している。表13は、チャンネルマネージャによって維持されるチャンネル設定ファイルの具体例(図6参照)と、チャンネル関連情報とを示している。これに代えて、システムは、処理負荷を分散させるために、ローカルチャンネルマネージャとして機能する地理的に分散した複数のサーバのIPアドレスを提供する広域チャンネルマネージャ(global channel manager)を備えていてもよい。
【0068】
【表11】

【0069】
【表12】

【0070】
【表13】

【0071】
図11は、購読予約を受信及び処理するのに用いられる購読方法264のフローチャートである。購読方法264は、例えば、購読者装置122内のプロセッサ134によって実行されるエージェントアプリケーション(以下、単にエージェントという。)128を含むソフトウェアモジュールによって実現することができる。購読方法264において、例えば、グラフィカルユーザインタフェース(graphical user interface;以下、GUIという。)は、利用可能なチャンネルの指標をユーザに表示する(ステップ266)。この処理は、アプリケーション126によって行われる。チャンネルを識別する情報は、例えば、チャンネル関連情報を提供するチャンネルマネージャから受信することができる。あらゆる種類のアプリケーション126を用いて、如何なる特別な手法又はフォーマットによって、チャンネルを識別する情報を表示してもよい。アプリケーション126は、ユーザが選択したチャンネルを受信し(ステップ268)、選択されたチャンネルのAPI又は他のプログラムを呼び出す(ステップ270)。APIは、選択されたオプションに対応したチャンネルの購読予約オプションをユーザに表示する(ステップ272)。APIは、ユーザから購読予約に関する値を受け取り(ステップ274)、購読予約を、後述する処理のために、エージェント128に送る(ステップ276)。
【0072】
購読予約のパラメータは、例えば表1に示すような述語を含むことができる。各チャンネルは、例えば、対応するチャンネルに関する特定の要求又はパラメータに基づいて、購読予約を処理するために、それ自体のAPIを用いることができる。これらのAPIは、例えば、購読予約を受け取るウェブベースの又はJavaベースのAPIを含むことができ、あらゆる種類のユーザインタフェース及び処理を用いて、購読予約に関する情報を受け取り、この情報をエージェント128に渡すことができる。
【0073】
図12は、チャンネル及び購読者画面(すなわちGUI)278、284を概念的に示す図であり、これらは、購読予約を受信する購読方法264に関連して用いられる。購読者画面278は、ユーザによって選択される利用可能なチャンネルを識別する複数の領域領域282を含んでいる。特定のチャンネルが選択されると、購読者画面284に示すように、購読予約のユーザの値を入力する領域286が表示される。ユーザが領域288を選択すると、購読予約が確定し、又は、ユーザが領域290を選択すると、購読予約が中止される。購読者画面278、284は、例えば、ハイパーテキストマークアップ言語(HyperText Markup Language:以下、HTMLという。)のウェブページとしてフォーマットしてもよく、又は如何なる他の形式でフォーマットしてもよい。また、購読者画面278、284は、領域及びコンテンツのあらゆる構成を含むことができ、例えば、所望の、ユーザフレンドリで視覚的に魅力的なインタフェースを、購読者に提供するために、例えばテキスト、図形、画像、様々な色又はマルチメディア情報を含むことができる。また、購読者画面278、284は、例えば、従来と同様のブラウザ機能を提供するツールバー280を含んでいてもよい。
【0074】
表14は、C++プログラミング言語で書かれた購読者プログラムの具体例を示している。
【0075】
【表14A】

【0076】
【表14B】

【0077】
ペイロード検査によるコンテンツベースの経路選択及びチャンネル
図13は、コンテンツベースの経路選択のためのペイロード検査方法300のフローチャートである。ペイロード検査方法300は、例えば、インテリジェントルータ92内のプロセッサ93によって実行され、フィルタリングデーモン212として表されるソフトウェアモジュールによって実現することができる。これに代えて、このぺイロード検査方法300は、ASICによって実現してもよく、あるいはハードウェアとソフトウェアの組合せによって実現してもよい。ペイロード検査方法300として示すコンテンツベースの経路選択は、インテリジェントルータ内、あるいは、例えばネットワークコア又はエッジルータのようなネットワーク内の任意の場所において実行することができる。
【0078】
一般的な意味では、コンテンツベースの経路選択は、パケットをどのように処理するかを決定するために、パケットのペイロード部を検査することが必要である。このコンテンツベースの経路選択方法は、例えば、購読予約のリストを任意の順序で(例えば、フィルタを用いて)処理し、経路選択規則に基づいて、メッセージを主語毎及び属性毎に比較し、メッセージの経路選択を決定し、ネットワークコアにおける処理を実行することを含む。この経路選択規則は、ルータにおける処理を制御する規則又はフィルタに関連したあらゆる規則を含むことができる。したがって、これらの経路決定は、ネットワークコアを介して配信することができる。主語をチャンネルとして表すことにより、メッセージフォーマットが決定され、したがって、インテリジェントルータは、例えば、特定のチャンネルのメッセージ又はパケット内の属性のバイト位置を知ることによって、メッセージ内の属性の位置を速やかに検出できる。
【0079】
ペイロード検査方法300において、インテリジェントルータ92は、メッセージのパケットを受信する(ステップ302)。インテリジェントルータ92は、パケットから、対応するメッセージのチャンネルIDを判定し(ステップ304)、このチャンネルIDを用いて、チャンネルの属性を読み出す(ステップ306)。この実施例では、チャンネルの種類(チャンネルIDから判定される。)は、パケット内の属性の位置及びデータタイプを決定している。チャンネルの属性は、局所的に保存し、例えばチャンネルマネージャを介して遠隔から読み出すこともできる。インテリジェントルータ92は、購読予約に対応するフィルタを検索する(ステップ308)。フィルタは、購読予約に対する1つ以上の属性テスト(attribute test)、多くの場合、属性テストのグループを含んでいる。インテリジェントルータ92は、フィルタ記述(filter description)のうちの対応する属性テストを、パケットの属性に適用する(ステップ310)。
【0080】
フィルタ記述の全ての属性テストの結果が肯定的である場合(ステップ312)、すなわち、属性が全ての属性テストを満たす場合、インテリジェントルータ92は、フィルタに関連した規則によって定められた1組の機能を実行する(ステップ314)。これらの機能には、例えば、次のリンクにパケットをルーティングすること、及び/又はローカルルータにおいて、パケットのコンテンツに対して、規則で定められた何らかの働き又は演算を実行することが含まれる。この働き又は次のリンクは、例えば、対応する購読予約を指定するデータ構造において識別される。規則がリンクである場合、規則は、通常、パケットを受信する次のネットワークノードを識別し、次のネットワークノードには、インテリジェントルータ、バックボーンルータ、ネットワークに接続された機器又は他のエンティティが含まれる。これに代えて、次のリンクは、他の手法で指定し又は購読予約に関係付けることができる。
【0081】
フィルタ記述の全ての属性テストの結果が肯定的でない場合(ステップ312)、すなわち、属性が全ての属性テストを満たさない場合、フィルタは、不一致(mismatch)が宣言される(ステップ315)。インテリジェントルータ92は、フィルタ記述の全ての属性テストが終了するまで、又は最初の否定的結果が得られるまで、上述した処理を繰り返す。
【0082】
インテリジェントルータ92は、このフィルタに対する全ての属性テストを行った後、更なるフィルタが存在するかを判定し(ステップ316)、更なるフィルタが存在する場合、インテリジェントルータ92は、ステップ308に戻り、次のフィルタに対する属性テストを読み出して、次のフィルタの属性を処理する。マッチング処理(ステップ308、310、312、314、315、316)は、フィルタの全集合に対する処理が終了するまで、あるいは全ての働き又は全ての規則に対する結果が判定されるまで続けられる。パケットがあるフィルタを満たさない場合、そのフィルタは、ドロップ(破棄)されて、転送されない。
【0083】
インテリジェントルータ92は、フィルタをある特定の順序に配列することができる。例えば表15に示すように、インテリジェントルータ92は、購読予約のフィルタを、ファイル又は経路選択テーブル内に保存することができ、属性にフィルタを適用する(属性テストの)ために、これらのフィルタを直線的に順序付けることができる。これに代えて、経路選択テーブルは、フィルタへのリンク又はポインタを含んでいてもよい。
【0084】
コンテンツベースの経路選択では、アプリケーション及び性能向上ヒューリスティックス(performance-enhancing heuristics)、例えばトラヒック条件に基づくアルゴリズムの切換に基づいて、複数の方法を選択的に同時に用いることができる。コンテンツベースの経路選択に関するペイロード部を検査するために、処理用のフィルタは、ネットワーク内のルータにおいて、選択的に暗号化、復号、変換及び併合することができる。例えば、アプリケーションにおける発行(publication)が、小数点以下2桁より小さい通貨属性を含まない場合、購読予約、例えば「価格>3.54122ドル」は、「価格>3.54ドル」に切り捨てられる。また、例えば、海外からの発行が、米国内に位置する最初のルータに到達したときに、外貨を、米国の通貨に換算してもよい。
【0085】
インテリジェントルータ92は、線形的な手法に代えて、処理の速度と効率を高めることができる他の順序で、又は様々なアルゴリズムに基づいて、処理するフィルタを選択することができる。表16は、購読予約と対応するリンクの具体例を示す。これらの具体例において、主語は、特定のチャンネルに関連し、主語の購読予約は、フィルタの経路選択規則によって表すことができる。主語は、例えば、ユニフォームリソースロケータ(Uniform Resource Locator:URL)のようなコンテンツの供給源装置(source)を識別するネットワークアドレスを含むことができる。
【0086】
【表15】

【0087】
【表16】

【0088】
図14は、キャッシング方法320のフローチャートである。キャッシング方法320は、例えば、インテリジェントルータ92内のプロセッサ93によって実行され、キャッシュマネージャ218として表されるソフトウェアモジュールによって実現することができる。これに代えて、このキャッシング方法300は、対応するインテリジェントルータと同じ又は異なる物理機器内のASICによって実現してもよく、あるいはハードウェアとソフトウェアの組合せによって実現してもよい。キャッシング方法320において、インテリジェントルータ92は、データ又はコンテンツと、チャンネルIDと、主語とを含むメッセージを受信する(ステップ322)。インテリジェントルータ92は、データにタイムマークを付して(time mark)(ステップ324)、データを、例えばメモリ94又は補助記憶装置97に局所的に格納する(ステップ326)。インテリジェントルータ92は、キャッシュデータに、チャンネルID、主語及びタイムスタンプによって、インデックスを付ける(ステップ328)。
【0089】
インテリジェントルータ92がデータの要求を受信した場合(ステップ330)、インテリジェントルータ92は、その要求に基づき、インデックスを用いて、キャッシュデータを検索する(ステップ332)。インテリジェントルータ92は、最終的に要求者装置(requester)又は他のエンティティに伝送するために、キャッシュデータを、バックボーンルータ95又は他の経路選択エンティティに転送する。キャッシング方法320は、継続的にデータをキャッシュに格納し、キャッシュデータ(cached data)を、要求に応じて検索するために、繰り返し実行することができる。
【0090】
図15は、キャッシング方法320に用いられるキャッシュインデックス336の具体例を示している。キャッシュインデックス336は、データ338が入力され、これをタイムスタンプ340とともに保存する。データを収集する際、全てのデータには期間Δt毎にマークが付される。ここで、期間Δtは、マーク間の時間、例えばt2−t1を表す。タイムマークの付与(time marking)のために、他のあらゆる種類のインデックスを用いてもよい。
【0091】
表17は、キャッシュデータに用いられるインデックスを概念的に示している。表18は、キャッシングのための接続履歴を保存するためのデータ構造を概念的に示している。表19は、インテリジェントルータを有するネットワークノードにおいて、データを局所的にキャッシュに格納するために用いられるデータ構造の具体例を示している。
【0092】
タイムマークの付与は、固定された如何なる間隔で行ってもよく、可変の時間間隔で行ってもよい。例えば、データを5分毎にキャッシュに格納して、インデックスを付けてもよい。キャッシュマネージャ218は、ステップ332において、時刻及び主語を指定した、キャッシュデータを読み出すコマンド(例えば、#.getCache)を受信すると、キャッシュインデックスを用いて、要求に対応するキャッシュデータを読み出すことができるか否かを判定する。
【0093】
各主語又はチャンネルは、例えば、マルチキャストツリー及び1組のインテリジェントルータにおけるそれ自体のIPアドレスを含むことができる。したがって、表18は、ユーザ装置に局所的に保存できる、このようなルータ間の接続履歴を示している。エッジルータが故障した場合、ユーザ装置は、エッジルータがオンラインに戻ったときに、チャンネルの上流(upstream)のルータにどのように再接続すべきかを決定するために、この接続履歴にアクセスすることができる。また、ユーザ装置は、例えば、それが切断されていた期間における購読予約に関する保留中のコンテンツを取得するために、ゲットキャッシュコマンド(get cache command)を実行することができる。
【0094】
【表17】

【0095】
【表18】

【0096】
【表19A】

【0097】
【表19B】

【0098】
これらの例示的なデータ構造は、以下の情報を含んでいる。主語ノード(subject node)は、主語識別子(subject identifier)と、主語レベル(subject level)と、親チャンネル(parent channel)又は主語ノードへのポインタと、それ自体のディレクトリのためのファイル記述子(file descriptor)と、その次のレベルの主語ノードを含むハッシュテーブル(hash table)へのポインタと、データノード(data node)へのポインタとを含んでいる。データノードは、主語親ノード(subject parent node)へのポインタと、データディレクトリ(data directory)のためのファイル記述子と、各記憶装置に保存されたデータのデータ構造を含む循環バッファ(circular buffer)と、バッファの最初及び最後と、検索及び保存中にデータノードをロックするロックとを含んでいる。保存された時間単位ノード(time grain node)は、実際のデータファイルを表すノードであり、最後の時間単位ノードは、メモリには維持されているが、記憶装置にはまだ保存されていない最後のバッファを表す。この実施例におけるキャッシング及びデータ記憶スレッドは、最後の時間単位ノードに対する同時アクセスを防止する、最後の時間単位ノードのミューテックス(mutex)を用いる。
【0099】
エージェントの処理
図16は、送信購読予約メッセージのためのエージェント方法350のフローチャートである。エージェント方法350は、例えば、購読者装置(以下、ユーザ装置ともいう。)122内のプロセッサ134によって実行され、エージェント128として表されるソフトウェアモジュールによって実現することができる。エージェント方法350において、エージェント128は、例えば、図11及び図12を用いて説明した購読方法264によって生成された購読予約を受信する(ステップ352)。エージェント128は、購読予約用の論理式を指定する文字列を生成し(ステップ354)、文字列を解析して、購読予約内のエラーを検出する(ステップ356)。エラーが存在する場合、エージェント128は、ユーザがエラーを修正し、購読予約を再入力するように促すエラーメッセージをユーザに表示する(ステップ360)。購読予約がエラーを全く含んでいない場合(ステップ358)、エージェント128は、例えば後続するステップのように、論理式をデータ構造内に保存する(ステップ362)。エージェント128は、データ構造内の構成要素である不等号式(constituent not-equal expression)を肯定的形式に変換し(ステップ364)、更にデータ構造を対応する論理和標準形式(disjunctive normal form:以下、DNFという。)に変換する(ステップ366)。また、エージェント128は、範囲フィルタ(range filter)及びメンバシップテスト(membership test)のみが含まれるように、DNF構造のAND式(AND expression)を単純化する(ステップ368)。
【0100】
DNFは、周知の標準形式(canonical form)であり、その標準形式においては、論理式は、1つ以上の部分式(sub-expressions)のOR(選言肢(disjunct)と呼ばれる)として表され、各部分式は、1つ以上の属性テストのANDで表される。例えば、論理式「price >= 10 AND (symbol ="LU" OR symbol ="T")」に等価なDNFの論理式は、論理式「(price >= 10 AND symbol ="LU") OR (price >= 10 AND SYMBOL ="T")」である。
【0101】
ステップ364における変換では、「不等号(not-equal)」演算子(例示的な構文では、!=で表す。)を有する論理式を、1つの許可されていない値ではなく、全ての許可される値を指定する等価な「肯定的(positive)」形式に変換することが必要である。この実施例のルータは、肯定的形式の式を要求するので、この変換は、DNFを生成する前に行われる。例えば、論理式「price != 80」は、等価な肯定的論理式「price<= 79 OR price >=81」に変換することができる。
【0102】
ステップ368における変換は、DNFが生成された後に実行されるので、得られるAND式を更に単純化しなければならず、また、この変換は、この実施例におけるルータの作業を単純化するために実行される。特に、同じ属性に対する複数の属性テストのANDは、1つの下限、1つの上限、下限及び上限の両方、又は等号テスト(equality test)の場合における単一の値のいずれかを標準的な(canonical)「範囲フィルタ」に単純化することができる。そして、特定の種類の範囲フィルタは、例えば表22に基づいて符号化される。
【0103】
例えば、論理式「price >= 10 AND price <= 80 AND price >=20 AND price <= 100」は、論理式「price >= 20 AND price <= 80」に単純化することができ、これは、下限と上限の両方を有する範囲フィルタの具体例である。単純化後の他の種類の具体例としては、「price >= 20(下限のみ)」、「price <= 80(上限のみ)」、「price = 50(単一の値)」等がある。これらの範囲フィルタを生成する際、何らかの部分式を真又は偽に単純化することができ、その場合、部分式は、論理代数の法則に従って削除することができ、これにより、メッセージ内の論理式の符号化が更に最適化される。例えば、論理式「price >= 50 AND price <= 20」は、論理式を満足させる「price」の値がないので、偽に単純化することができる。フィルタの論理式(filter expression)全体が偽に単純化される特別な場合、エージェント128は、メッセージを生成する必要がなく、これにより、ルータを不要な作業から解放することができる。
【0104】
主語フィルタがワイルドカードを含んでいる場合、エージェント128は、後述するように、それらを選択的に変換することができる(ステップ370)。これに代えて、如何なるワイルドカードもユーザ装置122又は他の機器ではなく、ネットワーク内において変換してもよい。この例示的な実施例では、主語フィルタの構文は、ワイルドカードを用いる唯一の構文であり、属性フィルタの構文は、論理式を用いる唯一の構文である。これに代えて、実施例において、主語フィルタ及び属性フィルタの異なる又は様々な種類の構文を用いてもよい。
【0105】
エージェント128は、生成されたDNFの論理式をメッセージに符号化し(ステップ372)、メッセージをインテリジェントルータに転送する(ステップ374)。この符号化は、購読予約を、一連のデータから構成されることを意味する平坦な(flat)メッセージフォーマットに変換することを含む。また、この転送は、購読予約に対する主語フィルタ及び属性フィルタから生成される経路選択規則を、ネットワーク内の1つ以上のインテリジェントルータ又は他の経路選択エンティティに伝搬することを含む。この伝搬のために、例えば、購読予約の論理式を従来のパケット構造にマッピングすることができる。
【0106】
ステップ372における符号化は、チャンネルの購読予約を、チャンネル全体に亘って伝搬するために、メッセージングAPIのメッセージフォーマットに配列(marshalling)することを含む。例えば、購読予約は、主語#.SUBSCRIPTIONを含む通知として内部的に送られる(messaged)。主語フィルタフィールドの変数(variable number)と属性テストの変数の両方があるので、この実施例では、主語フィルタフィールドの変数を保存するために、1対のバイトが用いられ、属性テストの変数を保存するために、もう1対のバイトが用いられる。主語フィルタの個々のフィールドは、連続して、例えば元の購読予約で指定された順番で配列され、各フィールドは、メッセージの2バイト部分に配列される。ワイルドカードフィールドの配列については後述する。
【0107】
属性テストの配列においては、属性テストのオペランドは、通知の属性値の配列と同様な方法で、メッセージの最後に配列される。属性テスト及びオペランドは、配列される前に、所定の属性に対する位置順(position order)のテストと、これに続く任意の属性に対する名称順(name order)のテストとによって、DNFの各選言肢内で属性順(attribute order)にソートされる。更に、各選言肢内のスカラ値の(scalar valued)属性に対する1組の関係テスト(relational tests)は、1つの限界値(limit)(左が開いた範囲(left-open range)又は右が開いた範囲(right-open range)又は等号(equality)のテスト)、又は2つの限界値(異なる限界値間の閉じられた範囲のテスト)を有する範囲フィルタとして、標準形式に単純化される。属性テストに関する残りの情報は、オペランドと同じ順番で、例えば2バイト対(two-byte pairs)に符号化され、この2バイト対のシーケンスは、メッセージ内において、主語フィルタフィールドの2バイト符号化のシーケンスの直後に配置される。2バイト対は、属性テストの連続したビット列の符号化の1つの形式を構成することができ、これは、2バイト対とは別に、他の種類の符号化を表すためにも用いることができる。属性テストの具体例については、後述する。
【0108】
表20は、属性テストの符号化規則を示している。表21は、2バイト対の符号化を示し、表22は、2バイト対の演算子IDの符号化を示している。
【0109】
【表20】

【0110】
【表21】

【0111】
【表22】

【0112】
テストの2バイト対が、既に、テストのオペランドの種類と、テストが所定又は任意の属性に適用された否かの両方を表しているので、任意の属性又はそれらの種類に対して実行されたテストの回数を別に配列する必要はない。この方式では、通知内の所定の属性の数が127個以下であると仮定している。これに代えて、この設計では、属性テストを符号化するために、より多くのビットを用いることができる。
【0113】
この配列規則は、属性フィルタのDNFに基づいて、属性テストを順序付け及びグループ化する(group)が、インフラストラクチャの構成要素(例えば、ルータ)は、属性フィルタの全体評価をより効率的に行うために、属性テストを別の順序で(例えば、異なる属性テストの成功又は失敗の確率に関して動的に導出されたローカルデータに基づいて)評価するように選択することができる。メッセージの購読予約IDフィールドは、購読予約を変更又は取り消す(unsubscribe)後続の要求において、エージェントのエッジルータに対して購読予約を一義的に識別するための、エージェントによって生成された値である。特に、購読予約の属性フィルタに対する動的な変更は、主語が#.RESUBSCRIPTIONであり、且つ購読予約IDが既に登録されたものであって、変更する購読予約IDである場合を除いて、図18の実施例に示すメッセージフォーマットを用いて伝搬される。購読停止(unsubscription)は、例えば、主語を#.UNSUBSCRIPTIONとし、購読予約IDを、既に登録されたものであって、登録を取り消す(unsubscribed)購読予約IDを有する図18に示すメッセージフォーマットを用い、購読予約IDフィールドによって伝搬される。
【0114】
以下、上述したエージェントによる変換及び符号化の具体例を説明する。具体的な属性フィルタの論理式「price >= 10 AND (symbol == "LU" OR (volume >= 1000 AND volume <= 10000))」について考察する。図19は、ステップ362において、論理式を保存するためにエージェントによって用いられるオブジェクト(object)を表した統一モデリング言語(Unified Modeling Language:以下、UMLという。)390を示している。この図19は、変数値、定数値又はその両方を含むことができる購読予約を指定するための階層関係を示している。図19のオブジェクトは、特定の実施例に基づく、フィルタクラスの例である。各単純フィルタ(simple filter)のオブジェクトは、フィルタの論理式の対応する属性テストに関する情報を保存するために用いられる属性の値を表している。図19に示す表現では、ORフィルタ396は、2つのANDフィルタ392、400に接続している。ANDフィルタ392は、購読予約の属性を有する単純フィルタ394を含んでいる。同様に、ORフィルタ396は、単純フィルタ398を含み、ANDフィルタ400は、単純フィルタ402、404を含んでいる。
【0115】
この実施例においては、属性price、symbol、volumeは、関連したチャンネルの所定の属性であり、それぞれ位置0、1、2が定義されているものとする。更に、各属性の種類は、それぞれ符号なし整数(タイプコード6)、文字配列(character array)(タイプコード12)、符号なし整数(タイプコード6)であるものとする。
【0116】
次に、その属性フィルタとして、上述した具体的な属性フィルタの論理式を含む購読予約について考察する。図18は、購読予約をメッセージに配列した具体例を示している。図18の左側の配列386は、実際のメッセージ内容を示しており、図18の右側の配列388は、メッセージの各部分の説明を示している。各配列の横幅は、4バイトに対応している。配列する前に、属性フィルタは、その等価なDNFの論理式「(price >= 10 AND symbol == "LU") OR (price >= 10 AND volume >= 1000 AND volume <= 10000)」に変換されている。
【0117】
16ビットの属性テストの符号化は、異なる部分を分離するギャップ(gap)を有するビットシーケンスとして示される。なお、この実施例においては、priceに対する2つのテストは、それぞれ別の選言肢内に存在するので、結合することができず、したがって、これらは、右の限界値(bound)がない範囲(右が開いた範囲)として別々に配列される。一方、volumeに対する2つのテストは、同じ選言肢内に存在するので、結合することができ、したがって、これらは、単一の「閉じた範囲」のテストとして配列される。
【0118】
また、特定のフィールドは、「仮定(assumed)」として特徴付けられ、これは、この具体例においては、これらのフィールドの値が、任意に選択され、通常、配列された購読予約から独立していることを意味する。更に、購読予約の主語フィルタは、「>」として任意に選択され、これは、関連したチャンネルによって定義された如何なる主語にも一致する。上述し、図18及び図19に示した具体例は、例示的なものであり、配列は、他のあらゆる種類の購読予約とともに用いてもよい。また、エージェント方法350は、購読予約を配列する一具体例に過ぎず、購読予約は、他の如何なる方法によって配列することができる。
【0119】
図17は、受信メッセージのためのエージェント方法376のフローチャートである。エージェント方法376は、例えば、ユーザ装置122のエージェント128及びアプリケーション126によって実現することができる。エージェント方法376において、エージェント128は、インテリジェントルータから購読予約に対応するメッセージを受信する(ステップ378)。エージェント128は、購読予約に対応するチャンネルを、例えばメッセージのチャンネルIDによって判定し(ステップ380)、チャンネルのAPIを呼び出す(ステップ382)。APIは、ユーザ装置122において、購読予約のデータをGUI又は他のフォーマットで表示する(ステップ384)。受信メッセージの処理としては、上述した符号化処理の逆のデータ復号処理を用いることができ、この復号(逆符号化)は、ルータ又は他のネットワークエンティティにおいて実行することができる。
【0120】
ワイルドカード処理
図20は、ワイルドカード方法410のフローチャートである。ワイルドカード方法410は、フィルタの1組の経路選択規則を用いて、ワイルドカードを購読予約の論理式に変換する具体例を示している。ワイルドカード方法410は、例えば、ユーザ装置122内のプロセッサ134によって実行され、エージェント128として表されるソフトウェアモジュールによって実現することができる。これに代えて、ワイルドカードは、ネットワークにおいて、インテリジェントルータ92内のソフトウェア制御のプロセッサ93によって、又はASIC91内の対応する機能によって処理することができる。ワイルドカードは、空のフィールド(open fields)又は可変長のフィールドを含んでおり、表21は、このようなフィールドの具体例を示している。
【0121】
ワイルドカード方法410において、エージェント128又は他のエンティティは、ワイルドカードを含む購読予約を受信する(ステップ412)。購読予約の主語長は、発行者がコンテンツを発行する際に指定でき、主語は、発行者装置100において前処理することができ、例えば主語のフィールドを数え、したがって、フィールド数(長)を得ることができる。エージェント128は、フィルタオペランド内のフィールドの数を数え(ステップ414)、フィールド長=Nの新たな規則(フィルタ)を初期化する(ステップ416)。エージェント128は、購読予約のサブフィールドを読み出し(ステップ418)、フィルタオペランドのサブフィールドO[i]がワイルドカードであるか否かを判定する(ステップ420)。フィルタオペランドのサブフィールドO[i]がワイルドカードでない場合、エージェント128は、接続詞(conjunctive clause)を規則に追加し、フィールド[i]=O[i]とする(ステップ422)。フィルタオペランドが更なるサブフィールドを有している場合(ステップ424)、エージェント128は、ステップ418に戻り、この更なるサブフィールドを処理する。パラメータ[i]は、フィールドを表し、iは、この実施例においては、フィールド番号を表す整数である。
【0122】
エージェント128は、サブフィールドを処理した後に、フィルタオペランドの最後のサブフィールドが「>」であるか否かを判定し(ステップ426)、フィルタオペランドの最後のサブフィールドが「>」である場合、長さの制約(constraint)をフィールド長>N−1に変更する(ステップ428)。ワイルドカード処理は、あらゆる種類のシンボルを用いることができ、「>」は、その一例に過ぎない。この具体例においては、「a.>」は、a.b、a.c、a.d等を表し、全てのレベルにおけるこれらの全てのサブ主語(例えば、a.b.x、a.c.x、a.b.x.y等)を表すことができる。また、他のシンボルをワイルドカードとして用いてもよい。
【0123】
必要に応じて、エージェント128は、変更された規則(transformed rule)をインテリジェントルータ92又はネットワークにおける他のエンティティに伝搬する(ステップ430)。したがって、ワイルドカード方法410は、ワイルドカード規則を、ワイルドカードを含まないことを意味する非ワイルドカード規則に変換するために、全てのサブフィールドに対して繰り返される。ワイルドカードの変換は、ネットワーク内の任意の場所、例えば、購読者装置122又はインテリジェントルータにおいて行うことができる。したがって、この変換は、他のエンティティに伝搬された、変更された規則を有する1つのエンティティで行い、又は動的に行うことができる。
【0124】
表23は、ワイルドカードを処理するこれらの例示的な経路選択規則の概要をその具体例とともに示している。これらの経路選択規則は、例えば、インテリジェントルータで生成してもよく、又は他のネットワークエンティティで生成し、インテリジェントルータに伝搬してもよい。更に、表23の経路選択規則は、説明のために例示的に示しているに過ぎず、他の経路選択規則を用いてワイルドカードを変換してもよい。
【0125】
【表23】

【0126】
警告サービス
上述したインテリジェントなコンテンツベースの経路選択は、様々な用途に用いることができ、その1つとして、デジタルビデオ監視システム(digital video surveillance system:以下、DVSSという。)がある。例えば、警察又は警備会社等のユーザは、特定の位置のカメラからのビデオクリップを購読予約することができる。カメラは、デジタルビデオクリップを捕捉し、例えばインターネット等、コンテンツベースの経路選択を有するネットワークを介してこれらのクリップを伝送し、ネットワークコアは、購読予約に基づいて、ビデオクリップを処理する。これにより、ユーザは、興味があるビデオクリップを受信し、これらのフィルタリングは、ネットワークを介して配信することができる。ビデオクリップに加えて、例えば、機密保護違反、発火、不正検出等に対する如何なる種類の警告を提供するために、他の如何なる種類のコンテンツを配信してもよい。
【0127】
他の実施例としてカメラは、関連する動きセンサを備えていてもよい。この動きセンサは、動きを検出すると、カメラを起動し、捕捉と同時にビデオクリップをネットワークに伝送し、ネットワークは、コンテンツベースの経路選択を用いて、購読者にビデオクリップをルーティングする。
【0128】
したがって、上述したコンテンツベースの経路選択により、ビデオクリップの処理及びルーティングに関するネットワークの負担を大幅に削減することができる。例えば、各電荷結合素子(charge coupled device:CCD)カメラによって生成されたビデオ信号を、デジタルビデオレコーダ(DVR)によって、DVRによって管理された局部記憶装置、ネットワークに取り付けられた広域記憶装置(global storage)、DVSSシステム及びIDSS管理サーバといった4つの異なる宛先に書き込む必要があるとする。このような膨大なデータ量を搬送するためのネットワーク帯域幅を考慮すると、IDSSによって管理されるCCDカメラ又はDVRの容量が顧客の能力要求を満たさない場合がある。したがって、例えば、媒体又は大口顧客のための技術を用いて、帯域幅を制限する必要がある。図21は、各DVRが、4台又は16台のCCDカメラを管理できる監視システムの全体的なアーキテクチャを示している。
【0129】
アーキテクチャ概要:
図22は、主に上述した技術に基づいて、図21に示す監視システムの能力を向上させる2つの拡張例を示している。図22に示すように、第1の拡張は、DVRバックボーントラヒックを低減することを目的とし、第2の拡張は、上述したようなデータ配信効率を向上させるための機能と同様なコンテンツベースの経路選択機能を提供するzボックス(z-box)と呼ばれる機器を用いる。
【0130】
DVRバックボーンのローカルトラヒックの低減:
データ配信スキームが非効率であると、重大な拡張性の問題が生じることがある。すなわち、TCPベースのプロトコルを用いて、DVRによって生成される画像ファイルを他のボックスに供給する場合、使用される帯域幅は、ローカルエリアネットワーク(LAN)に接続されている機器の数に比例して大きくなる。例えば、IDSSについて言えば、同じストリーミングビデオデータは、ネットワークに接続された記憶装置(SAN又はNAS)、IDSSモニタ、及び遠隔監視ソフトウェアである各DVSSに送信する必要がある。
【0131】
この問題を解決する1つの手法として、各DVRが1つのみのデータストリームをLANに発行し、ネットワークに接続された他の機器が購読予約の結果として、このデータストリームを受信するようにしてもよい。この場合、DVRの出力レートが10メガビット/秒(Mbps)であれば、例えば、ネットワーク上に3個の購読機器に情報を提供するために必要な出力レートは、30Mbpsではなく、10Mbpsで足りる。
【0132】
このような発行−購読構造を実現するために、DVRボックス又はDVRデータを利用する他の何らかの機器(例えば、IDSS、広域記憶装置)において、上述した事象通知APIを用いることができる。この事象通知APIは、単純であるが、有効であり、ここでは、IPマルチキャスティング及び復旧プロトコル(recovery protocol)を用いることができる。また、この事象通知APIは、上述の発行−購読モデルに基づいて実現でき、このため、他の実施は、コードを変える必要はなく、単に、事象通知APIを提供するライブラリの完全版に再リンクさせればよい。
【0133】
DVSSのプロキシ:
各DVSSは、DVRボックスへの1つの接続(TCPベース)を確立し、ストリーミングビデオデータを受信することができる。
【0134】
図22に示すように、この手法は、2つの段階によって説明することができる。第1の段階であるステージ1では、LAN側において、全てのDVSS発信データ(すなわちDVRからDVSSに供給されるデータ)を処理するためのプロキシサーバ(例えば、zボックス1)を準備する。このプロキシサーバは、LAN上の全てのDVRデータを購読し、外部のネットワーク(例えば、インターネット)にそのデータを発行する。DVSSは、このデータを購読する。したがって、プロキシサーバであるzボックス1は、購読者エージェント(例えば、エージェント128)と、DVRからデータを集める上述した発行−購読ネットワーク等の発行−購読ネットワークを介してこのデータを発行する発行者エージェント(例えば、エージェント36)とを提供する。
【0135】
ステージ1により、LAN側において、トラヒックを大幅に削減することができるが、特に幾つかの国において、典型的な非対称デジタル加入者線(ADSL)が64のキロビット/秒(kbps)のアップリンク速度しか有していないような場合、送信リンクにおけるトラヒックの問題が残る。
【0136】
更に図22を用いて説明すると、ステージ2では、好ましくは、サービスプロバイダの機械室(machine room)を借り受け又は他の手法で確保し、ここに第2のzボックス機器、例えばzボックス2を配設する。例えば、zボックス機器は、ハイネットバックボーン(Hi-Net backbone)上に配設してもよい。顧客の敷地内において、zボックス2から又はへの単一の接続(トンネル)を設定することができる。
【0137】
この場合、顧客の敷地内のzボックス2は、購読者エージェント(例えば、エージェント128)として機能する。また、zボックス2は、経路選択デーモン(例えば、経路選択デーモン216)としても機能することができる。zボックス2は、購読者エージェントとして(例えば、ハイネット機械室(Hi-Net machine room)内において)、好ましくは、DVRがzボックス1を介して発行する情報を購読する。zボックス1とzボックス2間は、上述のような発行−購読ネットワークである。したがって、zボックス1は、DVRからのビデオ情報を発行し、zボックス2は、DVSSによる要求に応じて、このビデオ情報を購読する。このように、ここに開示する事象通知システムを用いることによって、警告サービスのデータ配信効率が向上する。zボックス機器(例えば、zボックス1及びボックス2)は、好ましくは、上述のように、この発行−購読ネットワークを介して発行及び購読を行うためのモジュールを備えている。
【0138】
デジタルコンテンツ配信
上述したインテリジェントなコンテンツベースの経路選択は、購読予約を介したビデオ及び音楽の配信、ソフトウェアの更新等、様々な用途に用いることができる。例えば、ユーザは、例えば、ウィルス除去ソフト等のソフトウェアの更新を購読予約することにより、アップデートされたソフトウェアを自動的に受け取ることができる。他の実施例として、ユーザは、特定のビデオ及び音楽コンテンツを購読予約し、その購読されたコンテンツを自動的に受け取るようにしてもよい。ビデオ及び音楽コンテンツは、例えば、ストリーミングデジタルコンテンツとして受信することができる。更に、ネットワークコアにおける分散処理により、ソフトウェア、ビデオ及び音楽コンテンツを提供するためのサーバの処理負担を実質的に軽減することができる。したがって、他の様々な利点とともに、コンテンツを提供するための同じネットワークインフラストラクチャにおいて、ネットワーク帯域幅を有効に活用することができる。
【0139】
この経路選択を実現するためのアーキテクチャの一具体例を図23に示す。なお、このアーキテクチャは、好ましくは、ネットワークサービスプロバイダの同じ設備内に配設されている2つのレベルのキャッシュサーバCl、C2を想定する。但し、キャッシュサーバClのみを用いても、本発明の利益を享受することができる。キャッシュサーバCl、C2とは、上述した(図14、図15及び対応する説明参照)分散ネットワークキャッシングを提供するサーバである。このアーキテクチャは、例えば、2つの段階によって実現される。キャッシュサーバC2が存在しないと仮定する第1の段階では、セントラルディストリビュータ450とキャッシュサーバClの間において、高速ファイル転送メカニズムを用いて、大きなメディアファイルを転送するために必要なサーバ負荷と時間を減少させる。この高速ファイル転送メカニズムは、好ましくは、セントラルディストリビュータ450とキャッシュサーバClの間にルーティングボックス(図23における470)設けることによって実現される。第2の段階では、キャッシュサーバC2において、ルーティングボックスを設け、ユーザ(例えば、ユーザマシン460)とキャッシュサーバC2の間で上述した購読予約メカニズムを実現する。
【0140】
ルーティングボックスを用いる利点:
ルーティングボックス470は、好ましくは、上述したようなコンテンツベースの経路選択を実現するためのモジュール(例えば、上述したインテリジェントルータ92)を備える。上述したコンテンツベースの経路選択を実現するルーティングボックス470を用いる主な利点は2つある。これらのルーティングボックス470を用いた高速ルーティング及びファイル転送ソリューションにより、FTPやRCP等の従来のファイル転送プロトコルに比べて5倍程度ファイル転送を加速できる。また、広域ネットワーク(WAN)を介した効率的なマルチキャストを実現できる。中央から受信機のグループにデータを送信する場合、このルーティングソリューションでは、ネットワークマルチキャストトポロジーを利用し、WANの上でマルチキャスティングトンネルを構築することによってコンテンツ配信速度が加速され、サーバ負荷とネットワーク帯域幅要求を軽減することができる。
【0141】
アーキテクチャ:
メディアコンテンツは、セントラルディストリビュータからキャッシュサーバC1に配信される。キャッシュサーバClは、全てのコンテンツファイルを保存する。各キャッシュサーバClは、全てのコンテンツを保存するために、例えば、数テトラバイトのディスク容量を必要とする。ユーザは(例えば、購読者装置122等のユーザマシン460を用いて)、コンテンツの一部のみを保存するキャッシュサーバC2に対してコンテンツを要求する。キャッシュサーバC2は、例えば、数百ギガバイトものディスク容量を必要とする。
【0142】
ユーザとC2キャッシュの間のファイル転送:
ユーザ460が購読予約を発行することによってメディアファイルを要求すると、キャッシュサーバC2の1つによって処理される要求されたメディアファイルがC2サーバに既にキャッシングされている場合、ファイルは、直ちに提供される。これ以外の場合、購読予約は、キャッシュサーバC1に送信され、要求されたファイルは、キャッシュサーバC1からキャッシュサーバC2に転送される。
【0143】
ClキャッシュからC2キャッシュまでのメディアデータの予備的キャッシング(Pre-caching):
メディアファイルは、ユーザ購読予約又は購読予約のパターンに基づいて、キャッシュサーバC1からキャッシュサーバC2に予めキャッシングしてもよい。例えば、キャッシュサーバC2に接続するユーザ460が主にポップスに関心がある場合、キャッシュサーバC1は、ユーザ460がキャッシュサーバC2に曲を要求する以前に、ポップスの新たな曲をキャッシュサーバC2に自動的に供給してもよい。
【0144】
導入段階:
第1の段階は、例えば、ディストリビュータ450と、全てのキャッシュサーバC1との間のコンテンツルーティングを行う高速ファイル転送メカニズムをインストールする処理を含む。ここでは、キャッシュサーバC2は、不要である。この場合全てのユーザ460は、キャッシュClに直接接続する。キャッシュサーバC1は、ディストリビュータ450から定期的に新たなメディアファイルを受け取る。図24は、第1の段階のアーキテクチャを示している。
【0145】
なお、図24において、ディストリビュータ450は、上述したインテリジェントなコンテンツベースの経路選択技術に基づき、ルーティングボックス470に新たなメディアファイルを一回だけ送信する。したがって、ディストリビュータ450の負担が軽減される。ルーティングボックス470は、高速ファイル転送メカニズムを用いて、各キャッシュサーバC1にファイルを出力する。この場合、受信機460の側では、更なるルーティングボックスは不要である。これに代えてキャッシュサーバC1のために他の種類のサーバを用いてもよい。
【0146】
図25は、第2段階の実施例のアーキテクチャを示している。この実施例に示す第2の段階では、好ましくは、カーネルを実装するルーティングボックス470を用いて、データをルーティング及び送信している。カーネルレイヤソリューションは、バッファコピーを低減し、コンテキスト切換時間を短縮するため、ファイルを送る際のオーバヘッドを更に減少させる。更に、第2の段階のソリューションでは、図25に示すように、キャッシュサーバC2をアーキテクチャに追加する。また、図25に示すように、好ましくは、C2側において、サービスプロバイダネットワーク内の同じ位置に、ルーティングボックス470が追加されている。これにより、帯域幅要件が大幅に軽減され、帯域幅を数百分の一にできる可能性もある。
【0147】
図25に示すように、キャッシュサーバC1とキャッシュサーバC2の間で転送されるファイルは、キャッシュサーバC1に関連付けられるルーティングボックス470と、キャッシュサーバC2に関連付けられるルーティングボックス470とを介して転送される。このように、これらのルーティングボックス470を用いて、キャッシュサーバC1、C2の間において、高速ルーティング及びファイル転送ソリューションが実現される。
【0148】
サービス品質の管理
上述したインテリジェントなコンテンツベースの経路選択は、例えば、特定の配信を保証するコンテンツのルーティングのために用いることができる。例えば、サービス品質保証制度(service level agreement:以下、SLAという。)に基づいて、ISP又はコンテンツプロバイダは、サービス品質(quality of service:以下、QoSという。)を保証するために帯域幅を確保することができる。これは、上述したコンテンツベースのインテリジェントルーティングによって効率的に実現される。
【0149】
アーキテクチャ:
コンテンツ配信におけるQoSを保証するために、少なくとも2つの可能な構成がある。第1の構成では、複数のリンクを1つ以上の電話会社(telephone company:以下、TELCOという。)のネットワークに接続する。第2の構成では、TELCOネットワークへの1つのネットワークリンクだけを用いる。図26に示す実施例では、2つのレイヤのルーティングボックス(以下、Rボックスともいう。)を設けている。Rボックス1は、データパケットのコンテンツに基づいて、Rボックス2とRボックス3にパケットをルーティングする。Rボックス2とRボックス3は、異なるネットワークリンク(例えば、L1−L4)にデータパケットをルーティングする。各リンクは、TELCOネットワークに接続されている。プレミアムユーザ(premium customers)のための帯域幅を確保するために、最も高いSLAに対応する顧客用に生成されたデータパケットは、最も高い帯域幅(最も高い優先順位)でリンクにルーティングされ、これにより、これらの顧客のための特定のQoSが保証される。
【0150】
図27に示す実施例では、Rボックス1は、Rボックス2及びRボックス3にデータパケットをルーティングする。Rボックス2とRボックス3は、更に異なる通信リンクにデータパケットをルーティングし、これらの通信リンクは、全てRボックス4に接続されている。Rボックス4は、4つのリンクからそれぞれのリンクのQoSレベルに基づいて、データパケットを受信する。そして、Rボックス4は、ネットワークリンク(例えば、L5)を介して、インターネットISPにデータパケットを送信する。このシステムは、各リンクからデータを受け取るための様々なアルゴリズムを実装することによって、各リンクについて、帯域幅を動的に割り当てることができ、マルチリンク構成より優れたQoS管理を行うことができる。
【0151】
技術:
QoS保証には、インテリジェントで分散型の上述したコンテンツベースの経路選択技術を利用することができる。ルーティングされる各パケットは、コンテンツベースの経路選択のためにタグが付される。このソリューションによって、他の様々な利点とともに、ASP/コンテンツプロバイダのためのQoSの展開が経済的に可能になる。
【0152】
利点:
このソリューションにより、インターネット接続サービス業者(例えば、IDC)又はコンテンツプロバイダ(例えば、メディアオンデマンドの(MOD)サービスプロバイダ)は、顧客毎に、それらのSLASに基づいて個別に帯域幅を確保できる。
【0153】
リアルタイムの警告:
警告に異なる優先順位を付すことができる。例えば、セキュリティ及び火災警報に最も高い優先順位を与え、ニュースの告知には、低い優先順位を与えることができる。QoSルーティングを行わなければ、優先度が低い警告及び通信によってASPのネットワーク帯域幅を占領され、最優先の警告がリアルタイムで購読者に届かないこともある。このソリューションは、このような事態の発生を防ぐ。また、警告は、それぞれのSLASに基づいて、各顧客に送信することもできる。プレミアムユーザがより多くの料金を支払うことにより、これらのユーザに対してより広い帯域幅を割り当てるようにしてもよい。
【0154】
実時間データ配信:
例えば、ビデオオンデマンド(VOD)、MOD、及びIPを介した音声送信(VoIP)等の幾つかの用途では、帯域幅の利用可能性は、サービスの品質に影響する。このソリューションでは、上述のように、パケットのコンテンツを検査することによって、メッセージの種類に基づいてデータパケットをルーティングできる。帯域幅に大きく影響される用途では、それらのデータパケットをより高い優先順位のリンクにルーティングするとよい。メッセージの種類に加えて、購読者のSLAレベルに基づいて、様々な購読者にデータパケットをルーティングしてもよい。このソリューションを用いることにより、SLAがより高い顧客に対しては、パケットをより高いレベルのリンクにルーティングできる。
【0155】
また、このソリューションは、ソフトウェア又はウィルス対策のための更新にも利用できる。例えば、音声用ドライバファイルは、優先順位が低いリンクにルーティングし、アンチウィルスファイルは、優先順位が高いリンクにルーティングすることにより、ウィルス対策のための更新をリアルタイムで行うことができる。
【0156】
コンテンツベースのフィルタリング:
図28に示すように、コロケーションサービスを用いることにより及びRボックスをTELCOネットワーク内部に配設することにより、システムは、ISPの外部でフィルタリング及び動的なキャッシングを実行することができる。TELCOネットワーク内部のRボックスを用いて、上述したコンテンツのフィルタリング技術に基づいて、データをフィルタリングすることにより、IDC/ISPネットワークにおけるトラヒックを減少させることができる。これにより、例えば、サービス妨害攻撃や不正なデータアクセス等のハッカーアタックを防止することができる。また、R−ボックスは、要求のコンテンツを検査する能力により、静的及び動的なウェブデータのためのキャッシングボックスとしても機能する。このソリューションは、例えば、機密保護を可能にし、TELCOとISPの間のネットワーク帯域幅を節約し、ISPサーバの負荷を軽減できる等の利点がある。
【0157】
選択的なマルチキャスティングによるキャッシング
メッセージの持続性とは、メッセージを保存し、後にこの保存されたメッセージを読み出すことができる性質を指す。例えば電子メールを始めとする多くの特定の用途では、通常、ネットワークを介して通信されるメッセージについて、長いメッセージ持続性が必要とされる。ネットワーク障害が発生しない理想的な条件では、常時接続された購読者は、これらの特定の用途において必要とされる以上の如何なる持続も求めない。しかしながら、現実には、メッセージは、ネットワークを介して伝送されている間に様々な理由のために「失われる」ことがある。この理由としては、例えば、(1)ネットワーク又はユーザ側における故障又はバッファオーバフローや(2)ユーザが自らネットワーク接続を切断した後、所定の期間経過後に再び接続する場合等がある。
【0158】
この実施例における事象通知プラットフォームの持続モデルは、短期持続と長期持続の2つのレベルに分割される。短期持続は、ネットワーク輻輳又は短期的なリンク障害のために失われたパケットを復元する。長期持続は、例えば、ユーザ接続の障害、ユーザ装置の障害、アプリケーションの障害及び/又はより長い期間ネットワーク内の障害等を含む他の障害に起因して失われたパケットを復元する。以下では、これらの2つのスキームの具体例について説明する。
【0159】
短期持続:データ再送及びフロー制御
データネットワークにおいては、データ損失の原因は、単に、リンク障害とバッファオーバフローの2つに分類できる。事象通知システムについて信頼できるチャンネルを提供するためには、これらの問題を解決する必要がある。リンク障害については、順方向誤り訂正(FEC)スキームを実行して、リンク障害によって引き起こされる幾つかのエラーを修正することができる。ここで、エラーが深刻であり、如何なるFECスキームでもエラーを修正できないような場合、パケットを復元するための更なるスキームを提供する必要がある。また、バッファオーバフローの発生を防止する必要もある。データネットワークにおいて、このような問題を避けるためには、通常、フロー制御スキームが用いられる。
【0160】
短期持続スキームにおいては、好ましくは、伝送制御プロトコル(Transmission Control Protocol:以下、TCPという。)トンネルを用いて、ホップバイホップ方式でイベントルータ(例えば、インテリジェントルータ12)を接続する。信頼できる転送プロトコル(例えば、RMTP)を用いる代わりに、信頼できるレイヤ−2トンネルを用いる理由は複数ある。短期持続スキームでは、好ましくは、事象通知システムにおいて、メッセージがフィルタ規則を満たさない場合、メッセージは、ルータにおいて、無視される。この結果、受信ルータは、多くの場合、ソースシーケンスナンバー(Source Sequence Number:SSN)等のスキームを用いても、パケットの損失を検出できない。また、全ての受信ルータが、受信した各パケットについて肯定応答を行うことも望ましくない。このような処理を行うと、肯定応答のオーバロード(すなわち、ACKエクスプロージョン(ACK-explosion))が生じる。更にバッファオーバフローを避けるために短期持続モデルは、フロー制御スキームを実現し、これにより、ルータのバッファ容量が一杯になる前に、ルータは、自らにメッセージを送る隣接するルータに、メッセージの供給の速度を遅くするよう要求することができる。これらのスキームは、TCPによってカバーされている。
【0161】
TCP伝送ポリシ:
短期持続スキームにおいて用いられるTCPにおいては、好ましくは、データの送信側で、局所的に送信ウィンドウを用いて、再送処理されたデータを監視する。送信ウィンドウを用いる目的は、2つある。第1に、送信ウィンドウにより、送信側は、データが受信機によって正しく受信されたことを明示的に確認でき、第2に、送信ウィンドウにより、チャンネル容量をより有効に活用できる。TCPにおいては、送信側が送信した各バイトは、暗示的又は明示的に肯定応答を受ける必要がある。送信ウィンドウは、送信側が、送信され、肯定応答されたデータを監視するのに役立つ。送信側は、動作を止めて、先のパケットに関する肯定応答を待機する必要なく、送信ウィンドウ内でデータを送信できるので、また、送信ウィンドウにより、チャンネルの利用効率を向上させることができる。一旦、前のデータが肯定応答されると、ウィンドウは、自動的に進められる。
【0162】
また、TCPでは、受信ウィンドウも維持される。受信ウィンドウは、好ましくは、データ受信端末において、使用可能なバッファ容量を示すために用いられる。使用可能なバッファ容量が送信側に送られ、これにより送信側は、受信側におけるバッファオーバフローをどのように回避できるかを知ることができる。
【0163】
TCP輻輳制御:
TCPは、エンドツーエンドトランスポートプロトコルとして設計されているので、短期持続スキームで利用されたTCPは、発行−購読ネットワーク内におけるバッファオーバフローの問題も解決する。この問題を解決するために、短期間の持続モデルのために用いられるTCPは、好ましくは、第3のウィンドウである輻輳ウィンドウ(congestion window)を用いる。送信側は、輻輳ウィンドウを用いて、パスに沿ったルータにおける最大のバッファ容量を推定することができる。簡潔に言えば、送信側がパケットの損失を検出すると輻輳ウィンドウのサイズが縮小され、逆にパケットの損失が検出されないと、輻輳ウィンドウのサイズが拡大される。
【0164】
長期持続:持続的なチャンネルのキャッシング
チャンネルは、(例えば、上述のように)持続的であっても又はリアルタイムであってもよい。リアルタイムチャンネルは、実時間においてのみ有用であり、アプリケーション固有の如何なる持続要求も有さないデータを送信する。持続チャンネルは、持続タイムフレームTの間、ネットワークを介して送受されるデータを保存する。換言すれば持続チャンネルの持続性は、タイムフレームTの間、保証される。このデータの持続性は、例えば、チャンネルの持続期間の間、それぞれのエッジノードでデータをキャッシングすること、障害が生じた条件下で、ユーザにトランスペアレントなキャッシュからのデータを検索すること、ユーザがキャッシュから明示的にデータを読み出すことができるようにすること、ルータ障害に対する保護及びルータの間で信頼できるトンネルを確立することにより、ネットワークを介したデータのフローを持続的にすること、及び複製によって、障害に対してチャンネル成分を保護すること等によって実現される。
【0165】
したがって、後述するように、長期持続スキームにより、購読者の端末に障害が生じ、持続的なチャンネルのためのタイムフレームT内に再び復帰すると、持続的なチャンネルに登録された購読者は、直前のタイムフレーム「X」(X<T)の間、ネットワークにおいてキャッシングされた古いデータを検索することができる。
【0166】
長期持続スキームにおいては、購読者アプリケーション(例えば、アプリケーション126)は、関連する購読者エージェント(例えば、エージェント128)から好ましくは、明示的に、データ(例えば、メッセージ)をプルすることができる。上述のように、エージェントは、プロキシを利用でき又はプロキシによって実現することができる。エージェント又はプロキシがネットワーク内の障害から復帰した後、このエージェントは、キャッシュから、自らがエッジルータから切断されていた期間に対応するデータを好ましくはトランスペアレントに検索する。また購読者は、長期持続スキームにおいて、好ましくは、直前のTタイムフレームに含まれるデータのみにアクセスすることができる。このため、好ましくは、エージェント(又はプロキシ)が接続されているエッジルータに関して、時間が判定される。検索されたキャッシングされたデータは、好ましくは帯域外で配信され、実時間配信は保証されない。長期持続スキームの実施例は、クラッシュから復帰した、又はエッジルータ(例えば、エッジルータ16)から切断された既存の購読者を対象とするものである。新たな購読者は、キャッシングされた情報を得ることはできない。
【0167】
持続性の定義:
購読者に対する(タイムフレームTによる)期限付きの持続性は、発行−購読ネットワークから直前のタイムフレームTに含まれるデータを読み出すことができる能力として定義される。購読者がネットワークから切断されると、購読者の不在の間に受け取られた持続的なチャンネル上の如何なるデータも、(データの受信から)タイムフレームTの間、ネットワーク内に保存される。購読者がタイムフレームT内に復帰した場合、購読者は、如何なるデータも失わない。但し、購読者がTから2Tの期間内に復帰した場合、購読者は、データを失う可能性がある。また、購読者が2Tを過ぎて復帰した場合、購読者に対しては、好ましくは、それまでの如何なるデータも保証されない。
【0168】
上述の定義により、購読者をリーフとする発行−購読ネットワークツリーは、購読者が切断された後、タイムフレームTの間保持され、その後に購読者を切り離す必要がある。これにより、購読者が切断された後、タイムフレームTの間に受信された新たなデータは、タイムフレームTが経過するまで保持される。
【0169】
アーキテクチャ:
図29は、キャッシングによって持続性を実現する発行−購読ネットワークの一部を示すブロック図である。図29に示すように、ネットワークは、コアルーティングノード548とエッジルーティングノード545とを備える。各ルーティングノードは、図4を用いて上述したように、好ましくは、インテリジェントルータ92(エッジルーティングノードと共に示す)と、従来のバックボーンルータ(図示せず)とを備える。持続的なチャンネルのためのキャッシングを行う必要がある各インテリジェントルータ92は、図29に示すように、好ましくは同じ場所にキャッシュマネージャ218を備える。キャッシュマネージャ218については、図8を用いて上述した通りである。インテリジェントルータ92は、好ましくは、失われたデータを読み出し又はルータ故障から復元するための短期的な持続性を実現する。キャッシュマネージャ218は、チャンネルにおける長期的な持続を実現するために、データをキャッシングする。キャッシュマネージャ218は、好ましくは、キャッシュ540内にこのデータをキャッシングする。キャッシュ540は、好ましくは、メモリとディスク(図示せず)を含んでいる。
【0170】
長期持続のためにデータをキャッシングするために、インテリジェントルータ92に対して、キャッシュマネージャ218を設けることには、例えば次のような利点がある。キャッシングされたデータにインデックスを付すための負荷が大きい演算は、独立したプロセッサによって実行でき、したがって、ルーティング及びフィルタリングプロセッサの性能には影響がなく、及びキャッシングされたデータを定期的にディスクに移動するためのディスクI/O動作も他のプロセッサによって実行でき、これにより、ルーティングとフィルタリングからサイクルが奪われることを防ぎ、エッジルータが定期的な入出力動作を行う必要を無くすことができる。
【0171】
また、図29に示すエージェント128は、図5を用いて上述したように、好ましくは、購読者装置122(図25Aでは示していない)内に設けられる。エージェント128は、キャッシュマネージャ218と通信し、キャッシュ540からデータを検索し、検索したデータを受け取り、検索したデータを組織化する。上述のように、エージェント128は、プロキシを利用でき又はプロキシによって実現することができる。
【0172】
障害が発生しない条件下では、エッジルータノード545のみが関連するキャッシュマネージャ218を有していればよい。しかしながら、図29には示していないが、長期持続スキームでは、障害を予期しているので、好ましくは、エッジルーティングノード545より上流側にある第1のレベルのコアルーティングノード548のそれぞれがデータを保存するためのキャッシュマネージャ218を備えている。上流とは、エージェント128から遠ざかる(すなわち、購読者装置122から遠ざかる)方向である。第1のレベルの上流コアルーティングノードとは、エッジルーティングノード545より上流側に隣接するルーティングノードを意味する。発行−購読ネットワークは、多くの場合、複数の第1のレベルのコアルーティングノードを含んでいるが、図29では、1つの第1のレベルのコアルーティングノード、すなわちコアルーティングノード548のみを示している。上述のように、キャッシュマネージャ218は、自らが存在するネットワークノードにおいて、データのローカルなキャッシングを実現する。したがって、例えば、コアルーティングノード548を含む様々なコアルーティングノードに存在するキャッシュマネージャ218の動作は、ネットワークコア内のデータの分散型のキャッシングを実現する。この分配型のキャッシングは、エッジルーティングノードのキャッシングにバックアップを提供する。
【0173】
図30は、上流ルータ(例えば、コアルーティングノード548)におけるバックアップキャッシングを説明する図である。各長期持続スキームにおいては、各キャッシュは、次の上流ルータのキャッシュによってバックアップされる。上流のキャッシュは、全ての受信データを保存し、下流の次のレベルの全てのエッジルータのキャッシュのバックアップとして機能する。上流のキャッシュのデータは、好ましくは、エッジルータキャッシングと同じメカニズムを用いて保存される。
【0174】
図31は、持続的なチャンネルのキャッシングのためのアーキテクチャを示しており、このアーキテクチャでは、好ましくは、以下のような4つの異なるモジュールに亘る機能を提供する。キャッシュマネージャ218は、好ましくは、インテリジェントルータ92を通過するデータを保存するサーバ処理を行う。ルータキャッシュAPI552は、好ましくは、インテリジェントルータ92からキャッシュマネージャ218への制御、例えば、キャッシュを作成及び消去する処理に関連する全てのアクセスのためのライブラリである。エージェント(又は、プロキシ)キャッシュAPI554は、好ましくは、エージェント128(又はエージェント128プロキシ)からキャッシュマネージャ218への制御、例えば、データの検索に関連する全てのアクセスのためのライブラリである。エージェント128(又はプロキシ)は、好ましくは、キャッシュ546から検索されたデータを収集し、このデータを組織化する。
【0175】
図31を用いて、これらの4つのモジュールのインタラクションを説明する。エージェント128とインテリジェントルータ92は、好ましくは、キャッシュAPIライブラリ552、554を介してキャッシュにアクセスする。キャッシュAPIライブラリ552、554は、キャッシュ546を初期化し、主語のためにキャッシュを作成及び消去し、キャッシュアドレスを検索し、及び最も重要な機能としてキャッシュ546からデータを検索するためのAPIを提供する。経路選択デーモン216は、好ましくは、キャッシュAPI552を介さず、データパスを介して、キャッシュマネージャ218にデータを送信する。キャッシュAPI552、554は、データ検索を含む全ての制御メッセージについて、好ましくは制御パスを用いる。
【0176】
キャッシュマネージャ−キャッシュ管理:
図32に示すように、キャッシュマネージャ218が新たなチャンネルに遭遇するとキャッシュマネージャ218は、好ましくは情報サーバ(例えば、上述したサーバ152、154及び/又は156)を呼び出し、そのチャンネルのためにチャンネルマネージャ150を獲得する。キャッシュマネージャ218がチャンネルマネージャ150のアドレスを得ると、キャッシュマネージャ218は、好ましくは、チャンネルマネージャ150からチャンネル特性を検索する。チャンネル特性には、例えば、チャンネル主語ツリー及び属性、チャンネルの持続特性、チャンネルの持続タイムフレーム(T)、及びキャッシングの精度等が含まれる。キャッシュマネージャ218が、所定の主語について、チャンネルを介して伝送されるデータのキャッシングを開始する前に、キャッシュマネージャ218において、その主語のキャッシュを作成する必要がある。キャッシュマネージャ218は、キャッシュ作成メッセージを待機し、そのメッセージに応じて、主語キャッシュを作成する。この主語キャッシュは、要求に応じて、消去され、中断され又は再開される。図32は、購読予約に対するキャッシュの作成を示している。
【0177】
キャッシュマネージャ−キャッシュデータ入力:
キャッシュマネージャ218は、好ましくは、以下に示すような様々な手法によって、インテリジェントルータ92に入るデータにアクセスすることができる。すなわち、インテリジェントルータ92の入力リンク上の全てデータをキャッシュマネージャ218にも送るIPと同様のソリューションを用いてもよい。また、スニフィングメカニズムを用いてもよい(この場合、キャッシュマネージャ218は、インテリジェントルータ92のネットワークを介して伝送される全てのパケットを待機する)。また、フィルタリングの後に、インテリジェントルータ92が、1つ以上のリンクに伝搬させる必要がある各メッセージをキャッシュ546に供給してもよい。また、キャッシュマネージャ218は、全てのインテリジェントルータ92に供給されるデータに関する購読者として機能してもよい。
【0178】
キャッシュマネージャ−キャッシュデータストレージ:
図33に示すように、好ましくは、キャッシュマネージャ218は、例えば、チャンネルID、主語、発行者ID、タイムスタンプ、タイムグレイン(G)、プライマリキャッシング属性、リンク(キャッシングが障害のために行われる特別な場合)及び他の様々な手法によって、キャッシュ546内のデータにインデックスを付す。データにインデックスを付し、ファイルシステム又はメモリ内の階層的ディレクトリ構造に保存してもよい。データは、好ましくは、メモリ内にキャッシングされ、定期的にディスクに移動される。メモリ内のキャッシングは、タイムグレイ「G」の期間のみ行われる。タイムグレインGが経過すると、ツリー内の特定のブランチに関連する全てのデータは、好ましくは、そのブランチの下のファイルに移動され、そのブランチの最も古いファイルに上書きされる(なお、各メッセージをディスクに個別に書き込むことは高価であり、G期間を一回の動作でディスクに書き込んだ方が効率的であるためタイムグレインGは、好ましくは、スライディングウィンドウとしてではなく、絶対ウィンドウとして実現する)。図33は、インデックスツリーの具体例を示している。持続性のためにデータをキャッシングする場合、好ましくは、図33に示す第1のインデックスツリーを用いる。
【0179】
図33に示すように、主語は、好ましくは、階層構造内に保存され、ここで、「a」は、例えば「a.b」、「a.c」、「a.d」等の主語の親である。キャッシュマネージャ218は、キャッシュ546のために、全ての主語を対応するファイル位置にマッピングするハッシュテーブルを保管する。幾つかの具体例では、キャッシュ546は、上流ルータ(例えば、コアルーティングノード548)がそのリンク上の下流のルータ(例えば、エッジルーティングノード545)における障害を検出した場合、障害が発生した条件下で、データを保存する必要がある。復旧のための1つの手法は、下流のルータを再起動することである(この処理は、数分もかかることがある)。下流のルータが再起動されている間、上流ルータは、そのリンクの下流方向に供給するデータをキャッシングする必要がある。このキャッシュ(例えば、図33ではFMキャッシュと示す。)は、好ましくは、出力側のリンク上でインデックスが付される。
【0180】
キャッシュマネージャ:ガーベージコレクション:
チャンネルが持続的でない場合、キャッシュ546は、データを保存せず、直ちにデータを消去する。チャンネルが持続的である場合、キャッシュ546は、データを保存する。特定のチャンネルの持続タイムフレーム「T」は、それぞれサイズがGであるN個のタイムグレインに分割される。メモリへのキャッシングは、Gに対応する期間のみ行われる。キャッシュマネージャが、期間Gが経過したと判定すると、データは、ディスクに移動される。キャッシュマネージャ218は、持続タイムフレーム期間Tの間、データをディスクに保存する。
【0181】
期間Gに対応するデータは、時間が、そのチャンネル+期間の上限の持続タイムフレーム期間(T)を過ぎた場合、ディスクから削除される。具体的には、例えば、チャンネルの持続タイムフレーム期間Tが2時間であるとする。ここでは、例示的に、キャッシュマネージャ218は、15分のタイムグレインGを用いるとする。この場合、データをディスクから削除するための規則は、次の通りである。すなわち、期間G(15分)の間に最後にキャッシングされたデータが期間T(2時間)の間保存された場合、その15分の期間の間にキャッシングされた全てのデータが破棄される。したがって、その15分の期間の最初にキャッシングされたデータは、破棄されるまでに、2時間より長く保存されることとなる。この実施例では、各15分の期間にキャッシングされるデータは、データのブロックである。持続タイムフレームTがN個の期間に分割される場合、如何なる時刻においても、各主語のためのキャッシュ546において、N+1個(ディスクにN個とメモリに1個)のデータのブロックが保存される。
【0182】
キャッシュマネージャ−キャッシュデータ検索:
図34に示すように、エージェント128(又はプロキシ)は、好ましくは、キャッシュ読出処理(GetCache operation)を呼び出し、現在の時間から期間T分遡ったデータを入手する。図34においては、キャッシュ読出処理を呼び出すためにエージェント128が接続するキャッシュマネージャ218には、ポータルキャッシュのラベルを付している。ルータ又はエージェント128の失敗/切断のため、ポータルキャッシュは、エージェント128によって要求されたデータの全てを有していない場合がある。この場合、ポータルキャッシュは、他の全てのキャッシュ(例えば、上流のキャッシュ)からデータを検索し、データを照合し、このデータをエージェント128に返す。図34は、異なるタイムスタンプ(TS1、TS2、TS3)に対する、複数のキャッシュ(A、B、C)からの検索を示している。
【0183】
キャッシュマネージャ218は、好ましくは、タイムグレインGのデータのブロックのみを検索する。したがって、エージェント128には、予期又は要求したデータより多くのデータが提供されることもある。更に複数のキャッシュから検索を行うと、キャッシュ間において、幾つかの期間が重複し、エージェント128は、データが重複して供給されることもあり、このため、エージェント128は、キャッシュによって提供されるデータストリームにおける重複を削除する必要がある。
【0184】
キャッシュマネージャの他のモジュールとのインタラクション:
キャッシュマネージャ218は、好ましくは、図35に示すように、事象通知システムインフラストラクチャにおいて、幾つかのモジュールとインタラクトする。キャッシュマネージャ218が(キャッシュ作成時に)新たなチャンネルに遭遇すると、キャッシュマネージャ218は、好ましくは、そのチャンネルのチャンネルマネージャ150を得るために情報サーバ550を呼び出す。一旦、キャッシュマネージャ218がチャンネルマネージャ150のアドレスを得ると、キャッシュマネージャ218は、好ましくは、チャンネルマネージャ150からチャンネル特性に関する情報を得る。アドミニストレータモジュール552は、好ましくは、キャッシングの分割の度合い等の幾つかの特性を設定/変更することができる。また、アドミニストレータモジュール552は、好ましくは、マニュアルでチャンネルキャッシュを作成/削除することもできる。
【0185】
エージェントキャッシュAPI−アプリケーションエージェントインタラクション:
アプリケーション(例えば、アプリケーション126)は、好ましくは、エージェントキャッシュAPI554を呼び出し、所定の主語とフィルタとともにキャッシュ546を得る。好ましくは、アプリケーションは、既にそのデータを購読予約している場合、キャッシュ546からそのデータのみを検索することができる。エージェントキャッシュAPI554は、実際には、好ましくは2つのAPIを提供する。
【0186】
第1のAPIにより、購読予約していないアプリケーションは、キャッシュ546の購読予約と検索を同時に行うことができる。「FIFO」フラグが設定されている場合、購読予約が作成され、エッジルータノード545に送信される。エージェント128がキャッシングされた全てのデータを受け取った後に、エージェント128は、まず、キャッシングされた全てのデータを配信し、そのデータにおいて、全ての発行者が確認できなかった最後のシーケンスを監視し、この各発行者が確認できなかった最後のシーケンスから、中断されたデータを配信する。
【0187】
第2のAPIでは、アプリケーションが既にあるデータを購読予約し、キャッシングされたデータを要求していると仮定する。この場合、アプリケーションには、キャッシュデータに関して、連続的ではない幾つかのデータが既に配信されている。この具体例では、「FIFO」フラグは、単に、キャッシュ546から読み出されたデータが自ら順序を決定するが通常のデータストリームと同様の順序である必要はないことを示す。
【0188】
エージェント128は、好ましくは、1つの大きなデータのブロック内の全てのイベントを読み出す。エージェント128は、キャッシュAPI554からデータを読み出した後、好ましくは、コールバック動作を呼び出す前に(上述参照)、データに対して以下のような動作を行う。この動作とは、通知のリストからの通知の生成、各発行者について、最後のシーケンス番号の監視、及びフィルタリングである。エージェント128によって全てのイベントをコールバックに渡す処理が完了すると、エージェント128は、キャッシュ完了イベント(DoneCache event)をコールバックに渡し、キャッシングされた全てのデータが配信されたことを示す。このとき、購読予約がFIFOであり、通常のデータが中断されている場合、エージェント128は、好ましくは、中断された全ての通知を配信する。このとき、エージェント128は、シーケンス番号がキャッシングされたデータにおける最後のシーケンス番号より大きい通知のみを配信する。
【0189】
エージェントキャッシュAPIとキャッシュのインタラクション:
購読者がキャッシングされたデータを供給した場合、エージェント128側のキャッシュAPI554は、好ましくは、まず、エージェント128が接続されているエッジルータに関する履歴を調べ、キャッシュ読出要求(GetCache request)によって定義されている期間を用いて、リストをフィルタリングする。API554は、キャッシュ読出(GetCache)(チャンネル、主語、フィルタ、local_pubs、time_period、FIFO、ルータのアレー)メッセージをAPI554が接続されていた最後のエッジキャッシュに送信する。キャッシュマネージャ218は、好ましくは、チャンネルID、主語及びタイムスタンプに基づいてデータをプルし、このデータをエージェント128に戻す。キャッシュマネージャ218によるデータの供給が完了すると、キャッシュマネージャ218は、キャッシュ完了イベント(DoneCache event)をキャッシュAPIに渡し、データの転送がキャッシングされた全てのデータが配信されたことを示す。
【0190】
キャッシュマネージャ218がデータをローカルで検出できない場合、キャッシュマネージャ218は、エージェント128によって提供される「ルータのリスト」を用いて、必要なデータを検索する。キャッシュマネージャ218が必要な全てのデータを集めると、キャッシュマネージャ218は、必要なデータを照合し、重複削除を行った後に、このデータをエージェント128に供給する。
【0191】
キャッシュ接続履歴:
キャッシュ546からのデータの検索を可能にするために、好ましくは、エージェント128において、上流のキャッシュと同様に両方の側のキャッシュに関するキャッシュ接続履歴が維持される。この情報は、エージェント128がシャットダウン及びクラッシュした場合に必要であるので、この情報は、ファイルに持続的に保存する必要がある。キャッシュ接続履歴は、好ましくは、以下のようなファイル及びフォーマットによってディスクに保存される。
【0192】
エッジキャッシュ位置:
エッジキャッシュの位置(例えば、エッジルーティングノード546のキャッシュ546)は、好ましくは、チャンネルマネージャ/チャンネルライブラリから得られる。これは、起動時及びこれに続く、例えば、接続の切断/再接続、接続の変更等によってエッジキャッシュが変化した、如何なる時点でも発生する。ディスパッチャは、エッジキャッシュ接続の全ての変化をエージェント128に通知し、これらの変化は、エージェント128のキャッシュライブラリに伝えられる。変化が起こるたび、その情報は持続される。
【0193】
持続的なストレージ:CACHE_ROOT/channel_id/Channel−キャッシングされたデータのためのパスの具体例
データは、好ましくは次のようなフォーマットで保存される。
エッジキャッシュの数;
エッジキャッシュ1:インターバルの数、StartTimel:EndTimel、StartTime2:EndTime2、...;
エッジキャッシュ2:インターバルの数、StartTimel:EndTimel、StartTime2:EndTime2、...;・・・
ここで、最後のタイムスタンプがリストの最初に設けられる。なお、2つの異なるエッジキャッシュが重複する期間を有することはない(エージェント128は、一度に1つのエッジキャッシュのみに接続されるため)。新たなエントリが追加される毎に、古いエントリは、それらがまだ有効であるか確認され、それらが無効である場合、このエントリは、削除される。期間は、時刻EndTime+チャンネルの持続期間<現在の時刻となった場合、無効となる。
【0194】
エッジキャッシュエントリは、エントリ内の全ての期間が無効になった場合、無効になる。なお、「EndTime」が0であるということは、その期間が現在有効であることを意味する。
【0195】
上流のキャッシュ位置:
上流のキャッシュ(例えば、コアルーティングノード548のキャッシュ546)の位置は、主語に依存している。各主語は、それ自身のマルチキャストツリーを有し、したがって、第1のレベルの上流のキャッシュの組は、主語の関数である。ユーザが主語を購読予約すると、インテリジェントルータ92は、必ず主語に関連している上流のキャッシュのリストを返す。同様に、障害又はマルチキャストツリーの再構成に起因する上流のキャッシュ位置のあらゆる変化は、制御パスを介してエージェント128に伝えられる。これらの変化は、持続的なメモリ(ファイル)に局所的に記録される。
【0196】
持続的なストレージ:CACHE_ROOT/channel_identifier/subject(階層ではなく、完全な主語)−キャッシングされたデータのためのパスの具体例
データは、好ましくは、以下のフォーマットで保存される。
上流キャッシュの数;
上流キャッシュ1:インターバルの数、StartTimel:EndTimel、StartTime2:EndTime2,...;
上流キャッシュ2:インターバルの数、StartTimel:EndTimel、StartTime2:EndTime2、...;・・・
ここでも、最後のタイムスタンプがリストの最初に設けられる。エッジキャッシュ期間とは異なり、エージェント128は、所定の主語について、複数の上流のキャッシュを有することができるので、2つの上流キャッシュが重複する期間を有することがある。また、上流のキャッシュファイルのコンテンツは、エッジキャッシュの場合と同様なアルゴリズムを用いて集められたガーベージである。
【0197】
データ検索の間のキャッシュ妥当性:
エージェント128が有効な間、エージェント128は、接続を介して、異なるエッジルータ及び上流ルータ間を移動する。エージェントキャッシュAPI554は、好ましくは、この接続履歴をローカルメモリに保存する。エージェント128が、キャッシュ546からデータの最後のT期間を読み出す必要がある場合、エージェントキャッシュAPI554は、好ましくは、接続履歴を調べ、そのデータにアクセスするためのキャッシュを判定する。これのために用いられるアルゴリズムは、好ましくは以下の通りである。(1)キャッシュライブラリは、全てのエッジキャッシュ期間を探検し、Tタイムフレーム内に含まれる期間を確認する。(2)リストLeは、期間開始時刻に基づいて、リストLeをソートする。(3)LE内のエッジキャッシュによってカバーされていない各期間について、上流キャッシュを探索し、この期間をカバーできる全ての上流キャッシュ期間に関する情報を得て、有効な期間をリストLuに加え、LeにLuを追加し、期間開始時刻を用いてLeをソートし、Lを作成する。
【0198】
このアルゴリズムによりキャッシュのリストLが生成され、各キャッシュについて、データを読み出すための期間が得られる。次に、このキャッシュのリストLは、(4)キャッシュ読出メッセージに組み込まれ、キャッシュマネージャ218に送信される。キャッシュマネージャ218側では、キャッシュマネージャ218は、好ましくは、(5)ゲットキャッシュメッセージからキャッシュ期間を取り出し、開始時刻順にソートされたリストLを再構築する。リストLの各期間の間、キャッシュマネージャ218は、好ましくは、(6)前の期間と現在の期間の間に、隙間があるか否かを確認し、隙間があれば、そのデータのローカルキャッシュを要求する。このような隙間がなければ、キャッシュマネージャ218は、好ましくは(7)関連するキャッシュにデータを読み出すよう指示する。キャッシュマネージャ218は、好ましくは(8)全てのキャッシュからのデータを照合し、このデータをエージェント128に送信する。
【0199】
ルータキャッシュAPI:
インテリジェントルータ92側のルータキャッシュAPI552は、特定の主語のためのキャッシングを作成し、消去し、停止し、再開するためにキャッシュマネージャ218を呼び出す。また、ルータキャッシュAPI552は、初期の構成を処理する。すなわち、ルータキャッシュAPI552は、インテリジェントルータ92からチャンネルマネージャ150にキャッシュアドレスをアップロードし、これにより、エージェント128側(エージェントキャッシュAPI554)は、必要なときにこの情報を得ることができる。更に、ルータキャッシュAPI552は、他のルータのキャッシュ546の位置を読み出す(この位置は例えば、購読予約に対する応答において及び主語ツリーの変更の後にインテリジェントルータ92が所定の主語のための上流キャッシュをエージェント128に通知する際に用いられる)。
【0200】
プルのためのキャッシュの使用:
上述の説明では、持続的なチャンネルを実現し、購読者がネットワークからデータをプルすることによって情報を返すためのキャッシュの使用に焦点をあてた。変形例では、如何なる購読者(新たな購読者又は復帰した購読者)もキャッシュ546から(例えば、購読者が購読予約していないが、他の誰かの購読予約のためにキャッシュ546に保存されているデータを含む)あらゆる種類のデータをプルすることができる。この実施例と先の実施例との違いは、復帰した購読者については、データの存在が保証され、データの位置は、既知であるが、新たな購読者については、保存されているデータの位置が未知であるという点である。この変形例を実現する単純な手法は、チャンネルにおいて「キャッシュ検出(FindCache)」要求を発行することである。キャッシュ検出要求は、チャンネルID、主語、フィルタ、期間及び要求されたキャッシングされたデータを有するキャッシュ546を探すエージェント128の位置を含んでいる。全てのキャッシュ546がキャッシュ検出要求を待機している。各キャッシュ546が要求を受け取ると、キャッシュ546は、対応するデータが自らのデータストアにあるか否かを確認し、自らがそのデータを保存している場合、自らの位置をユニキャストメッセージとして返す。エージェント128は、キャッシュ546の1つを選択し、そのキャッシュ546をキャッシュ読出処理によって呼び出し、そのデータを得る。
【0201】
最新データプル:
他の実施例では、購読者アプリケーション(例えば、アプリケーション126)が所定の主語について、最新のメッセージを得ることができる最新データプルを実現する。これは、例えば、株価警告等のデータに有効であり、この場合、ユーザは、履歴ではなく、最新の株価に関する情報のみを希望する。
【0202】
キャッシュマネージャの実現:
キャッシュマネージャ218の実現においては、好ましくは、3種類のスレッドを用いる。データキャッシングスレッド−データキャッシングスレッドは、好ましくは、インテリジェントルータ92への接続からデータを取り出し、データにインデックスを付してメモリに保存する。データストレージスレッド−期間の最後に到達すると、データストレージスレッドは、メモリに保存されているデータをディスクに移動させ、及びこの処理において、期限切れのデータに関するガーベージコレクションを実行する。データ検索スレッド−データ検索スレッドは、好ましくは、キャッシングされたデータの要求を受け、キャッシュ546からデータを検索する。これらの3つの種類のスレッドは、単一のスレッドとして実現してもよく、スレッドのプールとして実現してもよい。好ましくは、データキャッシングスレッドとデータストレージスレッドは、データがディスクに移動される時刻に同期される。このようにデータストレージスレッドとデータ検索スレッドとを同期させることにより、データの検索中にデータが消去されることが防止される。
【0203】
データ構造:
キャッシングのためのデータ構造の具体例は、表19及びこれに関連する説明に記した通りである。
【0204】
データストレージ:
図36は、「アクイラキャッシュ(Aquila Cache)」と呼ばれるキャッシュ546にデータファイルを保存するために用いられる好適なディレクトリ構造を示している。なお、各主語レベルのディレクトリは、好ましくは、その主語について発行されるデータを保存するデータディレクトリに加えて、1組の子主語ディレクトリを有する。例えば、エンターテインメントチャンネルにおいて、FOXムービーから発行されたデータは、AquilaCache/エンターテインメント/FOX/ムービー/データ(AquilaCache/Entertainment/FOX/Movies/Data)のディレクトリのファイルに格納され、主語FOXについて発行されたデータは、AQUILACACHE/エンターテインメント/フォックス/データ(AquilaCache/Entertainment/FOX/Data)のディレクトリのファイルに格納される。データのストレージを高速に行うために、好ましくは、インテリジェントルータ92がキャッシュ546に対し、所定のチャンネルと主語に関するキャッシングを開始するよう要求した時点で、特定の主語のディレクトリ階層を構築する。
【0205】
データ検索:
キャッシュ546からのデータ検索は、データのストレージを妨げないように、及びキャッシュ546がホールドアップしないように、効率的に行う必要がある。このデータ検索では、ディスクとメモリの両方からデータを読み出す。データ検索においては、好ましくは以下のようなステップを実行する。(1)データノードの位置を検出する。(2)データノードをロックする。(3)呼び出す必要があるデータのタイムスタンプを検出する。(4)データを読み出し、メモリに保存する。(5)データノードをロック解除する。(6)メモリに保存され、読み出されたデータをフィルタリングし、並べ替えた後、エージェント128クライアントにプッシュする。
【0206】
以上、例示的な実施例を用いて本発明を説明してきたが、これらの実施例を様々に変形できることは当業者にとって明らかであり、本発明は、これらの如何なる適応化又は変形をも含む。例えば、本発明の範囲から逸脱することなく、様々な種類の発行者装置、ユーザ又は購読者装置、これらのチャンネル及び構成、コンテンツベースの経路選択及び他の機能のハードウェア及びソフトウェアによる実現が可能である。この発明は、特許請求の範囲及びその均等物によってのみ制限される。

【特許請求の範囲】
【請求項1】
プロセッサによって実行され、ネットワークにおいて、サービス品質保証に基づいてパケットをルーティングするルーティング方法において、
ヘッダ部と、ペイロード部とを有するパケットを受信する受信ステップと、
ネットワークコアにおいて、上記パケットをルーティングする前に、該パケットのペイロード部を検査する検査ステップと、
上記パケットの確保された帯域幅に関する上記サービス品質保証を判定する判定ステップと、
上記検査及び上記サービス品質保証に基づいて、上記パケットを選択的にルーティングするルーティングステップとを有し、
上記検査ステップは、
上記ペイロード部からデータ属性を抽出するステップと、
上記抽出したデータ属性を2つ以上の属性フィルタと比較するステップと、
上記2つ以上の属性フィルタのそれぞれが満たされる場合、1組の機能を実行するステップとを有し、
上記各属性フィルタは、購読者が、発行者から受信した興味があるイベントの組を記述していることを特徴するルーティング方法。
【請求項2】
上記検査ステップを、上記ネットワークコア内のルータで実行するステップを更に有する請求項1記載のルーティング方法。
【請求項3】
上記検査を実行するために、上記属性フィルタを、上記ネットワーク内のルータに伝搬するステップを更に有する請求項1記載のルーティング方法。
【請求項4】
上記受信ステップ、検査ステップ及びルーティングステップを実行するために、上記ネットワーク内のルータをプログラミングするステップを更に有する請求項1記載のルーティング方法。
【請求項5】
上記1組の機能は、上記パケットをどのようにルーティングするかを決定することを含むことを特徴とする請求項1記載のルーティング方法。
【請求項6】
プロセッサによって実行され、ネットワークにおいて、メッセージをルーティングするルーティング方法において、
ヘッダ部と、少なくとも1つの主語と、複数のデータ属性とを有するメッセージを受信する受信ステップと、
上記メッセージから、上記主語及び上記データ属性を読み出す主語/属性読出ステップと、
上記主語に基づいて、複数の属性フィルタを指定する購読予約を読み出す購読予約読出ステップと、
上記メッセージの確保された帯域幅に関するサービス品質保証を判定するステップと、
上記メッセージをどのようにルーティングするかを決定するために、ネットワークコアにおいて、上記購読予約に上記データ属性を適用する適用ステップと、
上記適用及び上記サービス品質保証に基づいて、上記メッセージを選択的にルーティングするステップとを有し、
上記適用ステップは、
上記パケットから上記データ属性を抽出するステップと、
上記抽出したデータ属性を2つ以上の属性フィルタと比較するステップと、
上記2つ以上の属性フィルタのそれぞれが満たされる場合、1組の機能を実行するステップとを有し、
上記各属性フィルタは、購読者が、発行者から受信した興味があるイベントの組を記述していることを特徴するルーティング方法。
【請求項7】
上記1組の機能は、上記メッセージをルーティングすることを含むことを特徴する請求項6記載のルーティング方法。
【請求項8】
上記2つ以上の属性フィルタが満たされない場合、上記メッセージを削除するステップを更に有する請求項6記載のルーティング方法。
【請求項9】
上記検査ステップを、上記ネットワークコア内のルータにおいて実行するステップを更に有する請求項6記載のルーティング方法。
【請求項10】
プロセッサ及びメモリを有し、ネットワークにおいて、サービス品質保証に基づいてパケットをルーティングするルーティング装置において、
ヘッダ部と、ペイロード部とを有するパケットを受信する受信手段と、
ネットワークコアにおいて、上記パケットのペイロード部を検査する検査手段と、
上記パケットの確保された帯域幅に関する上記サービス品質保証を判定する判定手段と、
上記検査手段及び判定手段による判定の結果得られた検査結果及び上記サービス品質保証に基づいて、上記パケットを選択的にルーティングするルーティング手段とを備え、
上記検査手段は、
上記ペイロード部からデータ属性を抽出し、
上記抽出したデータ属性を2つ以上の属性フィルタと比較し、
上記2つ以上の属性フィルタのそれぞれが満たされる場合、上記パケットをどのようにルーティングするかを決定し、
上記各属性フィルタは、購読者が、発行者から受信した興味があるイベントの組を記述していることを特徴すルーティング装置。
【請求項11】
上記検査を、上記ネットワークコア内のルータで実行する手段を更に備える請求項10記載のルーティング装置。
【請求項12】
上記検査を実行するために、上記属性フィルタを、上記ネットワーク内のルータに伝搬する手段を更に備える請求項10記載のルーティング装置。
【請求項13】
上記受信、検査及びルーティングを実行するために、上記ネットワーク内のルータをプログラミングする手段を更に備える請求項10記載のルーティング装置。
【請求項14】
当該ルーティング装置は、ルータであることを特徴とする請求項10記載のルーティング装置。
【請求項15】
プロセッサ及びメモリを有し、ネットワークにおいて、メッセージをルーティングするルーティング装置において、
ヘッダ部と、少なくとも1つの主語と、複数のデータ属性とを有するメッセージを受信する受信手段と、
上記メッセージから、上記主語及び上記データ属性を読み出す主語/属性読出手段と、
上記主語に基づいて、購読予約を読み出す購読予約読出手段と、
上記メッセージを購読者装置にどのようにルーティングするかを決定するために、ネットワークコアにおいて、上記購読予約を複数のフィルタに照合する照合手段と、
上記パケットの確保された帯域幅に関するサービス品質保証を判定する判定手段とを備え、
上記主語/属性読出手段は、
上記購読予約に対応した複数のフィルタを読み出す手段を備え、
上記各フィルタは、購読者が、発行者から受信した興味があるイベントの組を記述していることを特徴するルーティング装置。
【請求項16】
上記データ属性が上記複数のフィルタのそれぞれを満たす場合、上記サービス品質保証に基づいて、上記メッセージを選択的にルーティングする手段を更に備える請求項15記載のルーティング装置。
【請求項17】
上記データ属性が上記複数のフィルタの全てを満たさない場合、上記メッセージを削除する手段を更に備える請求項15記載のルーティング装置。
【請求項18】
上記フィルタリングを、上記ネットワークコア内のルータにおいて実行する手段を更に備える請求項15記載のルーティング装置。
【請求項19】
当該ルーティング装置は、ルータであることを特徴とする請求項15記載のルーティング装置。
【請求項20】
マルチキャストネットワークにおいて、データのパケットをルーティング及びキャッシングするルーティング/キャッシング方法において、
ヘッダ部と、ペイロード部とを有するパケットを受信する受信ステップと、
上記パケットを購読者装置にどのようにルーティングするかを決定するために、ネットワークコアにおいて、該パケットのペイロード部を検査する検査ステップと、
上記検査に基づいて、上記パケットを選択的にルーティングするルーティングステップと、
上記パケットに対応するチャンネルを判定するステップと、
上記チャンネルのチャンネル特性を読み出すステップと、
上記チャンネル特性から、上記チャンネルが持続的なチャンネルであるか否かを判定するステップと、
上記チャンネルが持続的なチャンネルである場合、上記パケットからデータを、上記ネットワークコアのコアルーティングノードで局所的にキャッシングするステップとを有し、
上記コアルーティングノードは、エッジルーティングノードの上流の購読者装置から離れる方向に位置することを特徴するルーティング/キャッシング方法。
【請求項21】
上記検査ステップを、ルータで実行するステップを更に有する請求項20記載のルーティング/キャッシング方法。
【請求項22】
上記検査ステップは、上記ペイロード部内の情報にフィルタを適用するステップを含むことを特徴とする請求項20記載のルーティング/キャッシング方法。
【請求項23】
上記検査を実行するために、上記フィルタを、上記ネットワーク内のルータに伝搬するステップを更に有する請求項22記載のルーティング/キャッシング方法。
【請求項24】
上記受信ステップ、検査ステップ及びルーティングステップを実行するために、上記ネットワーク内のルータをプログラミングするステップを更に有する請求項20記載のルーティング/キャッシング方法。
【請求項25】
上記検査ステップは、上記パケットをどのようにルーティングするかを決定するために、上記属性を検査するステップを含むことを特徴とする請求項20記載のルーティング/キャッシング方法。
【請求項26】
上記キャッシングされたデータにタイムマークを付すステップを更に有する請求項20記載のルーティング/キャッシング方法。
【請求項27】
上記キャッシングされたデータにインデックスを付すステップを更に有する請求項20記載のルーティング/キャッシング方法。
【請求項28】
データ要求を受信するステップと、
上記キャッシングされたデータが上記データ要求を満たすか否かを判定するステップとを更に有する請求項20記載のルーティング/キャッシング方法。
【請求項29】
エッジルーティングノードにおいて、上記パケットからデータを局所的にキャッシングするステップを更に有し、
上記コアルーティングノードにキャッシングされたデータは、上記エッジルーティングノードにキャッシングされた全てのデータ及び他の位置にキャッシングされたデータを含むことを特徴する請求項20記載のルーティング/キャッシング方法。
【請求項30】
タイムフレームTの経過後に、上記キャッシングされたデータを削除するステップを更に有する請求項20記載のルーティング/キャッシング方法。
【請求項31】
データのパケットをルーティング及びキャッシングするネットワークにおいて、
ヘッダ部と、ペイロード部とを有するパケットを受信して、ルーティングするエッジルーティングノードであって、該受信したパケットをルーティングするインテリジェントルータを含むエッジルーティングノードと、
ネットワークコア内に位置するコアルーティングノードと、
上記コアルーティングノード内に位置し、上記インテリジェントルータに動作可能に接続されたキャッシュマネージャとを備え、
上記インテリジェントルータは、
上記パケットを購読者装置にどのようにルーティングするかを決定するために、上記ネットワークコアにおいて、該パケットのペイロード部を検査する命令と、
上記検査に基づいて、上記パケットを選択的にルーティングする命令とを有し、
上記キャッシュマネージャは、
上記パケットのそれぞれに対応するチャンネルを判定する命令と、
上記チャンネルのチャンネル特性を読み出す命令と、
上記チャンネル特性から、上記各チャンネルが持続的なチャンネルであるか否かを判定する命令と、
上記チャンネルが持続的なチャンネルである場合、上記対応するパケットからデータを、上記コアルーティングノードのローカルキャッシュで局所的にキャッシングする命令とを有し
上記コアルーティングノードは、エッジルーティングノードの上流の購読者装置から離れる方向に位置することを特徴するネットワーク。
【請求項32】
上記エッジルーティングノードに動作可能に接続されたエージェントを更に備え、
エージェントは、
上記キャッシングされたデータの位置を判定する命令と、
上記ローカルキャッシュから、上記キャッシングされたデータを読み出す命令と、
上記読み出したキャッシングされたデータを処理する命令とを有することを特徴する請求項31記載のネットワーク。
【請求項33】
上記チャンネルのチャンネル特性をそれぞれを提供する複数のチャンネルマネージャを更に備える請求項31記載のネットワーク。
【請求項34】
上記キャッシュマネージャは、
上記キャッシングされたデータにタイムマークを付す命令を更に有することを特徴とする請求項31記載のネットワーク。
【請求項35】
上記キャッシュマネージャは、
上記キャッシングされたデータにインデックスを付す命令を更に有することを特徴とする請求項31記載のネットワーク。
【請求項36】
上記キャッシュマネージャは、
データ要求を受信する命令と、
上記キャッシングされたデータが上記データ要求を満たすか否かを判定する命令とを更に有することを特徴とする請求項31記載のネットワーク。
【請求項37】
マルチキャストネットワークにおいて、データのパケットをルーティング及びキャッシングするルーティング/キャッシング装置において、
複数のプロセッサと、
上記複数のプロセッサによって実行される命令とを備え、
上記命令は、
ヘッダ部と、ペイロード部とを有するパケットを受信する命令と、
上記パケットを購読者装置にどのようにルーティングするかを決定するために、ネットワークコアにおいて、該パケットのペイロード部を検査する命令と、
上記検査に基づいて、上記パケットを選択的にルーティングする命令と、
上記パケットに対応するチャンネルを判定する命令と、
上記チャンネルのチャンネル特性を読み出す命令と、
上記チャンネル特性から、上記チャンネルが持続的なチャンネルであるか否かを判定する命令と、
上記チャンネルが持続的なチャンネルである場合、上記パケットからデータを、上記ネットワークコアのコアルーティングノードで局所的にキャッシングする命令とを有し、
上記コアルーティングノードは、エッジルーティングノードの上流の購読者装置から離れる方向に位置することを特徴するルーティング/キャッシング装置。
【請求項38】
上記複数のプロセッサは、
上記検査する命令と、選択的にルーティングする命令とを実行する第1のプロセッサと、
上記局所的にキャッシングする命令を実行する第2のプロセッサとを含むことを特徴とする請求項37記載のルーティング/キャッシング装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate

【図30】
image rotate

【図31】
image rotate

【図32】
image rotate

【図33】
image rotate

【図34】
image rotate

【図35】
image rotate

【図36】
image rotate


【公開番号】特開2010−148118(P2010−148118A)
【公開日】平成22年7月1日(2010.7.1)
【国際特許分類】
【出願番号】特願2009−296288(P2009−296288)
【出願日】平成21年12月25日(2009.12.25)
【分割の表示】特願2004−520021(P2004−520021)の分割
【原出願日】平成15年7月8日(2003.7.8)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
【出願人】(504364127)プリキャッシュ インコーポレイテッド (2)
【Fターム(参考)】