(57)【要約】      （修正有）【課題】  リートポロジーネットワークからネットワークファームを作成する。【解決手段】  必要とされるデバイスタイプと、そのデバイスの個数（論理仕様）と、予想される帯域幅使用量を指定する通信モデルとを受け、これらに応じて、ツリートポロジーネットワークのスイッチング素子に対して、分割貪欲型再帰処理を実行する。分割貪欲型再帰処理は、ツリートポロジーネットワークの最上位レベルから、最下位のスイッチング素子レベルに向かって再帰処理を行い、各スイッチング素子レベルにおける最小コストの解を確認する。ファームのリソースの要件を完全に満足し、かつ、ツリートポロジーネットワークが分割貪欲型再帰処理によって巡回された後に見つけ出された最小コストの解が、デバイスの解集合とみなされる。【選択図】図３
2004208297.tif 000002
【特許請求の範囲】
【請求項１】
ツリートポロジーネットワークからネットワークファームを作成する方法であって、
前記ファームの論理仕様であって、前記ファームによって必要とされるデバイスタイプの少なくとも１つと、前記デバイスタイプのそれぞれのデバイスの個数とを指定する論理仕様を受け取る（４０２）こと、
前記ファームの通信モデルであって、前記ファームのデバイスの予想される帯域幅使用量を指定する通信モデルを受け取る（４０２）こと、
前記論理仕様および前記通信モデルに応じて、前記ファームを構築するために前記ツリートポロジーネットワークのデバイスの中でデバイスの解集合を確認することであって、前記ツリートポロジーネットワークのスイッチング素子に対して、分割貪欲型再帰処理を実行する（３０６）ことを含む、デバイスの解集合を確認すること
とを含み、
前記分割貪欲型再帰処理は、
前記ツリートポロジーネットワークの最上位レベルから開始して、前記ツリートポロジーネットワークの最下位のスイッチング素子レベルに向かって再帰処理を行って、前記ツリートポロジーネットワークの各スイッチング素子レベルにおける最小コストの解を再帰的に確認すること
を含み、
前記ファームのリソースの要件を完全に満足し、かつ、前記ツリートポロジーネットワークが前記分割貪欲型再帰処理によって巡回された後に見つけ出された最小コストの解が、前記デバイスの解集合とみなされる
ネットワークファームを作成する方法。
【請求項２】
前記分割貪欲型再帰処理を実行することの前に、前記ツリートポロジーネットワークに対してスイッチ単純化を実行する（３０２）こと
をさらに含む請求項１に記載のネットワークファームを作成する方法。
【請求項３】
初期解から初期上限コストを設定する（３０４）こと
をさらに含み、
該初期上限コストは、前記初期解のデバイスが使用されて、前記論理仕様および前記通信モデルに従って前記ファームを構築するときの前記初期解の前記デバイスごとの帯域幅使用量に関係し、
前記再帰的に確認することを行っている間に得られるあらゆる可能性のある解は、該可能性のある解に関連付けられた通信コストが前記初期上限コストを越える場合には、さらに検討することから除外される
請求項１に記載のネットワークファームを作成する方法。
【請求項４】
前記再帰的に確認することは、
前記ツリートポロジーネットワークの特定のスイッチング素子において再帰処理を行っている間に、前記特定のスイッチング素子の下にあるリソースを使用して、前記ファームによって必要とされるリソースのできるだけ多くのものを貪欲に満たす（３７６）こと
を含む請求項１に記載のネットワークファームを作成する方法。
【請求項５】
前記特定のスイッチング素子の下にある前記リソースは、
前記特定のスイッチング素子に直接的に接続される直接接続されたデバイス（５０４）と、
前記特定のスイッチング素子の子供のスイッチング素子の下にあるリソースと
を含む
請求項４に記載のネットワークファームを作成する方法。
【請求項６】
前記再帰的に確認することは、
前記特定のスイッチング素子の下に同じデバイスタイプの複数の群が存在する場合に、最小の通信コストを有する群を選択する（３７８）ことであって、それによって、前記ファームによって必要とされる前記リソースを貪欲に満たす、最小の通信コストを有する群を選択すること
をさらに含む
請求項４に記載のネットワークファームを作成する方法。
【請求項７】
前記分割貪欲型再帰処理の実行中に得られる可能性のある解は、ソートされたリストに保持され、
該ソートされたリストの前記可能性のある解のうち、他の可能性のある解に対して最小の通信コスト（３８８）を有する可能性のある解は、前記ツリートポロジーネットワークが巡回された後の前記デバイスの解集合とみなされる
請求項４に記載のネットワークファームを作成する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ツリートポロジーネットワークのデバイスの高速選択システムおよび方法に関する。
【背景技術】
【０００２】
コンピュータネットワークは、今日、広く普及している。
通常のコンピュータネットワークでは、異なるタイプのさまざまなデバイスが、例えばルータ、スイッチ、およびハブといったスイッチング素子を介して相互接続され、それによって、デバイスが、予め定められた通信モデルに従って互いに通信することを可能にする。
【０００３】
ネットワークを、それらのネットワーク上のアプリケーションによって必要とされるトポロジーに構成できるさまざまな方法が存在する。
最も簡単なネットワークは、適切なスイッチング素子および相互接続媒体（例えば、導電性ケーブル、光ファイバケーブル、無線媒体など）を使用して、さまざまなデバイスを共に結線することを伴う傾向がある。
結線アプローチは、比較的小さい静的なネットワーク構成についてはうまく機能するけれども、うまく拡張しないので、その結果、管理およびアップグレードが困難なネットワークになりがちである。
【０００４】
最近、コンピュータネットワークを構築するためのより柔軟性のあるアプローチが提案された。
デバイスを共に結線することにより、各ネットワークトポロジーを断片的に構築するのではなく、デバイスは、リソースの共通プールに所属するとみなされる。
このリソースの共通プールは、階層的なツリートポロジーに配置される。
ツリー内のデバイスは、決定論的な通信路に沿ってそれら自身の間で通信を行うので、階層的なツリートポロジーが選択される。
これにより、タスクのプロビジョニングおよびアップグレードが簡単になる。
階層的なツリートポロジー内では、デバイスは、スイッチング素子のプールを使用して相互接続される。
スイッチング素子をどのように構成するかに応じて、さまざまな論理ネットワークを、例えば仮想ローカルエリアネットワーク（ＶＬＡＮ）技術を使用して、デバイスおよびスイッチング素子（例えばスイッチ、ルータ、およびハブ）のこの共通プールから構築することができる。
１つの例示的なＶＬＡＮ技術の議論は、ＩＥＥＥ  ８０２．１Ｑ作業部会から得ることができる（非特許文献１；http://grouper.ieee.org/groups/802/1/、２００２年９月）。
【０００５】
このアプローチのもとでは、ツリーのデバイスおよびスイッチング素子（例えばスイッチ、ルータ、およびハブ）の共通プールに十分なリソースが存在すれば、任意の個数の論理ネットワークトポロジーを物理ネットワークから同時に構築することができる。
例えば、ある組織が、２つのデータベースサーバと、５つのアプリケーションサーバと、４つのウェブサーバと、インターネットアクセス用の１つのファイアウォールとを有する３段のアプリケーショントポロジーの作成、またはそのトポロジーへのアップグレードを望んでいるとする。
この仕様および通信モデルから、必要なデバイス（例えば、データベースサーバ、アプリケーションサーバ、ウェブサーバ、およびファイアウォール）は、デバイスの共通プールから選択することができ、ツリーのスイッチング素子を使用して相互接続することができる。
なお、通信モデルは、そのアプリケーションに必要とされる各デバイスの通信ポリシー（予想される帯域幅使用量を含む）を統制する。
したがって、論理ネットワークトポロジーの構築は、ツリー階層に存在する利用可能なデバイスのプールから必要なデバイスを選択して、スイッチング素子を適切に構成して、通信モデルおよび論理仕様によって指定されたようにデバイスを相互接続することの実践になる。
このようなネットワーク（所与の通信モデルに従うような種々のデバイスおよびネットワーク素子を含む）は、本明細書では、「ファーム（farm）」と呼ばれる。
【０００６】
考察を容易にするために、図１は、ネットワーク接続されたデバイスおよびスイッチング素子からなる共通プールを表す例示的なデータセンター１００を示している。
さまざまなファームは、この共通プールから構築することができる。
データセンター１００は、階層的なツリーのルートレベルにハブ１１０１（合計４０９６Ｍｂｐｓの帯域幅の８つのネットワークポートを収容する）を含む。
ハブ１１０１は、２つのルータ２０００および２００１と接続される。
これらのルータの双方は、ツリーのレベル１に配置される８ポート、４０９６Ｍｂｐｓのルータである。
ルータ２０００は、３つのスイッチ（８００２、８００１、および８００３）ならびに３つの負荷分散装置（２０００１、２０００２、および２０００３）と接続される。
これらのスイッチおよび負荷分散装置のすべては、ツリーのレベル２に配置される。
ルータ２００１は、３つのスイッチ（９００２、９００１、および９００３）ならびに２つの負荷分散装置（２０００４および２０００５）と接続される。
これらのスイッチおよび負荷分散装置のすべては、ツリーのレベル２に配置される。
【０００７】
スイッチ８００２は、１２ポート、１０２４Ｍｂｐｓのスイッチであり、２つのネットワーク接続型ストレージ（ＮＡＳ（network attached storage））デバイス２４００２および２４００３に接続される。
これらのＮＡＳのそれぞれは、２ポート、８０ＭｂｐｓのＮＡＳであり、ツリーのレベル３に配置される。
また、スイッチ８００２は、４つのＬＰ２０００Ｒアプリケーションサーバ（符号１１００１，１１００２、１１００３、および１１００４を付され、図１の例では、それぞれ１ポート、１００Ｍｂｐｓである）にも接続される。
これらのＬＰ２０００Ｒアプリケーションサーバのすべては、ツリーのレベル３に配置される。
スイッチ８００１は、９ポート、１０２４Ｍｂｐｓのスイッチであり、４つのデータベースサーバＡ５００（符号１２００１、１２００２、１２００３、および１２００４を付され、図１の例では、それぞれ１ポート、１００Ｍｂｐｓのサーバである）に加えて、２つのファイアウォール１８００２および１９００２にも接続される。
これらのファイアウォールのそれぞれは、２ポート、１００Ｍｂｐｓのファイアウォールである。
スイッチ８００３は、６ポート、１０２４Ｍｂｐｓのスイッチであり、４つのＮ４０００アプリケーションサーバ（符号３１００１、３１００２、３１００３、および３１００４を付され、それぞれ１ポート、１００Ｍｂｐｓのサーバである）に接続される。
【０００８】
スイッチ９００１は、８ポート、１０２４Ｍｂｐｓのスイッチであり、４つのＬＰ２０００Ｒ（１ポート、１００Ｍｂｐｓ）アプリケーションサーバ１１００５、１１００６、１１００７、および１１００８に加えて、１つのファイアウォール１８００３（２ポート、１００Ｍｂｐｓ）にも接続される。
これらのＬＰ２０００Ｒアプリケーションサーバおよびファイアウォールのすべては、ツリーのレベル３に配置される。
スイッチ９００２は、８ポート、１０２４Ｍｂｐｓのスイッチであり、１つのファイアウォール１８００４（２ポート、１００Ｍｂｐｓ）ならびに５つのＬＰ２０００Ｒ（１ポート、１００Ｍｂｐｓ）アプリケーションサーバ１１０１０、１１０１１、１１０１２、１１０１３、および１１０１４に接続される。
これらのファイアウォールおよびＬＰ２０００Ｒアプリケーションサーバのすべては、ツリーのレベル３に配置される。
スイッチ９００３は、１１ポート、１０２４Ｍｂｐｓのスイッチであり、２つのファイアウォール１８００５および１８００６（２ポート、１００Ｍｂｐｓ）ならびに２つのＬＰ２０００Ｒ（１ポート、１００Ｍｂｐｓ）アプリケーションサーバ１１０１４および１１０１５に接続される。
また、スイッチ９００３は、４つのデータベースサーバＡ５００（それぞれ１ポート、１００Ｍｂｐｓであり、図１の例では、符号１２００５、１２００６、１２００７、および１２００８を付されている）にも接続される。
これらのデータベースサーバのすべては、ツリーのレベル３に配置される。
【０００９】
図１のデータセンター１００中で指定される物理ネットワークから、２つのＡ５００データベースサーバと、５個のＬＰ２０００Ｒアプリケーションサーバと、インターネットアクセス用の１つのファイアウォールとを有する３段アーキテクチャを指定するファームを構築したいものと仮定する。
さらに、ＬＰ２０００Ｒアプリケーションサーバ同士は互いに通信せず、また、Ａ５００データベースサーバ同士も、それら自身の間で通信しないものとする。
このファームの論理仕様を図２Ａに示す。
データセンター１００のすべてのデバイスが、使用のために利用可能であると仮定すると、データセンター１００には、ファームを構築するのに十分過ぎるほどのリソースが存在する。
【００１０】
効率性が関係しない場合には、データセンター１００の利用可能なデバイスからデバイス（例えば、データベースサーバ、ＬＰ２０００Ｒアプリケーションサーバ、およびファイアウォール）をランダムに選択して、必要とされるファームを構築するためにその可能な通信路に沿って配置されるスイッチング素子を適切に構成することによって、ファームを構築することができる。
しかしながら、このようなランダムなアプローチは、データセンター１００の帯域幅使用量を最適化せず、データが、必要以上に多くのホップ数を巡回しなければならないことになり得る。
例えば、ファイアウォールとＬＰ２０００Ｒアプリケーションサーバとの間の通信を考察する。
ファイアウォール１８００２およびＬＰ２０００Ｒアプリケーションサーバ１１００１が選択されると、ファイアウォール１８００２とＬＰ２０００Ｒアプリケーションサーバ１１００１との間の通信は、４ホップ（スイッチ８００１、ルータ２０００、およびスイッチ８００２を介する）しか必要としない。
他方、ファイアウォール１８００２およびＬＰ２０００Ｒアプリケーションサーバ１１００５が選択されると、ファイアウォール１８００２とＬＰ２０００Ｒアプリケーションサーバ１１００５との間の通信は、全部で６ホップ（スイッチ８００１、ルータ２０００、ハブ１１０１、ルータ２００１、およびスイッチ９００１を介する）を必要とする。
さらに、トラフィックの輻輳が、スイッチにおいて問題となり得る。
例えば、ルータ２０００に接続されたすべてのデバイスが、それらのすべてのトラフィック（４６３２Ｍｂｐｓ）を、当該ルータを通じて送信すると、ルータ２０００は、４０９６Ｍｂｐｓしか利用可能でないので輻輳を引き起こし、トラフィックはルータで低下することになる。
ランダムなアプローチは、構成デバイスを選択する際に、帯域幅効率性およびネットワークの輻輳を考慮しない。
【００１１】
先着順方式（ＦＣＦＳ（first-come-first-served））として知られている別のアプローチは、ツリーを所与の方向に巡回して、すべてのリソースの要件が満たされるまで、進路に沿ったリソースの可能な限り多くを収集するように指令する。
このアプローチのもとでは、例えば、ルータ２０００、その子ノードおよびその孫ノードを巡回し、その後、ルータ２００１、その子ノードおよびその孫ノードを巡回する（もし必要なリソースがすべて得られたならば、途中で停止する）際に遭遇したリソースを使用して、上記ファームを構築することができる。
この例では、最初に遭遇するファイアウォールはファイアウォール１８００２であり、最初に遭遇する２つのデータベースサーバはＡ５００データベースサーバ１２００１および１２００２であり、最初に遭遇する５つのＬＰ２０００Ｒアプリケーションサーバは、ＬＰ２０００Ｒサーバ１１００１、１１００２、１１００３、１１００４、および１１００５である。
【００１２】
ランダムなアプローチと同様に、帯域幅の効率性に関して、ファームに必要とされる構成デバイスの選択にほとんどインテリジェンスがない。
したがって、デバイス選択に先着順パラダイムを使用して構築されるファームも、結果として、帯域幅が非効率的になり、性能が劣化する。
別の極端なものとして、徹底したアルゴリズムがあり、これは、最適な集合を選択するために、あらゆる可能なデバイスの置換を探索するものである。
残念なことに、このアルゴリズムは、許容できない時間量を要することがあり、適度なサイズの問題であっても、実行不可能となる。
【非特許文献１】http://grouper.ieee.org/groups/802/1/  ２００２年９月
【発明の開示】
【発明が解決しようとする課題】
【００１３】
上記内容を考慮すると、ツリー階層の利用可能なデバイスのプールから、ファームに必要な構成デバイスを選択し、その結果、ファームが他のアプローチを使用して達成可能なものより効率的に帯域幅を使用することになる改良された方法および装置が望まれる。
【課題を解決するための手段】
【００１４】
本発明は、一実施の形態において、ツリートポロジーネットワークからネットワークファームを作成する方法に関する。
この方法は、ファームの論理仕様であって、ファームによって必要とされるデバイスタイプの少なくとも１つと、そのデバイスタイプのそれぞれのデバイスの個数とを指定する論理仕様、を受け取ることを含む。
この方法は、ファームの通信モデルであって、ファームのデバイスの予想される帯域幅使用量を指定する通信モデル、を受け取ることをさらに含む。
その上、この方法は、論理仕様および通信モデルに応じて、ファームを構築するために、ツリートポロジーネットワークのデバイスの中でデバイスの解集合を確認することを含む。
この確認することは、ツリートポロジーネットワークのスイッチング素子に対して、分割貪欲型再帰処理を実行することを含む。
分割貪欲型再帰処理は、ツリートポロジーネットワークの最上位レベルから開始して、ツリートポロジーネットワークの最下位のスイッチング素子レベルに向かって再帰処理を行って、ツリートポロジーネットワークの各スイッチング素子レベルにおける最小コストの解を再帰的に確認することを含む。
ファームのリソースの要件を完全に満足し、かつ、ツリートポロジーネットワークが分割貪欲型再帰処理によって巡回された後に見つけ出された最小コストの解が、デバイスの解集合とみなされる。
【００１５】
別の実施の形態では、本発明は、ネットワークファームの論理仕様およびそのファームの通信モデルに応じて、ファームを構築するために、ツリートポロジーネットワークのデバイスの中でデバイスの解集合を確認するコンピュータ実施される方法に関する。
この方法は、ツリートポロジーネットワークに対してスイッチ単純化を実行することを含む。
このスイッチ単純化は、各ラックスイッチから各デバイスタイプの個数を確認することを含む。
各ラックスイッチは、ツリートポロジーネットワークの最下位のスイッチング素子レベルのスイッチを表す。
また、このコンピュータ実施される方法は、ツリートポロジーネットワークのスイッチング素子に対して分割貪欲型再帰処理を実行することをも含む。
この分割貪欲型再帰処理は、ツリートポロジーネットワークの最上位レベルから開始して、ツリートポロジーネットワークの各スイッチング素子レベルにおける最小コストの解を再帰的に確認することを含む。
【００１６】
さらに別の実施の形態では、本発明は、当該実施の形態に具現化されたコンピュータ読み取り可能コードを有するプログラム記憶媒体を備えた製品に関する。
このコンピュータ読み取り可能コードは、ネットワークファームの論理仕様およびそのファームの通信モデルに応じて、ファームを構築するために、ツリートポロジーネットワークのデバイスの中でデバイスの解集合を確認するように構成される。
上記のコンピュータ読み取り可能コードは、ツリートポロジーネットワークに対してスイッチ単純化を実行するコンピュータ読み取り可能コードを含む。
このスイッチ単純化は、各ラックスイッチから各デバイスタイプの個数を確認することを含む。
各ラックスイッチは、ツリートポロジーネットワークの最下位のスイッチング素子レベルのスイッチを表す。
ツリートポロジーネットワークのスイッチング素子に対して分割貪欲型再帰処理を実行するコンピュータ読み取り可能コードが含まれる。
この分割貪欲型再帰処理のコンピュータ読み取り可能コードは、ツリートポロジーネットワークの最上位レベルから開始して、ツリートポロジーネットワークの各スイッチング素子レベルにおける最小コストの解を再帰的に確認するコンピュータ読み取り可能コードを含む。
【００１７】
本発明のこれらの特徴および他の特徴は、本発明の詳細な説明において図面と共に、以下においてさらに詳細に説明される。
【００１８】
本発明を、添付図面の図の例によって説明するが、この例は、本発明を限定するものではない。
添付図面において、同じ参照符号は、同様の構成要素を参照する。
【発明を実施するための最良の形態】
【００１９】
ここで、本発明を、添付図面に示すような本発明のいくつかの好ましい実施の形態を参照して詳細に説明する。
以下の説明では、本発明の十分な理解を提供するために、多数の具体的な詳細を述べる。
しかしながら、これらの具体的な詳細のいくつかまたはすべてがなくても本発明を実施できることが、当業者には明らかである。
他の例では、本発明を不必要に分かりにくくすることがないように、周知のプロセスのステップおよび／または構造は、詳細に説明されていない。
【００２０】
一実施の形態では、ツリー階層にネットワーク接続された利用可能なデバイスのプールから、ファームに必要なデバイスを効率的に選択する技法が提供される。
ファームの論理仕様および通信モデルを用いて、貪欲型デバイス選択技法（ＧＤＳＴ（greedy device selection technique））が使用され、必要なデバイスが選択される。
貪欲型デバイス選択技法（ＧＤＳＴ）により、得られる解は、必要なデバイスのランダムな選択により得られる解、または、先着順方法論を使用してデバイスを選択することにより得られる解よりも十分に効率的である。
【００２１】
効率性は、解のコスト（送信バイトをホップ数倍したもの）およびスイッチの輻輳によって部分的に計測される。
さらに、貪欲型デバイス選択技法（ＧＤＳＴ）は、ツリー階層において可能なすべての単一の置換の評価を必要とせずに、満足な解を得ることができることが有利である。
一例として、６個のコンピュータ、３個のストレージデバイス、および１個のファイアウォールの１０個のデバイスのみを必要とするファームについて考える。
この例示的なファームの通信モデルは、各コンピュータが、インターネットおよび任意の利用可能なストレージデバイスのみとデータ伝送できるが、それ以外の任意のコンピュータとはデータ伝送できないことを要求する。
このファームは、１つの中央スイッチと、この中央スイッチの下にある１０個の他のスイッチとを有し、これら１０個の下位のスイッチのそれぞれが１０個のデバイスに接続されるツリー階層から構築されなければならないと仮定する。
これら１００個のデバイスのそれぞれは、下位のスイッチを介してそのすぐ隣のデバイスと通信することができ、中央スイッチまでホップを追加して上って、再び下ることによりそれ以外の任意のデバイスと通信することができる。
【００２２】
この簡単な例では、１００個のデバイスを有する前述のネットワークからファームの１０個のデバイスを選択するのに、１７兆通りほどの選択が存在し得ると見積もられる。
高速なコンピュータを用いても、すべての置換を探索して完全に最良の解を確認するには、容認できない長い時間を要し、容認できない高い計算電力を必要とすることがある。
貪欲型デバイス選択技法（ＧＤＳＴ）は、満足な解を得ることができる一方で、要する時間はずっと少ない。
最悪の場合、上述した例示的なファームウェアに必要なすべてのデバイスの選択に、３６０万ステップを必要とするが、これは、今日の技術を前提にすると、十分に容認可能な時間および計算制約の範囲内である。
【００２３】
図３は、本発明にかかるアルゴリズムを、ソフトウェアにより実現するコンピュータを示す。
以下に示すアルゴリズムは、図３に示すコンピュータにおいて動作するソフトウェアにより実現される。
本発明の一実施の形態では、貪欲型デバイス選択技法（ＧＤＳＴ）は、
１）スイッチ単純化、
２）コスト制限（cost bounding）、および
３）分割貪欲型再帰アルゴリズム（ＰＧＲＡ（partitioned greedy recursion algorithm））
の３つの主なステップを含む。
これらのステップは、図４Ａのブロック３０２、３０４、および３０６にそれぞれ示されている。
本発明の別の実施の形態では、貪欲型デバイス選択技法（ＧＤＳＴ）は、
１）スイッチ単純化、
２）ニーズベースフィルタリング、
３）コスト制限、および
４）分割貪欲型再帰アルゴリズム（ＰＧＲＡ）
の４つの主なステップを含む。
これらのステップは、図４Ｂのブロック３５２、３５４、３５６、および３５８にそれぞれ示されている。
【００２４】
スイッチ単純化には、必要とされる正確なデバイスについて解を求めることから、最下位（ラック（rack））レベルの各スイッチから選択される各デバイスタイプの個数を確認することへと、問題を簡単にすることが含まれる。
この前提により、選択問題は、可能性のある複数のデバイスについて解を求めることを必要とする問題から、より少ない個数のスイッチについて解を求めることを必要とする問題へと軽減される。
【００２５】
ニーズベースフィルタリングは、貪欲型デバイス選択技法（ＧＤＳＴ）に対するさらなる改良であり、候補となるスイッチの個数の大幅な削減に役立てることができる。
ニーズベースフィルタリングは、同一出願人による同時係属中の「Need-based Filtering for Rapid Selection of Devices in a Tree Topology Network」という発明の名称の出願に説明されている。
この出願は、本明細書と同日付で出願され、参照により本明細書に援用される。
【００２６】
コスト制限は、初期解を使用して（帯域幅利用率の観点から）初期上限コストを規定することにより、問題を制限することをいう。
初期解は、論理仕様で指定される必要なすべてのデバイスを含み、任意の方法で選択することができる。
例えば、初期解はランダムに選択することができるし、あるいは、先に述べた先着順方法論を使用して選択することができる。
この初期解は初期上限コストを規定する。
ＧＤＳＴが、ツリー階層を巡回して可能な解を求めると、その後に提案されるあらゆる解は、実行可能な候補の解とみなされるためには、少なくとも初期上限コストと同程度に効率的でなければならない。
【００２７】
一実施の形態では、提案された解が、初期上限コストよりも低いコストを有することが判明すると、その提案された解に関連付けられたコストが現在の上限コストとなり、その後に提案されたあらゆる解は、実行可能な候補の解とみなされるためには、少なくとも現在の上限コストと同程度に効率的でなければならない。
さらなる実施の形態では、ＧＤＳＴが部分解を求め、当該部分解に関連付けられたコストが現在の上限コストを越える場合には、ＧＤＳＴは、その部分解を完全に求めることなく、考慮の対象から除去することができる。
このように、ＧＤＳＴは、可能性のあるあらゆる解を完全に求める必要がないので、計算時間およびメモリの十分な節約を実現することができる。
【００２８】
分割貪欲型再帰アルゴリズム（ＰＧＲＡ）に関して、貪欲型デバイス選択技法（ＧＤＳＴ）はツリー階層の最上位から開始し、分割貪欲型再帰アルゴリズム（ＰＧＲＡ）を再帰的に適用して、ツリーの各レベルにおいて良好な適合を見つけ出す。
ツリー全体が巡回された段階で明らかになった解が、選択された解とみなされる。
【００２９】
図４Ｃは、本発明の一実施の形態による、分割貪欲型再帰アルゴリズム（ＰＧＲＡ）を示している。
なお、図４Ｃにおいて、（Ａ）には、アルゴリズムが英語表記され、（Ｂ）には、（Ａ）のアルゴリズムの日本語訳が示されている。
ツリーの最上位ノードから開始して、所与のノードについて、ファームによって必要とされるデバイスを依然として有するすべての子供を列挙する（参照符号３７２）。
解集合にまだ存在しない親の各子供について、次のステップを実行するループが形成される（参照符号３７４）。
要求（demand）が満たされるまで、各リソースの可能限り多くのものを取り出す（参照符号３７６）。
したがって、貪欲型指定である。
同じデバイスタイプの複数の群が存在すると、最小の通信コストを有するものを最初に取り出す（参照符号３７８）。
次に、この選択（置換）のコストが求められる（参照符号３８０）。
子ノードの解が再帰的に求められる（参照符号３８２）。
この置換に関連付けられた通信コストが、現在の上限コストよりも小さい場合には、その置換をソートされたリストに挿入する（参照符号３８４）。
【００３０】
子供が残っていない場合には、失敗を返す（参照符号３８６）。
次に、これまでの最良の解が得られる（参照符号３８８）。
要求が残っていない場合には、その解が返される（参照符号３９０）。
その後、ループは次の子供に続けられる（参照符号３９２）。
【００３１】
本発明の特徴および利点は、以下の図面および説明を参照することにより、より良く理解することができる。
図５〜図１０は、本発明の一実施の形態による、独創的な分割貪欲型再帰アルゴリズム（ＰＧＲＡ）の詳細なステップを示している。
図５〜図１０のオペレーションは、例を参照することにより最も良く理解することができる。
図２の論理仕様（すなわち、１つのファイアウォールが５つのＬＰ２０００Ｒアプリケーションサーバに接続され、これらのＬＰ２０００Ｒアプリケーションサーバが２つのＡ５００データベースサーバに接続される）を有するファームを図１のツリー階層から構築したいものと仮定する。
本明細書の付録Ａは、図５〜図１０に論述されるステップを参照して例を説明する。
【００３２】
図５は、一実施の形態における、独創的ＰＧＲＡの高レベルのフローチャートである。
ブロック４０２では、論理仕様および通信モデルが入力される。
論理仕様は、段数（この例では３段）、デバイスタイプ、ならびに各段のデバイスの個数およびデバイスのタイプを指定する。
通信モデルは、各デバイスまたはデバイスの各タイプから送受信されるトラフィックの量も指定することができる。
【００３３】
ステップ４０４では、初期解集合がヌルにされる。
ステップ４０６では、ツリー階層が、ファームのニーズを満たすのに十分なリソースを有するかどうかを確認する初期判断が行われる。
このステップは、全体として、ファームを作成できるようにツリー階層に十分なリソースが存在することを確実にする。
この時点で、効率性はまだ関係せず、ステップ４０６は、リソースが十分であることを単にチェックするだけである。
リソースが十分でない場合には、適切な警告が生成され（ステップ４０８）、ＰＧＲＡ方法は終了する。
【００３４】
他方、ツリー階層に十分なリソースが存在する場合には、本方法はステップ４１０に進む。
ステップ４１０では、ルートノードがラックスイッチまたはデバイスであることの簡単な検査が行われる。
ルートノードがラックスイッチまたは簡単なデバイスである場合には、あるデバイスは、そのスイッチを通過することによりファームの他のデバイスと通信できるので、最も効率的な解がすでに見つけ出されていることになる。
図１を参照して、ツリー階層全体が、仮にスイッチ９００２（ルートノードになる）およびその下のデバイスしか含んでいなかったとすると、ルートノード／スイッチを有する解がすでに最も効率的であるので、最も効率的な解について解を求める必要はない（ステップ４０６は、リソース要件を満足する十分なリソースがツリー階層に存在することをすでに示していることに留意されたい）。
もちろん、ルートノードがデバイである場合（ステップ４０６は、リソース要件を満足する十分なリソースがツリー階層に存在することをすでに示している）場合には、簡単な解が見つけ出されている。
いずれにしても、本方法は、ステップ４１２に進んでツリーのルートに解を設定し、その解および解のコストを出力する（ステップ４１４）。
【００３５】
他方、ツリーのルートがラックスイッチでもなくデバイスでもない場合には、本方法はステップ４１５に進む。
ステップ４１５では、ＳＵＢＣＯＳＴ（部分コスト）の初期値が０に設定され、変数ＮＯＤＥ（ノード）が解のツリーのルートに設定される。
ステップ４１６では、プロセスＳＯＬＶＥ（解を求める）が呼び出されて、ＰＧＲＡが見つけ出すことができる最も効率的な解を提供する。
プロセスＳＯＬＶＥは、本明細書の図６およびその後の図面においてさらに探求される。
プロセスＳＯＬＶＥによって出力された解は、ブロック４１８で検査されて、その出力された解がヌルの解であるかどうかが確認される。
【００３６】
プロセスＳＯＬＶＥによって出力された解がヌルである場合、本方法はブロック４２０に進む。
ブロック４２０では、適切なメッセージが生成され、かつ／または表示される。
上限が使用される実施では、プロセスＳＯＬＶＥは、初期解よりも効率的な解を見つけ出さないので、ＳＯＬＶＥによって出力される解はヌルの可能性がある。
この場合、ブロック４２０によって出力されるメッセージは、初期解がたまたま勝ち残った解であるという事実を反映することができる。
他方、プロセスＳＯＬＶＥによって出力された解集合が、（ブロック４１８の判断により）ヌル集合でない場合には、その解集合がブロック４１４でそのコストと共に出力される。
【００３７】
図６は、本発明の一実施の形態による、プロセスＳＯＬＶＥに関連するステップを示している。
図５のブロック４１６において、プロセスＳＯＬＶＥが呼び出されて、最初にツリー全体がプロセスＳＯＬＶＥに渡されることを思い出されたい。
ステップ５０２では、ＳＵＢＳＯＬＵＴＩＯＮ（部分解）およびＰＯＳＳＩＢＩＬＩＴＩＥＳ（可能性）がヌルに設定される。
ステップ５０４では、直接接続されたデバイスが探索される。
直接接続されたデバイスとは、本明細書で使用されるように、検討中のノードに直接的に接続されているデバイスである。
図１を参照して、検討中のノードがルータ２０００である場合、直接接続されたデバイスは、３つの負荷分散装置２０００１、２０００２、および２０００３となる。
ルータ２０００の下のそれ以外のすべてのデバイスは、３つのスイッチ８００１、８００２、および８００３の１つを介してルータ２０００に接続され、したがって直接接続されたデバイスとして分類されない。
同様に、検討中のノードがルータ２００１である場合、直接接続されたデバイスは、２つの負荷分散装置２０００４および２０００５となる。
ルータ２００１の下のそれ以外のすべてのデバイスは、３つのスイッチ９００１、９００２、および９００３の１つを介してルータ２００１に接続され、したがって、直接接続されたデバイスとして分類されない。
ブロック５０４（直接接続されたデバイスの探索）の一実施態様は、本明細書の図７を参照してより詳細に説明される。
【００３８】
図７では、ブロック６０２でノードが調べられて、ノードがさらに子供を有するかどうかが確認される。
ノードが子供を有しない場合には、直接接続されたデバイスの探索を行うプロセスは終了する（ブロック６０４）。
他方、ノードがさらに子供を有する場合には、ノードの当該子供を通るために一時変数Ｃが使用される（ブロック６０６）。
ブロック６０８では、ノードの子供が調べられて、その子供がデバイスである（例えば、ハブでもなく、スイッチでもなくまたはルータでもない）かどうかが判断される。
ノードの子供がデバイスでない場合（例えば、ノードの子供が、ハブ、スイッチまたはルータである場合）、本方法はブロック６０２に戻って、ノードの次の子供が存在する場合には、その子供を調べる。
【００３９】
他方、ノードの子供がデバイスである場合には、本方法はブロック６１０に進み、そのデバイスが、ファームによって必要とされるデバイスであるかどうかを確認する。
そのデバイスが、ファームを構築するのに必要とされるデバイスでない場合には、この場合も本方法はブロック６０２に戻って、ノードの次の子供が存在する場合には、その子供を調べる。
【００４０】
デバイスが、ファームを構築するのに必要とされるデバイスであることが判明すると、本方法はステップ６１２に進んで、（ノードの子供である）そのデバイスをＳＵＢＳＯＬＵＴＩＯＮに追加し、ファーム内のこのタイプのデバイスのニーズを１つだけディクリメントする。
その後、本方法はブロック６０２に戻って、ノードの次の子供が存在する場合にはその子供を調べる。
ノードのすべての子供が調べられると、本方法はブロック６０２からブロック６０４に進み、これにより、直接接続されたデバイスを探索するプロセスを終了する。
【００４１】
図６に戻って、ブロック５０６は、さらにデバイスが必要かどうかを確認する。
デバイスがもはや必要でない場合（例えば、ノードの子供がそのノードの直接接続されたデバイスであり、ファームのすべてのデバイスのニーズを満たしていた場合）には、本方法はブロック５２０に進み、ＳＵＢＳＯＬＵＴＩＯＮに戻る。
デバイスがさらに必要とされる場合（すなわち、ノードの子供がそのノードの直接接続されたデバイスであり、ファームのすべてのデバイスのニーズを満たしていなかった場合）には、本方法はブロック５０８に進み、プロセスＰＥＲＭＵＴＥ（置換）を使用して置換を見つけ出す。
一般的に言えば、高いレベルでは、プロセスＰＥＲＭＵＴＥはツリーの特定のノードの下にあるすべてのデバイスを探索し、現在の部分解が与えられると、最良の子供のスイッチを再帰的に見つけ出して、解に追加する。
ツリーのルートがプロセスＰＥＲＭＵＴＥに渡されると、プロセスＰＥＲＭＵＴＥによって返される解は、プロセスＰＥＲＭＵＴＥがツリー階層全体から見つけ出すことができる最良の解を表す。
ツリー階層の中間ノード（例えば、スイッチ、ハブ、またはルータ）がプロセスＰＥＲＭＵＴＥに渡されると、プロセスＰＥＲＭＵＴＥは、その特定のノードの下にあって、現在の部分解に追加することができる最良の子供のスイッチを再帰的に返す。
プロセスＰＥＲＭＵＴＥについては、本明細書の図８との関連で後にさらに詳細に説明する。
【００４２】
図６を参照して、プロセスＰＥＲＭＵＴＥによって見つけ出された置換が空である場合には（ブロック５１０）、プロセスはブロック５２２に進み、失敗を返す。
他方、ブロック５０８でプロセスＰＥＲＭＵＴＥによって見つけ出された置換が空でない場合には、本方法はブロック５１２に進み、その置換が十分なものであるかどうか、すなわち、その置換が部分解に依然として必要とされるすべてのリソースを含むものかどうかを検査する。
十分なものでない場合には、本方法はブロック５０８に戻り、置換の処理を続けて別の置換を見つけ出す。
他方、ブロック５０８でプロセスＰＥＲＭＵＴＥによって見つけ出された置換が十分なものである場合には、本方法は更新された解を返す。
【００４３】
図８は、本発明の一実施の形態による、図６のブロック５０８の置換（permute）プロセスを示している。
ブロック７０１において、置換ＡはＳＵＢＳＯＬＵＴＩＯＮに設定される。
これが最初の置換である場合には、置換Ａは、初期値の設定（図６のブロック５０２）により、ブロック７０１ではヌルであり、ハブ１１０１の下の直接接続されたデバイスは存在しない（図６のブロック５０４）。
ブロック７０４では、現在のノードがさらに子供を有するかどうかが確認される。
子供を有しない場合には、本方法はブロック７５０に進む。
ブロック７５０では、Ａは、ＰＯＳＳＩＢＩＬＩＴＩＥＳリストからの最も安価な解となるように設定される。
その後、プロセスはブロック７５２で終了する。
【００４４】
しかしながら、現在の例では、ノードがハブ１１０１に等しいので、最初の置換では答えはイエスとなる。
したがって、本方法はブロック７０６に進み、ブロック７０６において、一時変数Ｃがノードの次の子供に設定される。
ブロック７０８では、一時変数Ｃによって表されるノードの子供が試行中の解にすでに存在する場合には、その子供は無視され、本方法はブロック７０２（ブロック７０４の前の円によって表される）に戻る。
他方、子ノードが試行中の解にまだ存在しない場合には、本方法はブロック７１０のプロセスＰＩＣＫ（選択）に進む。
ブロック７１０では、一時変数Ｃによって表されるノードの子供は、その下のリソースを使用して、ファームのニーズを貪欲に、すなわちできるだけ多く満たすように試みる。
プロセスＰＩＣＫは、本明細書の図９を参照して詳細に説明される。
【００４５】
ブロック７１２では、プロセスＰＩＣＫの結果が空であるかどうかが確認される。
プロセスＰＩＣＫの結果が空である場合には、本方法はブロック７０２に戻り、ブロック７０４において、現在のノードがさらに子供を有するかどうかを確認する。
他方、プロセスＰＩＣＫによって返された結果が空でない場合には、本方法はブロック７１４に進み、ブロック７１４において、ノードの子供（この子供は現在、一時変数Ｃで表される）がルータであるかどうかが確認される。
ノードの子供がルータである場合には、本方法はブロック７１６に進み、プロセスＳＯＬＶＥを再帰的に呼び出す。
【００４６】
ＳＯＬＶＥプロセスの呼び出しの結果は、ブロック７１８で検査される。
この結果が空である場合には、本方法はブロック７０２に戻る。
他方、プロセスＳＯＬＶＥの再帰的呼び出しの結果が空でない場合には、本方法はブロック７２０に進み、ブロック７２０においてＢのコストが計算される。
ブロック７２２では、部分コストの現在の値とＢの新しいコスト（ブロック７２０からの計算されたコスト）との総和が現在の上限値よりも小さいかどうかが確認される。
この総和が、現在の上限値よりも小さくない場合には、この子供をさらに続ける必要はないので、本方法はブロック７０２に戻る。
他方、部分コストの現在の値とＢの新しいコストとの総和が、現在の上限値よりも小さい場合には、部分解が、それらコストと共に可能性（possibilities）のリストに追加される（ブロック７２４）。
【００４７】
他方、ブロック７１４において、ノードの子供（この子供は現在、変数Ｃによって表されている）がルータでないことが確認されると、本方法はブロック７３０に進む。
ブロック７３０では、Ｂは、プロセスＰＩＣＫの結果と等しくなるように設定され、その新しいコストが計算される。
【００４８】
このように、図１および図２の本実施例を通じて、ルータ２０００は、１つのファイアウォール、４つのＬＰ２０００Ｒアプリケーションサーバおよび２つのＡ５００サーバを貪欲に提供することができる。
ＬＰ２０００Ｒアプリケーションサーバの１つが、まだ不足している状態である。
ルータ２００１は、必要とされるすべてのデバイス（すなわち、１つのファイアウォール、５つのＬＰ２０００Ｒアプリケーションサーバおよび２つのＡ５００サーバ）を貪欲に提供することができる。
ブロック７２４では、これらの解のコストも計算されて、可能性リストに追加される。
ハブ１１０１にそれ以外の子供は存在しないので、Ａは、可能性リストからの最も安価な置換に設定され（ブロック７５０）、その置換がルータ２００１であると判明する。
その後、ＰＥＲＭＵＴＥプロセスは終了し、本方法は図６に戻る。
図６では、Ａによって表される解が検査されて、解が空であるかどうかが調べられる（ブロック５１０）。
図６の残りの部分はすでに説明したので、ここでは繰り返さない。
【００４９】
図９は、本発明の一実施の形態による、図８のブロック７１０のプロセスＰＩＣＫを示している。
プロセスＰＩＣＫでは、所与のデバイスタイプのクラスタの可能な限り大きなものを使用して、ファームのニーズを貪欲に満たし、そのデバイスクラスタ内外へのトラフィックを最小にすることが目的である。
同じタイプおよび同じ通信パターンを有するデバイスの群は、本明細書では「クラスタ」と呼ばれる。
例えば、図２では、ファームは、ファイアウォール、ＬＰ２００ＲおよびＡ５００をそれぞれ含む３つのクラスタから構成される。
デバイスのクラスタは通常、他のクラスタとデータ伝送するが、クラスタ内のデバイスは一般に、それら自身の間で通信しない。
したがって、その作用は、最良な解が単一のノードからすべてのリソースを引き出すか、あるいはそれが不可能な場合には、可能な限り最小数のノードからリソースを引き出すものと仮定することにより、問題を局所化することである。
このように、すべての置換を徹底的に試すことが不要になり、かつすべての置換を別のものと比較することが不要になる。
【００５０】
ブロック８０２では、ＰＩＣＫの結果が初期値としてヌルに設定される。
次に、プロセスは各リソースタイプ（例えば、Ａ５００サーバ、ＬＰ２０００Ｒサーバ、ファイアウォールなど）を通過し、ノードの下の利用可能なリソースを使用して、特定のリソースタイプに関連したすべての要件をできるだけ貪欲に満たすように試みる。
ブロック８０４では、より多くのリソースタイプが必要とされるかどうかが、ファームの要求から確認される。
より多くのリソースタイプが必要とされる場合には、本方法はブロック８０６に進み、ブロック８０６において、一時変数Ｘが次の必要なリソースタイプに設定される。
ブロック８０８では、ノードが、ファームによって必要とされる所与のリソースタイプＸを当該ノードの下のどこかに有するかどうかが確認される。
有しない場合には、本方法はブロック８０４に戻り、ブロック８０４において別のリソースタイプが検査される。
【００５１】
他方、ブロック８０８において、ノードが、必要とされるリソースタイプＸを有すると確認された場合には、本方法はブロック８１０に進み、ブロック８１０において、最大の要求を有するリソースタイプＸの満たされていないクラスタが見つけ出される。
この発見的方法は、満たされていない要求の最大部分を最初に満たすことにより、最適な適合に近づく。
【００５２】
ブロック８１２では、クラスタ要求が、利用可能な残りのものよりも大きいかどうかが確認される。
【００５３】
大きくない場合には、クラスタの要求はＰＩＣＫに追加され、利用可能なものから差し引かれる（ブロック８１４）。
その後、プロセスはブロック８１０に戻り、ブロック８１０において、最大の要求を有する、満たされていない残りのタイプＸのクラスタが見つけ出される。
【００５４】
他方、ブロック８１２において、クラスタ要求が利用可能な残りのものよりも大きくないと確認された場合には、本方法はブロック８１６に進み、ブロック８１６において、利用可能なリソースがＰＩＣＫに追加される。
その後、本方法はブロック８０４に戻る。
【００５５】
図１０は、本発明の一実施の形態による、例えば図８のブロック７２０またはブロック７３０のプロセスＣＯＳＴ（コスト）を示している。
一般的に言えば、高いレベルにおいて、プロセスＣＯＳＴは、特定のノードの下で選択されたデバイスと、そのノード以外の要求される残りのデバイスとの間の通信コスト（すなわち、外部コスト）を求めることにより、その特定のノードの通信コストを求める。
プロセスＣＯＳＴは、図８のプロセスＰＥＲＭＵＴＥと協調的に機能し、その結果、外部コストは、そのノードの下で選択されたデバイスの内部の通信コストに追加されて、特定のノードに関連付けられた総通信コストになる（図８のブロック７２０、７２２および７２４参照）。
したがって、コスト計算は局所化され、階層的であり、また特定のノードの下のデバイスについて計算されたどんなコストも、現在の置換の現在のノードについて計算されたコストに追加されるという意味で累積的でもある。
さらに、各レベルにおいて、最小のコストの解のみが上に渡される。
【００５６】
ブロック９０２では、ローカル変数Ｃｏｓｔ（コスト）が０に初期化される。
ブロック９０４では、現在のノードがスイッチングデバイス（例えば、スイッチ、ハブ、またはルータ）であるかどうかが確認される。
スイッチングデバイスでない場合には、下で選択されたデバイスからそのノードを通じた外部のデバイスへの通信は行われない（現在の置換の選択されたデバイスの集合よりも小さいファームの要求として定義される）。
その場合、プロセスは、ブロック９３０でその呼び出し側プロセスに戻る。
【００５７】
他方、現在のノードがスイッチングデバイスである場合には、現在のノードの下で選択されたデバイスの集合内のクラスタが１つずつ処理される。
したがって、ブロック９０６では、集合ＯＵＴＳＩＤＥが確認される。
デバイスが、ファームの要求ごとに必要とされるものの、現在のノードの下で選択されたデバイスによって満足されない場合には、それらデバイスは、ＯＵＴＳＩＤＥ集合に存在するとみなされる。
ブロック９０８では、未処理の任意のクラスタが存在するかどうかどうかが確認される。
存在しない場合には、プロセスは、ブロック９３０でその呼び出し側プロセスに戻る。
【００５８】
未処理のクラスタがまだ存在する場合には、本方法はブロック９１０に進み、ブロック９１０において、選択されたデバイスの現在の集合内の次の未処理のクラスタを表すために変数Ｘが使用される。
ブロック９１２では、集合ＯＵＴＳＩＤＥ内にさらにクラスタが存在するかどうかが確認される。
クラスタが存在しない場合には、本方法はブロック９０２からブロック９０８に進み、現在のノードの下で選択されたデバイスの集合内の次のクラスタを処理する。
【００５９】
集合ＯＵＴＳＩＤＥ内にクラスタがさらに存在する場合には（ブロック９１２によって確認されたものとして）、本方法はブロック９１４に進み、ブロック９１４において、変数Ｙが、ＯＵＴＳＩＤＥ集合からの次のクラスタを表すために使用される。
ブロック９１６では、ブロック９１０で確認されたクラスタＸが、ブロック９１４で確認されたクラスタＹと通信するかどうかが確認される。
これらの２つのクラスタが通信しない場合には、本方法はブロック９１２に戻り、ＯＵＴＳＩＤＥ集合からの次のクラスタを処理する。
【００６０】
他方、内部クラスタＸが、ＯＵＴＳＩＤＥクラスタＹと通信する場合には（ブロック９１６によって確認されたものとして）、本方法はブロック９１６からブロック９１８に進み、ブロック９１８において、クラスタＸとクラスタＹとの間の通信のコストが通信コストに追加される。
この時点では、プロセスは、有利なことに、現在のノードの下のクラスタに対するＯＵＴＳＩＤＥクラスタの正確な位置を必要としないことに留意されたい。
ＯＵＴＳＩＤＥクラスタが現在のノードの外部にあり、かつ内部クラスタと通信する現在のノードを巡回する必要がある限り、コストを計算することができる。
この特徴は、有利なことに、この階層的で再帰的な技法の計算コストを削減する。
ブロック９１８の後、本方法はブロック９１２に戻って、ＯＵＴＳＩＤＥ集合からの次のクラスタを処理する。
【００６１】
図４Ａ、図４Ｂ、図４Ｃ、図５、図６、図７、図８、図９および図１０のフローチャートのオペレーションは、実際の実施例を参照することによってより良く理解することができる。
本明細書の付録Ａは、例示的な図２に指定されたファームが、本明細書の図面で説明された技法を使用して、図１の階層的ツリー構造からどのようにして作成できるのかを説明する。
読者は、本明細書の図面を参考に使用して、付録Ａの実施例のステップをトレースするように案内される。
ただし、簡潔にするために、実施例のこのようなステップごとのトレースは、本出願では長々とは続けられない。
【００６２】
前記の内容から理解できるように、本発明は、ツリー階層からファームを構築するために選択されるデバイスの効率的な集合を見つけ出すのに必要な計算量および時間量を大幅に削減する。
初期上限コストによって最初に解に制限を設け、そのコストがその初期上限コストを越えるあらゆる解を却下することによって、可能なすべての置換の半分は統計的に削除される。
さらに、同じ実施の形態または異なる実施の形態のいずれかにおいて、より効率的な候補の解が見つけ出されるにつれて、上限は絶えず修正される。
さらに、同じ実施の形態または異なる実施の形態において、現在の上限コストよりも大きなコストを有する部分解は、その解の完了を要することなく廃棄される。
コスト計算が行われる場合には、そのコスト計算はノードにおいて局所的に行われ、そのノードの下のデバイスについてすでに計算された任意の内部コストが利用されると共に、そのノードの外部の残りのデバイスの正確な位置は配慮されない。
【００６３】
さらに、スイッチに対する問題の単純化（すなわち、上述したようなスイッチ単純化）は、解決すべき問題の個数を簡単にする。
また、ツリー内に深く進むことによってノードの解が再帰的に求められ、そのノードに関して提案された解を現在の最良の候補として受け入れるか、または、提案された解を拒否する再帰的なアプローチの使用により、本方法は、ツリー階層を効率的に通過することが可能になる。
【００６４】
［付録実施例］
［先着順（ＦＣＦＳ）］
図２を参照して、先着順のコストは、約１，４４０Ｍｂｐｓホップである。
このコストは、ファイアウォール（１００Ｍｂｐｓ）、各アプリケーションサーバＬＰ２０００Ｒ（それぞれ１００Ｍｂｐｓ）、および各データベースサーバＡ５００（それぞれ１００Ｍｂｐｓ）のトラフィック容量に基づいて計算される。
【００６５】
図１のツリー階層を左から右に進むと、デバイスは次のように満たされる。
下表Ａ１に、ＦＣＦＳを使用して選択されたデバイスを表形式で示す。
【００６６】
【表Ａ１】
2004208297.tif 000003
【００６７】
総トラフィック負荷は２６４０Ｍｂｐｓホップであり、次のように計算される。
【００６８】
ステップ１：ファイアウォールからＬＰ２０００Ｒサーバへ：
４ホップ（４／５）＊１００Ｍｂｐｓ＋６ホップ（１／５）＊１００Ｍｂｐｓ＝４４０Ｍｂｐｓホップ
ステップ２：Ａ５００サーバからＬＰ２０００Ｒサーバへ：
４ホップ（４／５）＊２００Ｍｂｐｓ＋６ホップ（１／５）＊２００Ｍｂｐｓ＝８８０Ｍｂｐｓホップ
【００６９】
ＬＰ２０００Ｒサーバは、サブネットあたり最大５００Ｍｂｐｓまで生み出すことができるが、リンク最大容量が制約であると考えられる。
したがって、各ＶＬＡＮについて、出力データ量は入力データ量とほぼ同じであると考えられ、総トラフィック負荷は、２＊（４４０Ｍｂｐｓホップ＋８８０Ｍｂｐｓホップ）、つまり２６４０Ｍｂｐｓホップである。
【００７０】
しかしながら、すべてのメッセージの最初のホップおよび最後のホップは回避不可能であり、すべての解に現れるので、無視することができる。
さらに、これらのホップは、ネットワークトラフィックにおいてスイッチを共有しない。
したがって、修正されたコストは次のように計算される。
【００７１】
修正ステップ１：ファイアウォールからＬＰ２０００Ｒサーバへ：
２ホップ（４／５）＊１００Ｍｂｐｓ＋４ホップ（１／５）＊１００Ｍｂｐｓ＝２４０Ｍｂｐｓホップ
修正ステップ２：Ａ５００サーバからＬＰ２０００Ｒサーバへ：
２ホップ（４／５）＊２００Ｍｂｐｓ＋４ホップ（１／５）＊２００Ｍｂｐｓ＝４８０Ｍｂｐｓホップ
【００７２】
各ＶＬＡＮについて、出力データ量は入力データ量とほぼ同じと考えられる。
したがって、修正された総トラフィック負荷は、２＊（２４０Ｍｂｐｓホップ＋４８０Ｍｂｐｓホップ）、すなわち１４４０Ｍｂｐｓホップである。
【００７３】
［分割貪欲型再帰アルゴリズム（ＰＧＲＡ）］
図２に関連付けられた論理仕様および通信モデルを使用すると、ＰＧＲＡは、図１のツリー階層を用いて表Ａ２に示すようなファームを構築する。
下表Ａ２は、ＰＧＲＡを使用して選択されたデバイスを表形式で示す。
【００７４】
【表Ａ２】
2004208297.tif 000004
【００７５】
総トラフィック負荷は８００Ｍｂｐｓホップであり、次のように計算される。
【００７６】
ステップ１：ファイアウォールからＬＰ２０００Ｒサーバへ：
それらのデバイスは、スイッチ９００２を介して通信できるので、コストはかからない。
ステップ２：Ａ５００サーバからＬＰ２０００Ｒサーバへ：
２ホップ＊２００Ｍｂｐｓ＝４００Ｍｂｐｓホップ
【００７７】
各ＶＬＡＮについて、出力データ量は入力データ量とほぼ同じと考えられるので、修正された総トラフィック負荷は、２＊（４００Ｍｂｐｓホップ）、すなわち８００Ｍｂｐｓホップである。
これは、ＦＣＦＳを介して達成されるものよりはるかに効率的である。
【００７８】
ＰＧＲＡの解に到達するために取られるステップは、以下の表Ｂ１〜Ｂ４に示す通りである。
初期上限を、ＦＣＦＳによって与えられる１４４０Ｍｂｐｓホップと仮定する。
この例では、ハブ１１０１の下に直接接続されたデバイスは存在しない。
ハブ１１０１から開始して、双方のルータの子供を調べる。
各子供は、どれだけの要求を受け付けるかを問われ、各子供はできるだけ貪欲に応答する。
【００７９】
【表Ｂ１】
2004208297.tif 000005
【００８０】
【表Ｂ２】
2004208297.tif 000006
【００８１】
【表Ｂ３】
2004208297.tif 000007
【００８２】
【表Ｂ４】
2004208297.tif 000008
【００８３】
以下に表Ｂ１の翻訳文を示す。
ルータ２０００は、リソース別に、以下のものを取り扱うことができることを伝える。
１つのファイアウォール
４つのＬＰ２０００Ｒアプリケーションサーバ（１つは残されている）
２つのＡ５００サーバ
子供について解を求める。
スイッチ８００２は、４つのＬＰ２０００Ｒアプリケーションサーバを保持することを伝える。
再帰なし
Ｃｏｓｔは、ファイアウォールへ出力される８０Ｍｂｐｓ
ファイアウォールから入力される８０Ｍｂｐｓ
Ａ５００サーバへ出力される１６０Ｍｂｐｓ
Ａ５００サーバから入力される１６０Ｍｂｐｓ＝４８０Ｍｂｐｓ
保存する。
スイッチ８００１は、１つのファイアウォールおよび２つのＡ５００サーバを保持することを伝える。
再帰なし。
Ｃｏｓｔは、ＬＰ２０００Ｒアプリケーションサーバへ出力される１００Ｍｂｐｓ（ファイアウォール）
ＬＰ２０００Ｒアプリケーションサーバから入力される１００Ｍｂｐｓ（ファイアウォール）
ＬＰ２０００Ｒアプリケーションサーバへ出力される２００Ｍｂｐｓ（Ａ５００サーバ）
ＬＰ２０００Ｒアプリケーションサーバから入力される２００Ｍｂｐｓ（Ａ５００サーバ）
＝６００Ｍｂｐｓ
保存する。
探索する。
スイッチ８００２が最も安価であるので、スイッチ８００２を最初に選択し、次に、残りのものを調べる。
スイッチ８００１は、残りのすべてのものを保持すると伝える。
選択されたすべての子供の合計は、１０８０Ｍｂｐｓである。
ルータ２０００のみのＣｏｓｔは、
ファイアウォールからＬＰ２０００Ｒアプリケーションサーバへ２０Ｍｂｐｓ
ＬＰ２０００Ｒアプリケーションサーバに戻される２０Ｍｂｐｓ
Ａ５００サーバからの４０Ｍｂｐｓ
Ａ５００サーバに戻される４０Ｍｂｐｓ＝１２０Ｍｂｐｓ
部分解の総コストは１２００Ｍｂｐｓであり、依然として１つのＬＰ２０００Ｒアプリケーションサーバを必要とする。
保存する。
【００８４】
以下に表Ｂ２の翻訳文を示す。
ルータ２００１は、すべてのものを保持することを伝える。
子供について解を求める。
スイッチ９００１は、１つのファイアウォールおよび４つのＬＰ２０００Ｒアプリケーションサーバを保持することを伝える。
再帰なし。
Ｃｏｓｔは、最後のＬＰ２０００Ｒアプリケーションサーバに入力される２０Ｍｂｐｓおよび出力される２０Ｍｂｐｓ、ならびに、Ａ５００サーバに入力される１６０Ｍｂｐｓおよび出力される１６０Ｍｂｐｓ＝３６０Ｍｂｐｓである。
保存する。
スイッチ９００２は、１つのファイアウォールおよび５つのＬＰ２０００Ｒアプリケーションサーバを保持することを伝える。
再帰なし。
Ｃｏｓｔは、Ａ５００サーバに入力される２００Ｍｂｐｓおよび出力される２００Ｍｂｐｓ＝４００Ｍｂｐｓである。
保存する。
スイッチ９００３は、１つのファイアウォールおよび２つのＡ５００サーバを保持することを伝える。
Ｃｏｓｔは、１００Ｍｂｐｓ＋１００Ｍｂｐｓ＋２００Ｍｂｐｓ＋２００Ｍｂｐｓ＝６００Ｍｂｐｓである。
保存する。
探索する。
【００８５】
以下に、表Ｂ３の翻訳文を示す。
スイッチ９００１が、これまでのところ最小のコストであるので、スイッチ９００１を最初に試みる。
すべての子供について
すでに解に存在するスイッチ９００１を飛ばす。
スイッチ９００２により拡大して、１つのＬＰ２０００Ｒアプリケーションサーバを取り出す。
コスト２０Ｍｂｐｓ＋２０Ｍｂｐｓ＋４０Ｍｂｐｓ＋４０Ｍｂｐｓ＝１２０Ｍｂｐｓを追加する。
総コスト＝３６０Ｍｂｐｓベース＋１２０Ｍｂｐｓ＝４８０Ｍｂｐｓ
可能性（スイッチ９００１、スイッチ９００２）を保存する。
スイッチ９００３により拡大して、２つのＡ５００サーバを取り出す。
追加コスト＝２００Ｍｂｐｓ＋２００Ｍｂｐｓ＝４００Ｍｂｐｓ
総コスト＝３６０Ｍｂｐｓベース＋４００Ｍｂｐｓ＝７６０Ｍｂｐｓ
可能性（スイッチ９００１、スイッチ９００２）を保存する。
探索する。
現在、スイッチ９００２が次に最小のコスト４００Ｍｂｐｓを有するので、スイッチ９００２を試みる。
すべての子供について
提供すべきものがないスイッチ９００１を飛ばす。
すでに解に存在するスイッチ９００２を飛ばす。
スイッチ９００３により拡大して、２つのＡ５００サーバを取り出す。
追加コスト＝２００Ｍｂｐｓ＋２００Ｍｂｐｓ＝４００Ｍｂｐｓ
総コスト＝４００Ｍｂｐｓベース＋４００Ｍｂｐｓ＝８００Ｍｂｐｓ
［解がここで完了することに留意されたい。］
可能性（スイッチ９００２、スイッチ９００３）を保存する。
探索する。
【００８６】
以下に、表Ｂ４の翻訳文を示す。
４８０Ｍｂｐｓのコストで可能性（スイッチ９００１、９００２）を試みる。
すべての子供について
解にすでに存在するスイッチ９００１を飛ばす。
解にすでに存在するスイッチ９００２を飛ばす。
スイッチ９００３により拡大して、２つのＡ５００サーバを取り出す。
追加コスト＝２００Ｍｂｐｓ＋２００Ｍｂｐｓ＝４００Ｍｂｐｓ
総コスト＝４８０Ｍｂｐｓベース＋４００Ｍｂｐｓ＝８８０Ｍｂｐｓ
［解がここで完了することに留意されたい。］
可能性（スイッチ９００１、スイッチ９００２、スイッチ９００３）を保存する。
探索する
８００Ｍｂｐｓのコストで可能性（スイッチ９００２、スイッチ９００３）を試みる。
ＳＯＬＵＴＩＯＮ（解）を返す。
すべてのトラフィックは内部のものであるので、ルータ２００１の追加トラフィック＝０Ｍｂｐｓを計算する。
解の総コスト＝８００Ｍｂｐｓ
ルータ２００１の解を保存する。
探索する。
ルータ２００１は最小のコストを有する。
ＳＯＬＵＴＩＯＮ（解）を返す。
【００８７】
本発明を、いくつかの好ましい実施の形態の観点から説明してきたが、本発明の範囲内に入る変更形態、置換形態および均等物が存在する。
また、本発明の方法および装置を実施する多くの代替的な方法が存在することにも留意すべきである。
したがって、添付の特許請求の範囲は、本発明の真の精神および範囲内に入るようなすべての変更形態、置換形態および均等物を含むものとして解釈されることが意図される。
【産業上の利用可能性】
【００８８】
本発明は、ツリートポロジーネットワークのデバイスの高速選択のために利用することができる。
【図面の簡単な説明】
【００８９】
【図１】ネットワーク接続されたデバイスおよびスイッチング素子からなり、それによりさまざまなファームを構築できる共通プールを表す例示的なデータセンターを示す。
【図２】例示的なファームの論理仕様を示す。
【図３】本発明にかかるアルゴリズムを、ソフトウェアにより実現するコンピュータを示す。
【図４Ａ】本発明の一実施の形態による貪欲型デバイス選択技法（ＧＤＳＴ）の主なステップを示す。
【図４Ｂ】本発明の別の実施の形態による貪欲型デバイス選択技法（ＧＤＳＴ）の主なステップを示す。
【図４Ｃ】本発明の一実施の形態による、分割貪欲型再帰アルゴリズム（ＰＧＲＡ）の主なステップを示す。
【図５】独創的な分割貪欲型再帰アルゴリズムの一実施の形態の高レベルのフローチャートを示す。
【図６】本発明の一実施の形態による、図５および図８のプロセスＳＯＬＶＥに関連付けられた主なステップを示す。
【図７】本発明の一実施の形態による、直接接続されたデバイスを探索する主なステップを示す。
【図８Ａ】本発明の一実施の形態による、図６のＰＥＲＭＵＴＥプロセスの主なステップを示す。
【図８Ｂ】本発明の一実施の形態による、図６のＰＥＲＭＵＴＥプロセスの主なステップを示す。
【図９】本発明の一実施の形態による、図８のプロセスＰＩＣＫの主なステップを示す。
【図１０】本発明の一実施の形態による、図８のプロセスＣＯＳＴの主なステップを示す。
【符号の説明】
【００９０】
１００・・・データセンター
【図１】
2004208297.tif 000009
【図２】
2004208297.tif 000010
【図３】
2004208297.tif 000011
【図４Ａ】
2004208297.tif 000012
【図４Ｂ】
2004208297.tif 000013
【図４Ｃ】
2004208297.tif 000014
【図５】
2004208297.tif 000015
【図６】
2004208297.tif 000016
【図７】
2004208297.tif 000017
【図８Ａ】
2004208297.tif 000018
【図８Ｂ】
2004208297.tif 000019
【図９】
2004208297.tif 000020
【図１０】
2004208297.tif 000021