(57)【特許請求の範囲】
【請求項１】
プロバイダネットワークのクライアントから、少なくとも前記クライアントの前記プロバイダネットワークへの接続を管理または操作するために、前記プロバイダネットワークの特定された１つまたは複数のルータからのルータ情報に対する要求を受信することであって、前記要求が、プログラマティックインターフェースに従ってフォーマットされ、前記特定された１つまたは複数のルータが、前記プロバイダネットワークの一部として実行される複数のルータの１つまたは複数であり、前記複数のルータの少なくとも１つは、前記複数のルータの少なくとも他の１つとは別々にアクセスされるように構成される、前記要求を受信することと、
前記ルータ情報を取得するために、前記ルータ情報に対する前記要求の１つまたは複数のバージョンを、前記特定された１つまたは複数のルータに送信することであって、前記要求の前記１つまたは複数のバージョンが、前記特定された１つまたは複数のルータのためのそれぞれの１つまたは複数のインターフェースに従ってフォーマットされる、前記要求の１つまたは複数のバージョンを送信することと、
前記プログラマティックインターフェースに従って、前記特定された１つまたは複数のルータから提供された前記ルータ情報を前記クライアントに提供することとを、
１つまたは複数のコンピューティングデバイスにより実施することを含む、方法。
【請求項２】
請求項１に記載の方法であって、さらに、
前記要求を、前記特定された１つまたは複数のルータのためのルータ情報に対する複数の他のペンディング要求と共に維持することと、
前記複数のルータに対する要求をサービスするためのプライオリティスキームに少なくとも部分的に基づいて、サービスされる前記要求を選択することと、を含み、
前記要求の前記１つまたは複数のバージョンの前記送信が、前記要求を選択することに応答して実施される、方法。
【請求項３】
請求項２に記載の方法であって、複数の異なるクライアントが、前記複数のルータの異なる１つからルータデータに対する複数の要求を送信し、前記受信すること、前記維持すること、前記選択すること、及び、前記送信することが、前記複数の要求の複数の変換されたバージョンが、前記複数のルータの前記異なる１つに送信されるように、前記複数の要求のそれぞれに対して実施され、前記方法がさらに、
前記複数のルータの前記異なる１つに送信される前記複数の要求の前記複数の変換されたバージョンを監視することと、
前記監視することに少なくとも部分的に基づいて、スロットリング要求閾値が超過されると判定することと、
前記スロットリング要求閾値が超過されると判定することに応答して、前記複数のルータの少なくとも１つに送信される、その後に受信された要求の変換されたバージョンをスロットリングすることと、を含む、方法。
【請求項４】
請求項３に記載の方法であって、前記スロットリング要求閾値が、前記複数のクライアントの特定のクライアントに固有の閾値であり、前記その後に受信された要求の変換されたバージョンを前記スロットリングすることが、前記特定のクライアントに固有の前記閾値が超過されないように、前記特定のクライアントから受信された要求をスロットリングすることを含む、方法。
【請求項５】
請求項３または４に記載の方法であって、前記スロットリング要求閾値が、前記プロバイダネットワークに固有の閾値であり、前記その後に受信された要求の変換されたバージョンを前記スロットリングすることが、前記プロバイダネットワークに固有の前記閾値が超過されないように、前記複数のルータのそれぞれで要求をスロットリングすることを含む、方法。
【請求項６】
請求項２−５のいずれか一項に記載の方法であって、サービスされる前記要求を前記選択することが、
前記プライオリティスキームに従って、前記要求、及び、前記特定された１つまたは複数のルータのためのルータ情報に対する前記複数の他のペンディング要求のそれぞれのための、それぞれのプライオリティ値を判定することと、
前記要求、及び、前記特定された１つまたは複数のルータのためのルータ情報に対する前記複数の他のペンディング要求のそれぞれのための、それぞれのペンディング時間を判定することと、
前記要求、及び、最高のそれぞれのプライオリティ値を有する前記複数の他のペンディング要求のそれぞれの中から、１つまたは複数のペンディング要求を、候補要求として識別することと、
１つまたは複数の前記候補要求の中から、最長のそれぞれのペンディング時間を有する候補要求であって前記要求である候補要求を選択することと、を含む、方法。
【請求項７】
請求項１−６のいずれか一項に記載の方法であって、前記クライアントが、前記プロバイダネットワークに対して内部のクライアントであり、前記要求が、他のペンディング要求の１つまたは複数が選択される前に選択され、前記１つまたは複数の他のペンディング要求が、前記プロバイダネットワークに対して外部のクライアントから受信される、方法。
【請求項８】
請求項１−７のいずれか一項に記載の方法であって、前記ルータ情報を前記クライアントに前記提供することが、
前記複数のルータに対する要求をサービスするためのプライオリティスキームに従って、前記ルータ情報を含むクエリ結果を選択することであって、前記クエリ結果が、それぞれのルータ情報を含む複数の他のクエリ結果と共に維持されるように選択することと、
前記選択されたクエリ結果を取得することと、
前記ルータ情報を前記クライアントへ送信することと、を含む、方法。
【請求項９】
プログラム命令を記憶する１つまたは複数の非一時的なコンピュータ可読の記憶媒体に結合される、１つまたは複数のプロセッサを含むシステムであって、前記プログラム命令は、複数のコンピューティングデバイスにより実行される場合、前記複数のコンピューティングデバイスに、
プロバイダネットワークのクライアントから、少なくとも前記クライアントの前記プロバイダネットワークへの接続を管理または操作するために、前記プロバイダネットワークの特定された１つまたは複数のルータからのルータ情報に対する要求を受信させ、前記要求がプログラマティックインターフェースに従ってフォーマットされ、前記特定された１つまたは複数のルータが、前記プロバイダネットワークの一部として実行される複数のルータの１つまたは複数であり、前記複数のルータの少なくとも１つは、前記複数のルータの少なくとも他の１つとは別々にアクセスされるように構成され、
前記ルータ情報に対する前記要求を、前記特定された１つまたは複数のルータのためのそれぞれの１つまたは複数のインターフェースに従ってフォーマットされた前記ルータ情報に対する前記要求の１つまたは複数のバージョンに変換させ、
前記ルータ情報を取得するために、前記要求の前記１つまたは複数のバージョンを、前記特定された１つまたは複数のルータに送信させ、
前記プログラマティックインターフェースに従って、前記特定された１つまたは複数のルータから提供された前記ルータ情報を前記クライアントに提供させる、システム。
【請求項１０】
請求項９に記載のシステムであって、前記プログラム命令がさらに、１つまたは複数の前記コンピューティングデバイスに、
前記要求を、前記特定された１つまたは複数のルータのためのルータ情報に対する複数の他のペンディング要求と共に維持させ、
前記複数のルータに対する要求をサービスするためのプライオリティスキームに少なくとも部分的に基づいて、サービスされる前記要求を選択させ、
前記要求を前記変換すること、及び、前記要求の前記１つまたは複数のバージョンを前記送信することが、サービスされる前記要求を選択することに応答して実施される、システム。
【請求項１１】
請求項１０に記載のシステムであって、前記複数のルータの異なる１つからのルータデータに対する要求が、複数の異なるクライアントから受信され、前記受信すること、前記維持すること、前記選択すること、前記変換すること、及び、前記送信することが、前記複数の要求の複数の変換されたバージョンが前記複数のルータの前記異なる１つに送信されるように、前記複数の要求のそれぞれに対して実施され、前記プログラム命令が、前記１つまたは複数のコンピューティングデバイスに、
前記複数のルータの前記異なる１つに送信される前記複数の要求の前記複数の変換されたバージョンを監視させ、
前記監視することに少なくとも部分的に基づいて、スロットリング要求閾値が超過されると判定させ、
前記スロットリング要求閾値が超過されると判定することに応答して、前記複数のルータの少なくとも１つに送信される、その後に受信された要求の変換されたバージョンをスロットリングさせる、システム。
【請求項１２】
請求項１１に記載のシステムであって、前記スロットリング要求閾値が、前記複数のルータの特定のルータに固有の閾値であり、前記その後に受信された要求の変換されたバージョンを前記スロットリングすることが、前記特定のルータに固有の前記閾値が超過されないように、前記特定のルータのために受信される要求をスロットリングすることを含む、システム。
【請求項１３】
請求項１０−１２のいずれか一項に記載のシステムであって、サービスされる前記要求を前記選択することにおいて、前記プログラム命令が、前記１つまたは複数のコンピューティングデバイスに、
前記プライオリティスキームに従って、前記要求、及び、前記特定された１つまたは複数のルータのためのルータ情報に対する前記複数の他のペンディング要求のそれぞれのための、それぞれのプライオリティ値を判定させ、
前記要求、及び、前記特定された１つまたは複数のルータのためのルータ情報に対する前記複数の他のペンディング要求のそれぞれのための、それぞれのペンディング時間を判定させ、
前記要求、及び、最高のそれぞれのプライオリティ値を有する前記複数の他のペンディング要求のそれぞれの中から、１つまたは複数のペンディング要求を候補要求として識別させ、
１つまたは複数の前記候補要求の中から、最長のそれぞれのペンディング時間を有する候補要求であって前記要求である候補要求を選択させる、システム。
【請求項１４】
請求項９−１３のいずれか一項に記載のシステムであって、前記プログラム命令が、前記１つまたは複数のコンピューティングデバイスに、
前記クライアントから、前記特定された１つまたは複数のルータからの他のルータ情報に対する別の要求を受信させ、前記他の要求が、前記プログラマティックインターフェースに従ってフォーマットされるものであり、
前記他の要求が不適正なものであると判定することに応答して、前記プログラマティックインターフェースに従ってフォーマットされた前記クライアントにエラー応答を送信させる、
システム。
【請求項１５】
請求項９−１４のいずれか一項に記載のシステムであって、前記複数のルータが、前記プロバイダネットワークのためのエッジルータとして実行される、システム。
【発明の詳細な説明】
【背景技術】
【０００１】
コモディティハードウェア用の仮想化技術の到来は、多様なニーズを有する多くのカスタマーのための大規模なコンピューティングリソースの管理に関して利益をもたらし、様々なコンピューティングリソースが多数のカスタマーにより効率的且つ安全に共有されることを可能にしてきた。例えば、仮想化技術は、単一の物理的なコンピューティングマシンが、当該単一の物理的なコンピューティングマシンによりホストされる１つまたは複数の仮想マシンを各ユーザに提供することにより、多数のユーザ間で共有されることを可能にし得る。各仮想マシンは、ユーザに、自身が所与のハードウェアコンピューティングリソースの唯一のオペレータ及びアドミニストレータであるという幻想を提供し、さらに、様々な仮想マシン間のアプリケーション分離及び安全性を提供する、別個の論理的なコンピューティングシステムとして作動するソフトウェアシミュレーションである。別の実施例として、仮想化技術は、多数のデータ記憶デバイスを介して分散され得る仮想化されたデータストアを各ユーザに提供することにより、データ記憶ハードウェアが多数のユーザ間で共有されることを可能にし得る。このような各仮想化されたデータストアは、ユーザに、自身がデータ記憶リソースの唯一のオペレータ及びアドミニストレータであるという幻想を提供する、別個の論理的なデータストアとして作動するものである。
【０００２】
仮想化技術は、様々なサービスまたはリソースを、ネットワーク接続を介してカスタマーに提供するプロバイダネットワークを生じさせた。データ、トランザクション、及びプロバイダネットワークとの他の対話の量が増えるにつれて、プロバイダネットワークのカスタマーにとっての様々な接続要件もまた増加する。一部のカスタマーは、（例えば、インターネットを介する）公衆に利用可能な接続を利用するよりもむしろ、プロバイダネットワークへの私的または直接的な接続の利用を望む場合がある。このように、これらのカスタマーとプロバイダネットワークとの間の接続は、パフォーマンスのため、及び、プロバイダネットワークリソースの利用の増加のために、最適化されることがある。しかし、プロバイダネットワークは、ネットワーキングインフラストラクチャを適合させるので、カスタマーは、自身の私的な接続を修正または変更しなければならない場合がある。プロバイダネットワークを最新にしておく一部として、カスタマーは、自身の私的な接続を利用し続けるために、基礎を成すプロバイダネットワークインフラストラクチャについての情報を取得する必要がある場合がある。
【図面の簡単な説明】
【０００３】
【図１】いくつかの実施形態に従った、特定のルータについてのルータ情報を取得するために、プロバイダネットワークと、プラットフォーム独立であるプログラマティックインターフェースとへの接続を提供するように、いくつかのルータを実行するプロバイダネットワークの図である。
【図２】いくつかの実施形態に従った、ルータプログラマティックインターフェースを実行する、ルータデータサービスのブロック図である。
【図３】いくつかの実施形態に従った、特定のルータに対する要求にサービスする要求ワーカーのブロック図である。
【図４】様々な実施形態に従った、クライアントデバイスとルータデータサービスとの間の対話を示す図である。
【図５】様々な実施形態に従った、クライアントデバイスとルータデータサービスとの間の対話を示す図である。
【図６】いくつかの実施形態に従った、プログラマティックルータインターフェースを実行するための様々な方法及び技法を示す高レベルのフローチャートである。
【図７】様々な実施形態に従った、プライオリティスキームに従ってサービスされるルータ情報に対する要求を選択するための様々な方法及び技法を示す高レベルのフローチャートである。
【図８】いくつかの実施形態に従った、プロバイダネットワークにおけるルータに対し、ルータ情報に対する要求をスロットリングするための様々な方法及び技法を示す高レベルのフローチャートである。
【図９】いくつかの実施形態に従った、クライアントに提供するために、リトリーブされたルータ情報を選択するための様々な方法及び技法を示す高レベルのフローチャートである。
【図１０】いくつかの実施形態に従った、例示的なコンピューティングシステムを示すブロック図である。
【０００４】
実施形態が、いくつかの実施形態及び説明的な図面のための実施例として本明細書において説明されるが、こうした実施形態が、説明される実施形態または図面に限定されないことを当業者は認識するであろう。図面及びそれに対する詳細な説明は、開示される特定の形態に実施形態を限定することを意図するものではなく、むしろ、その意図は、添付の特許請求の範囲により規定される趣旨及び範囲内にある、全ての修正形態、等価物及び代案を対象とすることであると理解すべきである。本明細書において使用される見出しは、組織的な目的のためのものに過ぎず、明細書の範囲または特許請求の範囲を限定するのに使用されることを意味するものでない。本出願全体を通して使用されるように、「ｍａｙ」という単語は、強制的な意味（すなわち、ｍｕｓｔを意味するもの）ではなく、許容的な意味（すなわち、可能性を有することを意味するもの）において使用される。同様に、「ｉｎｃｌｕｄｅ」、「ｉｎｃｌｕｄｉｎｇ」及び「ｉｎｃｌｕｄｅｓ」という単語は、含むが、これに限定されない、ということを意味する。
【発明を実施するための形態】
【０００５】
いくつかの実施形態に従って、本明細書において説明されるシステム及び方法は、プログラマティックインターフェースに従ってルータ情報を提供することを実行してよい。プロバイダネットワークは、クライアント、オペレータ、または他のカスタマーに、１つまたは複数のコンピューティングリソースへのアクセス及び／またはその制御を供給してよい。これらのリソースは、ネットワークを介して通信のために構成される、様々なタイプのコンピューティングシステムまたはデバイスを含んでよい。例えば、いくつかの実施形態において、プロバイダネットワークは、クライアント、ユーザ、または他のタイプのカスタマーに、リザーブドコンピュートインスタンスの形（例えば、ユーザに、自身が所与のハードウェアコンピューティングリソースの唯一のオペレータ及びアドミニストレータであるという幻想を提供する、別個の論理的なコンピューティングシステムとして作動する仮想マシン）で、仮想のコンピューティングリソースを提供してよい。プロバイダネットワーククライアントは、様々な機能、サービス、技法、及び／またはアプリケーションを実施するように、１つまたは複数のコンピュートリソース（コンピュートインスタンスなど）をリザーブしてもよく（すなわち、購入または買ってよく）、または、他のリソースを利用してもよい。
【０００６】
しかし、プロバイダネットワークは、プロバイダネットワークにより提供される様々なサービスへのアクセスを提供するために、多くの異なる構成要素、システム、またはデバイスを実行する場合がある。様々な実施形態において、大量の異種のルータが、プロバイダネットワークへのアクセスを提供するために実行され得る。しかし、アクセスを提供する一部として、一部のクライアントは、特定のルータに基づいてプロバイダ情報への接続を構成しなければならない場合がある。それゆえ、特定のルータについての情報が、プロバイダネットワークへの接続を適切且つ効率的に管理または操作するために、有用及び／または必要である場合がある。例えば、或る接続が接続問題を経験している場合、接続が確立されている特定のルータについての一定のルータ情報が、トラブルシューティングをするために、及び、修正動作を識別するために有用であり得る。しかし、異なるルータが、ルータ情報を取得するための異なるタイプのインターフェースを実行するので、必要とされる接続を構成、管理または操作するのに必要とされる情報を取得することは、プロバイダネットワークのクライアントにとって困難な場合がある。プログラマティックインターフェースは、クライアントが、プロバイダネットワークにおける特定のルータのインターフェースがどのように実行されるかを理解する必要なく、ルータデータサービスからルータ情報を取得することを可能とし得る。
【０００７】
図１は、いくつかの実施形態に従った、特定のルータについてのルータ情報を取得するために、プロバイダネットワークと、プラットフォーム独立であるプログラマティックインターフェースとへの接続を提供するように、いくつかのルータを実行するプロバイダネットワークの図である。プロバイダネットワーク１００は、インターネット及び／または他のネットワークを介してクライアント１３０にアクセス可能な、１つまたは複数のネットワークベースのサービス（様々なタイプのクラウドベースのコンピューティングまたはストレージなど）を提供するように、企業または公共部門組織などのエンティティによってセットアップされてよい。プロバイダネットワーク１００は、プロバイダネットワーク１００により提供されるインフラストラクチャ及びサービスを実行及び分散するのに必要とされる、一連の物理的及び／または仮想化されたコンピュータサーバ、記憶デバイス、ネットワーキング機器等などの様々なリソースプールをホストする非常に多くのデータセンターを含んでよい。クライアント１３０は、それぞれのルータ１０２を介してプロバイダネットワークにアクセスするように構成されてよい。いくつかの実施形態において、ルータ１０２は、プロバイダネットワーク１００のためのエッジルータであってもよい。
【０００８】
プロバイダネットワーク１００は、プロバイダネットワーク１００の異なる構成要素間のネットワーキングリンク及び外部ネットワーク（例えばインターネット）を確立するのに必要な、ハードウェア（例えば、モデム、ルータ、スイッチ、ロードバランサ、プロキシサーバ等）及びソフトウェア（例えば、プロトコルスタック、会計ソフトウェア、ファイアウォール／セキュリティソフトウェア等）を含んでよい。いくつかの実施形態において、プロバイダネットワーク１００は、オーバーレイネットワークを提供するように、インターネップロトコル（ＩＰ）トンネリング技術を用いてよい。このオーバーレイネットワークを介して、カプセル化されたパケットが、トンネルを使用してプロバイダネットワーク１００を通過し得る。しかし、いくつかの実施形態において、クライアント１３０は、私的または物理的な接続を介して、基礎を成すネットワークにアクセスしてもよい。図１において、クライアント１３０ａ、１３０ｂ、１３０ｃ、及び１３０ｄは、確立された私的な接続（幅広の矢印により示される）を介してプロバイダネットワークにアクセスしてよい。ルータ１０２は、これらの私的または物理的な接続を促進してよい。例えば、クライアント１３０ａは、ルータ１０２ａを介して接続する。クライアント１３０ｂ及び１３０ｃは、ルータ１０２ｃを介してプロバイダネットワーク１００に接続されるルータ１０２ｂを介して接続する。クライアント１３０ｄは、それぞれ２つの異なるルータ１０２ｄ及び１０２ｅを介して接続してよい。先の記述が、クライアントとルータとの間で成され得る接続の様々な組み合わせを限定することを意図するものでないことに留意されたい。
【０００９】
クライアント１３０は、プロバイダネットワーク１００への接続を管理、操作または構成するように構成可能な任意のタイプのクライアントを包含してよい。例えば、所与のクライアントは、それぞれの接続を構成し、当該接続をテストし、及び、当該接続を開始または終了することを可能とし得る、様々なツール、スクリプト、または他のモジュールを実行してよい。接続を管理する一部として、クライアント１３０はまた、特定のルータについてのルータ情報を取得してもよい。このように、クライアント１３０ｂは、プラットフォーム独立であるプログラマティックインターフェース１１２に従ってフォーマットされ得るルータデータサービス１１０に、ルータ情報に対する要求を送信することにより、ルータ１０２ｃについての情報を取得してよい。ルータデータサービス１１０は、ルータのための特定のインターフェースに従ってルータ１０２ｃを照会してよく、要求された情報をクライアント１３０ｂに提供してよい。
【００１０】
ルータデータサービスに要求をサブミットするために、所与のクライアント１３０は、適切なバージョンのウェブブラウザを含んでよく、あるいは、プラグインモジュール、または、ウェブブラウザにより提供される実行環境への、もしくはその内部での拡張として実行されるように構成される他のタイプのコードモジュールを含んでよい。あるいは、クライアント１３０は、特定のルータについての様々なルータ情報を取得するようにルータデータサービス１１０を使用し得る、ルータマネジメントまたは情報クライアント（もしくはそのユーザインターフェース）などのアプリケーションを包含してよい。いくつかの実施形態において、例えばアプリケーションは、全てのタイプのネットワークベースのデータのための全体のブラウザサポートを必ずしも実行することなく、ネットワークベースのサービス要求を発生及び処理するために、（例えば、適切なバージョンのＨｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ（ＨＴＴＰ）用の）十分なプロトコルサポートを含んでよい。いくつかの実施形態において、クライアント１３０は、Ｒｅｐｒｅｓｅｎｔａｔｉｏｎａｌ  Ｓｔａｔｅ  Ｔｒａｎｓｆｅｒ（ＲＥＳＴ）式のネットワークベースのサービスアーキテクチャ、ドキュメントもしくはメッセージベースの、ネットワークベースのサービスアーキテクチャ、または別の適切なネットワークベースのサービスアーキテクチャに従って、ネットワークベースのサービス要求を発生させるように構成されてよい。
【００１１】
図示されないが、いくつかの実施形態において、クライアント１３０は、プロバイダネットワークへの公衆接続であってよい外部ネットワークを介して、ネットワークベースのサービス要求をルータデータサービス１１０へ伝達してよい。様々な実施形態において、外部ネットワークは、クライアント１３０とルータデータサービス１１０との間のネットワークベースの通信を確立するのに必要な、ネットワーキングハードウェアとプロトコルとの任意の適切な組合せを包含してよい。例えば、ネットワークは、インターネットを集合的に実行する、様々な電気通信ネットワーク及びサービスプロバイダを全般に包含してよい。ネットワークはさらに、ローカルエリアネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）などの私的なネットワークと、公衆または私的な無線ネットワークとを含んでよい。いくつかの実施形態において、クライアント１３０は、公衆インターネットではなく私的なネットワークを使用してルータデータサービス１１０と通信してよいことが留意される。
【００１２】
プロバイダネットワークの一部のクライアントは、内部クライアント１４０であってよい。内部クライアント１４０は、それらが、プロバイダネットワーク１００内に供給されてよく、また、プロバイダネットワーク１００により提供されるサービスまたはリソースの１つまたは複数を実行してよいということを除いて、外部クライアント１３０と同様に動作してよい。例えば、内部クライアント１４０ａは、内部ネットワーク構成またはマッピングサービスの一部として実行されてよく、それゆえ、マッピングサービスが管理する接続の一部を実行し得るルータ１０２のための情報を取得することを必要としてよい。それゆえ、内部クライアントは、プログラマティックインターフェース１１２を介してルータ情報を取得するように、ルータデータサービス１１０とも通信してよい。
【００１３】
先の説明は、限定的であることを意図するものでなく、プロバイダネットワーク、クライアント、及びルータの実施例として提供されたに過ぎないことに留意されたい。クライアントまたはルータの数または構成などの、構成要素の数または構成は、多くの様々なやり方で実行されてよい。様々な他の構成要素は、プラットフォーム独立のルータのプログラマティックインターフェースに従って、ルータ情報と対話してよく、またはルータ情報を提供してよい。
【００１４】
本明細書は、次に、プロバイダネットワークの一部として実行されるルータのためのルータ情報を提供するためにプログラマティックインターフェースを実行し得るルータデータサービスの一般的な概要を含む。その後、ルータデータサービスを実行する一部として用いられ得る様々な構成要素／モジュール、または、構成要素／モジュールの構成を含め、ルータデータサービスの様々な実施例が述べられる。プラットフォーム独立のプログラマティックインターフェースに従ってルータ情報の提供を実行するためのいくつかの異なる方法及び技法が次いで述べられ、そのうちのいくつかが、添付のフローチャートに示される。最後に、様々な構成要素、モジュール、システム、デバイス、及び／またはノードを実行し得る例示的なコンピューティングシステムの説明が提供される。様々な実施例が本明細書全体を通して提供される。
【００１５】
図２は、いくつかの実施形態に従った、プログラマティックインターフェースを実行するルータデータサービスのブロック図である。ルータデータサービス２００は、種々のサーバ、ノード、または他のコンピューティングシステムもしくはデバイス（図１０に関して下記で説明されるコンピューティングシステム１０００など）間で実行されてよい。所与の構成要素の１つまたは複数の例が存在し得る場合、本明細書におけるそうした構成要素に対する言及は、単数形または複数形のいずれかで成される場合があることが留意される。しかし、いずれの形の使用も、もう一方を排除することを意図するものでない。
【００１６】
図１に関して上述したように、プロバイダネットワークに対して外部のクライアント２０２及び内部のクライアント２０４は、プロバイダネットワークと通信し、及び、プロバイダネットワークにおいて作動するように、ルータ２４０を使用してよい。ルータ２４０の設定及び他の情報は、影響を与えてよく、またはクライアントにより構成可能であってよく、それゆえ、外部クライアント（複数可）２０２及び内部クライアント（複数可）２０４は、特定のルータのための特定のルータ情報を取得するようにルータデータサービス２００と通信してよい。様々な実施形態において、ルータデータサービスは、フロントエンド２１０を実行してよい。フロントエンド２１０は、ルータデータサービス２００に送信される要求を、受信、パース、対処、誘導、または、処理するように構成されてよい。いくつかの実施形態において、フロントエンド２１０は、プラットフォーム独立のプログラマティックインターフェースに従ってフォーマットされた要求をパースまたは理解し、また、これらの要求を、当該要求に対処するようにルータデータサービス２００の適切な構成要素に誘導するように構成されてよい。例えば、フロントエンド２１０は、ルータ２４０ｂに対する要求を受信してよい。フロントエンド２１０は、いくつかの実施形態において、ルータ２４０ｂに対する要求を維持するルータキュー２２０ｂに要求を送信するように構成されてよい。いくつかの実施形態において、単一の要求は、ルータ２４０ａ、２４０ｂ及び２４０ｃなどの多数のルータから情報を集めるためのものであってもよい。フロントエンド２１０はまた、（例えば、アクセス信用証明またはアクセスリストに基づいて）特定の要求を実施するように、クライアントの識別または認証に対処するなどの様々な他のサービス機能を実行してもよい。いくつかの実施形態において、フロントエンド２１０は、ルータデータサービス２１０の様々な使用または他のパフォーマンスメトリクスを収集してよく、それらを、ストレージに、または別のシステム構成要素もしくはデバイスに、分析のために提供してよい。
【００１７】
様々な実施形態において、ルータデータサービス２００は、それぞれルータ２４０ａ、２４０ｂ、２４０ｃ及び２０４ｄに対応する、ルータキュー２２０ａ、２２０ｂ、２２０ｃ及び２２０ｄなどの、ルータ固有のキューを実行してよい。ルータキュー２２０は、ルータデータに対するペンディング要求を維持するように、１つまたは複数のコンピューティングノード、システムまたはデバイス上で実行されてよい。少なくともいくつかの実施形態において、ルータキュー２２０は、図３に関して下記で述べられるプライオリティキュー３１０などのプライオリティキューであってよい。少なくともいくつかの実施形態において、それぞれのワーカー２３０は、ルータキュー２２０から要求を、ルータ２４０に対して変換及び送信されるために引き出すことに対処してよい。いくつかの実施形態において、下記で図３において説明するように、ワーカー２３０は、どの要求を引き出すかを選択し、受信要求をスロットルし、要求を、ルータ情報に対する要求の新たなバージョンに変換し、要求をルータ２４０に送信するように構成されてよい。しかし、いくつかの実施形態において、ワーカー２３０は、要求の選択及び／または要求のスロットルなどの、これらの機能のうちのいくつかのみを実施してもよく、他の構成要素が要求を変換及び送信してもよい。ワーカー２３０は、ワーカープール（複数可）２４２からの、特定のルータ２４０のための作業を実施するために供給されてよい。ワーカープール（複数可）２４２は、ルータ２４０のいずれかに対する要求にサービスするように構成されるワーカーの単一のプールであってよく、または、ルータのそれぞれのためのワーカーの様々な個別のプールであってもよい。或るワーカー２３０が故障すると、または利用可能でなくなると、ワーカープール（複数可）２４２におけるワーカーが、故障したワーカー２４０に代わるように、新たなワーカーを選出するように構成されてよい。図２に示すように、ワーカーは、特定のルータにサービスするように少なくとも構成されてよく、したがって、ワーカー２３０ａはルータ２４０ａにサービスし、ワーカー２３０ｂはルータ２４０ｂにサービスし、ワーカー２３０ｃはルータ２４０ｃにサービスし、及び、ワーカー２３０ｄはルータ２４０ｄにサービスする。
【００１８】
少なくともいくつかの実施形態において、ルータデータサービス２００は、プロバイダネットワークルータ全体のためのスロットリングを分析、判定、調整、及び／または実施するように、スロットリング管理モジュール２６０を実行してよい。例として、スロットリング管理モジュール２６０は、ルータ２４０に送信される変換された要求の数を追跡するように、及び、受信要求の全体的な比率を判定するように構成されてよい。判定された比率、及びプロバイダネットワークのステータスについての他の情報（例えば、プロバイダネットワークのトラフィックレベルについての履歴情報）に基づいて、スロットリング管理モジュール２６０は、いくつかの実施形態において、ワーカー２３０で実施するために特定のスロットリング閾値を判定してよく、実施するためにワーカーにスロットリング閾値を送信してよい。下記で述べられる図８は、いくつかの実施形態において、スロットリング管理モジュール２６０が実行し得るスロットリングを判定及び実施するための、多くの異なる技法を提供する。
【００１９】
ルータ２４０への要求の結果は、いくつかの実施形態において、結果キュー２５０において記憶されてよい。ルータデータサービス２００は、要求されたルータ情報を含むクエリ結果を維持するために、結果キュー２５０を実行してよい。フロントエンド２１０または別の構成要素は、クライアント２０２及び２０４に結果を提供するために、これらのクエリ結果を選択的に取得してよい。下記で述べられる図９は、結果キュー２５０から結果を選択するために実行されてよい技法の様々な実施例を提供する。いくつかの実施形態において、ルータデータサービス２００はまた、永続データストア、結果ストレージ２７０においていくつかの結果を記憶するように構成されてよい。結果ストレージ２７０は、周期的または頻繁に取得される健全性及び他の情報を維持してよい。いくつかの実施形態において、ルータ情報に対するいくつかの要求は、結果ストレージ２７０にアクセスし、また、そこでデータストアのいくつかを取得することによるサービスであってよい。
【００２０】
図３は、いくつかの実施形態に従った、特定のルータに対する要求にサービスする要求ワーカーのブロック図である。要求ワーカー３００は、プライオリティキュー３１０において維持された要求を、サービスのために変換されるために、選択する。要求の変換されたバージンは、ルータ３６０に送信されてよい。結果が、その後、結果キュー２５０及び／または結果ストレージ２７０に提供されてよい。要求ワーカー３００は、１つまたは複数のコンピューティングノード、システム、またはデバイス（例えば、図１０に関して下記で説明されるコンピューティングシステム１０００）上で実行されてよい。示される様々な構成要素は、ハードウェア及び／またはソフトウェア構成要素において構成されてよい。
【００２１】
プライオリティキュー３１０は、（上記の図２において説明された）フロントエンド２１０または別の構成要素もしくはデバイスによりプライオリティキュー３１０に誘導される様々なルータ固有の要求を維持する。要求３１２ａ、３１２ｂ、３１２ｃ、３１２ｄ、３１２ｅ及び３１２ｆは、サービスのために選択されるまで、プライオリティキュー３１０において維持されてよい。要求ワーカー３００は、様々な実施形態において、要求選択モジュール３２０を実行してよい。要求選択モジュール３２０は、プライオリティキュー３１０における要求を評価してよく、サービスのために選択された要求を引き出してよい（３０４）。例えば、いくつかの実施形態において、要求選択モジュール３２０は、要求３１２のためのプライオリティスコアの表示を判定または受信してよい。これらのプライオリティスコアに少なくとも部分的に基づいて、要求選択モジュール３２０は、より高い、またはほぼ最高のプライオリティスコアを有するこれらの要求３１２をサービスのために選択してよい。要求選択モジュール３２０は、多数の要求３１２を、単一または減少された数の、要求の変換されたバージョンに最適化または結合することを含め、図６及び図７に関して下記で説明される要求選択のための様々な技法を実行してよい。
【００２２】
様々な実施形態において、要求ワーカー３００は、スロットル制御３３０を実行してよい。スロットル制御３３０は、ルータ３６０に送信されてよい要求に対して、様々なスロットリング閾値または技法を実施してよい。いくつかの実施形態において、スロットル制御３３０は、スロットリング管理２６０に、追跡に対する要求を報告してよく、また、スロットリング３３４を構成するために、スロットリング閾値及び他の情報または命令をスロットリング管理構成要素から受信してよい。スロットル制御３３０は、例えば、ルータ３６０に対する要求の比率を監視してよく、ルータ３６０への全ての要求、プライオリティの低い要求などの特定のタイプの要求、または、特定のクライアントからの要求をスロットリングしてよい。スロットル制御３３０は、いくつかの実施形態において、図８に関して下記で述べられる様々なスロットリング技法を実行してよい。
【００２３】
様々な実施形態において、要求ワーカー３００は、報告モジュール３４０を実行してよい。報告モジュール３４０は、受信されたクエリ結果に対処するように、また、１つまたは複数の位置で、取得されたルータ情報を記憶するように構成されてよい。例えば、報告モジュール３４０は、取得されたルータデータが、結果ストレージ２７０において記憶される（３４４）健全性またはステータス情報であり得るかを判定してよい。一方で、他の受信されたクエリ結果について、報告モジュール３４０は、取得されたルータ情報が特定の要求にサービスするためのものであるかを判定するように、また、結果キュー２５０において要求ルータ情報を記憶する（３４２）ように構成されてよい。いくつかの実施形態において、報告モジュール３４０は、新たに受信された要求のデータが結果キュー２５０において記憶されるかを判定するように構成されてよい。
【００２４】
様々な実施形態において、要求ワーカー３５４は、ルータ固有の要求変換モジュール３５０を実行してよい。ルータ固有の要求変換モジュール３５０は、プログラマティックインターフェースに従ってフォーマットされた要求３１２を、ルータ３６０に固有のプログラマティックインターフェースに変換するように構成されてよい。ルータ固有の要求変換モジュール３５０は、変換を実施するために、要求ワーカー３００にアクセス可能な１つまたは複数のライブラリまたは知識ベースにアクセスしてよい。ルータ固有の要求変換モジュール３５０は、その後、データのための変換された要求を送信してよく（３５２）、また、要求されたデータ３５４を受信してよい。いくつかの実施形態において、ルータ固有の要求変換モジュール３５０は、要求されたデータ３５４を、プログラマティックインターフェースと互換性のあるフォーマットに再び変換するように構成されてもよい。
【００２５】
図４は、様々な実施形態に従った、クライアントデバイスとルータデータサービスとの間の対話を示す図である。クライアント４００は、ルータ４３０を利用するプロバイダネットワークの任意の種類のクライアントであってよい。様々な実施形態におけるクライアント４００は、内部クライアント２０４などの内部クライアント、または、外部クライアント２０２などの外部クライアントであってよい。クライアント４００は、様々な実施形態においてプラットフォーム独立であってもよいルータデータサービスＡＰＩを介して、ルータデータサービス２００と対話してよい。例えば、クライアント４００は、ルータデータサービスＡＰＩ４０２に従ってフォーマットされたルータ４３０からのルータデータに対する要求または情報を送信してよく（４３２）、当該要求はフロントエンド２１０で受信される。フロントエンド２１０は、ルータ４３０のための適切なルータキュー４１０において要求を評価してよく、また要求をキューに入れてよい（４３４）。ワーカー４２０は、ルータ４３０に対するペンディング要求を評価するように、ルータキュー４１０をポーリングしてよい。ワーカー４２０は、ペンディング要求のためのプライオリティスキームに従って要求を選択してよく（４３６）、また、ルータキュー４１０から要求を受信または引き出してよい(４３８)。
【００２６】
ワーカー４１０は、要求を、ルータ４３０のためにルータ固有のＡＰＩ４２２に従ってフォーマットされる要求のバージョンに変換してよい。１つの要求が示されているが、要求は多数の要求のためのものであってもよく、それゆえ、要求の多数のバージョンが、固有のルータＡＰＩ４２２に従って発生及び送信されてよいことに留意されたい。いくつかの実施形態において、要求は、インターフェース（ＡＰＩである必要はない）の任意のバージョンに変換されてよい。いったん変換されると、要求の新たなバージョンは、要求されたデータを取得するために、ルータ４３０に送信されてよい（４４０）。ルータ４３０は、要求をサービスしてよく(４４０)、また、ルータ固有のＡＰＩ４２２に従ってやはりフォーマットされてよいルータデータ４２２を返送してよい。ワーカー４２０は、その後、リトリーブされたルータデータを結果キュー２５０へキューに入れてよい（４４４）。いくつかの実施形態において、多数のルータからの結果は、多数のルータからの情報に対する単一の要求への応答として、集約及び送信されてよい。フロントエンド２１０は、その後、リトリーブされるルータデータを結果キュー２５０から選択してよく（４４６）、ルータデータを受信してよい（４４８）。フロントエンド２１０は、その後、要求されたルータデータをクライアント４００に提供してよい（４５０）。
【００２７】
図５は、様々な実施形態に従った、クライアントデバイスとルータデータサービスとの間の対話を示す図である。上記で述べられた図４のように、ルータデータサービス２００は、クライアント要求に対処するようにフロントエンド２１０を実行してよい。例えば、ルータデータに対するクライアント要求５０２は、ルータデータサービスＡＰＩ４０２を介してフォーマットされてよく、フロントエンド２１０で受信されてよい。上記で述べたように、いくつかのルータデータまたは情報は、結果ストレージ２７０（または結果キュー２５０）などの永続データストアにおいて維持されてよい。この実施例において、要求されたルータデータ５０２は、結果ストレージ２７０において維持される。データに対する要求は、結果ストレージ２７０からデータをリトリーブするように送信されてよく（５０４）、結果ストレージ２７０は、要求されたデータを返送してよい（５０６）。フロントエンド２１０は、いくつかの実施形態において、結果ストレージ２７０からのデータが依然として有効かどうかを判定してよい。データが依然として有効である場合、フロントエンド２１０は、ルータデータをクライアント５００に提供してよい（５０８）。有効でない場合、フロントエンド２１０は、メッセージに対処する様々な要求及び上記の図４に示した技法を実施してよい。
【００２８】
図５に示した別の実施例において、クライアント５００は、ルータデータに対する要求をフロントエンド２１０に送信する(５１０)。この要求は、しかし、（例えば、ルータデータサービスＡＰＩ４０２に関して）不適当にフォーマットされるか、または無効であることがある。この結果、無効な要求メッセージ４１２がクライアント５００に返送されてよく、このメッセージは、（例えば、応答がエラーコードを含み得る、といった）無効についての理由を示してよい。
【００２９】
図１〜図５に関して上記で述べたプログラマティックインターフェースに従ってルータ情報の提供を実行する実施例が、特定のプロバイダネットワークに関して与えられた。プロバイダネットワークの様々な他のタイプまたは構成が、これらの技法を実行してもよい。例えばプログラマティックインターフェースが実行されるルータデータサービスの他のアーキテクチャまたは構成は、例として、ネットワークエンティティレジストリを実行してよい。例えば、全てのルータに対する要求の単一のグループまたはキューが維持されてよく、要求は、変換、送信、及び他の処理のために、当該単一のグループから引き出されてよい。図６は、いくつかの実施形態に従った、プログラマティックインターフェースに従ってルータ情報を提供するための様々な方法及び技法を示す高レベルのフローチャートである。これらの技法は、図１〜図５に関して上記で述べたようなプロバイダネットワークの様々な構成要素または他のプロバイダネットワーク構成要素を使用して実行されてよい。
【００３０】
６１０で示すように、要求は、様々な実施形態において、プロバイダネットワークの特定の１つまたは複数のルータのための特定のルータ情報に対して、プロバイダネットワークのクライアントから受信されてよい。要求は、少なくともいくつかの実施形態において、プログラマティックインターフェース（ＡＰＩ）に従ってフォーマットされてよい。プログラマティックインターフェースは、多数の異なるタイプのルータからのルータ情報に対する要求またはクエリをサポートしてよい。これらの異なるタイプのルータのそれぞれは、例えば、特定のルータタイプに固有の異なるプログラマティックインターフェースに従って、別々にアクセスされるように構成されてよい。例えば、ルータタイプのための異なる特定のインターフェース（例えば、ＡＰＩ）は、同一の情報（例えば、ルータ上の特定のリンクについてのリンクステータス）を取得するように、異なるキーワードを必要としてよく、または使用してよい。その一方で、プラットフォーム独立であるルータ情報のためのプログラマティックインターフェースは、１つのルータタイプに誘導されようと、または別のタイプに誘導されようと、要求のための同一のフォーマット（例えば、リンクステータスを確認するための同一のキーワード）を可能にしてよい。
【００３１】
様々な異なるタイプのルータ情報が、いくつかの実施形態において、要求されてよい。例えば、リンクステータス、ボーダ・ゲートウェイ・プロトコル（ＢＧＰ）ステータス、アドレス解決プロトコル（ＡＲＰ）ステータス、仮想のローカルエリアネットワーク（ＶＬＡＮ）タギング、エラー、受信される経路、広告される経路、または、クライアントが影響に対して処置を取り得る任意の他のルータ情報である。少なくともいくつかの実施形態において、クライアントは、プロバイダネットワークへの私的な接続を有してよい。それゆえ、ルータ情報に対する要求は、私的な接続を構成及び／または操作するのに有用なあらゆる情報を含んでよい。クライアントがまた、プロバイダネットワークに対して内部であってもよいことに留意されたい。
【００３２】
いったん受信されると、６２０で示すように、要求は、当該要求が適正かどうかを判定するために評価されてよい。適正な要求は、様々なフォーマッティング、キーワード、データフィールド、または他のプログラマティックインターフェースに特有の要件に適合し得る。少なくともいくつかの実施形態において、適正な要求はまた、クライアントが、特定の要求をするための許可またはアクセス権を有するかどうかに関して評価されてもよい。例えば、内部クライアントが、より大きなアクセス権を有する場合があり、それゆえ外部クライアントよりも広範囲な、プログラマティックインターフェースの要求の範囲を利用する場合がある。６２０からの否定的出口によって示すように、エラー応答は、不適正な要求を送信したクライアントに送信されてよい（６２２）。エラー応答は、要求に関連する特定の問題（例えば、多すぎるフラグの設定または許可されていないアクセス）を示してよく、または、エラー応答は、要求を単に拒否してもよい。エラー応答それ自体は、様々な実施形態において、プログラマティックインターフェースに従ってフォーマットされてよい。
【００３３】
６３０で示すように、また、特定のルータ情報が既に要求されたかどうかが判定されてもよい。例えば、いくつかのルータ情報は、周期的または頻繁に、プロバイダネットワークにおけるルータから集められてよい。このルータ情報は、一元的に記憶または位置されてよく、その結果、異なるプロバイダネットワークサービスまたは構成要素は、ルータからのデータを要求することなく、データにアクセスすることを可能とし得る。データは、記憶されてもよく、また、失効ポイントを示してもよい。その失効ポイントの後、データはもはや有効であり得ない。例として、いくつかの実施形態において、ルータから取得されるルータ健全性情報は、後続のアクセスのために永続ストレージにおいて記憶されてよい。特定のルータ情報が、既に、または前もってリトリーブされている場合、６３０からの肯定的出口によって示されるように、特定のルータ情報が、（例えば、前もってリトリーブされたルータ情報を維持する永続データストアから）取得されてよい。
【００３４】
特定の情報が前もってリトリーブされていない（または、前もってリトリーブされたが、もはや有効でない）場合、要求は、６４０で示すように、特定のルータのためのルータ情報に対する他のペンディング要求と共に維持されてよい。例として、いくつかの実施形態において、特定のルータに対する要求は、キュー（例えば、プライオリティキュー）内に、または、ペンディング要求をそこからサービスのために後に選択し得る、ルータのための他のデータ構造内に、維持または挿入されてよい。しかし、他の実施形態において、要求はまた、他のルータに対する要求と共に維持されてもよく、それゆえ、先の実施例は、限定的であることを意図しない。
【００３５】
要求はその後、様々な実施形態において、６５０で示すように、要求をサービスするためのプライオリティスキームに少なくとも部分的に基づいて、サービスされるように提供されてよい。プライオリティスキームは、簡単に規定されてよく、粗野な優先順位付けを提供する。例えば、内部クライアントからの要求は、いくつかの実施形態において、プライオリティが高いと考えられてよく、（外部クライアントからの要求が内部クライアント要求の前に受信された場合であっても）外部クライアントからの要求の前に処理するために選択されてよい。反対に、外部クライアントからの要求は、いくつかの実施形態において、内部クライアントからの要求の後に完了されてよい。細分化されたプライオリティスキームは、要求のために判定される、可変のプライオリティスコアまたは値を可能とし得る。それらは広範囲に及んでよく、例えば、外部クライアントからの要求を、各クライアントからの特定のタイプの要求に依存する内部クライアントからの要求の前に、選択させてよい。下記で述べられる図７は、プライオリティスキームに従って要求を選択する更なる実施例を提供する。少なくともいくつかの実施形態において、多数の要求が選択されてよく、要求の単一の変換されたバージョンに結合されてよい。例えば、多数の要求はそれぞれが、同一のルータ情報を要求してもよく、または、要求のためのそれぞれのルータ情報は、単一の変換された要求を特定のルータに送信することによって取得されてもよい。いくつかの実施形態において、ルータのためのプログラマティックインターフェースが１つのタイプのルータから別のタイプへ変化する場合があるで、これらの最適化は、特定のルータに固有のものであってよい。
【００３６】
いったん選択されると、要求は、様々な実施形態において、６６０で示すように、特定のルータのためのプログラマティックインターフェースに従って、特定の情報に対する要求のバージョンに変換されてよい。例として「ＧＥＴ  ＢＧＰ＿ＳＴＡＴＵＳ」プラットフォーム独立の要求は、特定のルータのための「ＡＣＣＥＳＳ  ＢＧＰ‐ＳＴＡＴＵＳ」ルータ固有の要求に変換されてよい。要求を変換することは、そのうちのいくつかが同一であってもなくてもよい転換されたキーワード、及び、ルータのための特定のプログラマティックインターフェースに適合するのに十分な、他のデータ、シンボル、または構造を有する変換されたバージョンの様々なフィールドをポピュレートすることを含んでよい。
【００３７】
６７０で示すように、いったん変換されると、要求のバージョンが、特定の情報を取得するために特定のルータに送信されてよい。例として、各ルータは、ＡＰＩ要求のためだけに割り当てられる特定のインターフェースを維持してよい。このように、要求は、特定のルータでＡＰＩ要求として処理されるために、特定のインターフェースに送信されてよい。
【００３８】
６８０で示すように、特定のルータ情報は、様々な実施形態において、プログラマティックインターフェースに従って、クライアントにその後に提供されてよい。特定のルータから受信されるルータ情報及び／または他のクエリ結果は、様々なやり方で対処されてよい。いくつかの実施形態において、取得されたルータ情報は、それが取得されたときにクライアントに送信されてよい。いくつかの実施形態において、特定の情報は、図９に関して以下で説明されるように、キューなどのデータ構造において記憶されてよく、要求しているクライアントに選択的または知的に送信されてよい。
【００３９】
図７は、様々な実施形態に従った、プライオリティスキームに従ってサービスされるルータ情報に対する要求を選択するための様々な方法及び技法を示す高レベルのフローチャートである。重要な機能、クライアント（例えば、内部クライアント／プロバイダネットワークのサービス）、または事象のための情報を提供する一定の要求が検出され、迅速に処理される（または、サービスされる、はるかに多くの数の重要性の低い要求を待機させ続けない）ことを確実にするように、上述のように様々なプライオリティスキームが実行されてよい。７１０で示すように、それぞれのプライオリティ値が、様々な実施形態において、プライオリティスキームに従ってルータに対し要求をペンディングするために判定されてよい。例えば、フロントエンド構成要素（例えば、図２に関して上記で説明されたフロントエンド２１０）、または要求に対処する他のインターフェースは、例えば、ソース（外部または内部クライアント）、要求のタイプ（緊急の要求または周期的な健全性のチェック）、要求される特定のルータ情報、要求される情報の量、または、要求もしくは要求を提出するクライアントを説明する任意の他の情報に基づいて、特定の要求のプライオリティを、マークし、格付けし、採点し、または、示してよい。同様に、要求は、（例えば、図２におけるワーカー２３０によって）選択のために評価される際に採点されてもよい。
【００４０】
プライオリティ値を判定することに加えて、いくつかの実施形態において、７２０で示すように、それぞれのペンディング時間が判定されてよい。タイムスタンプまたは他の標識が、要求が受信されたときとして参照ポイントを提供するように要求に含まれてよく、ペンディング時間が算出されることを可能とする。いくつかの実施形態において、ペンディング時間は、暗に示されてもよく、または、他の要求に関連して内在的に説明されてもよい。例えば、いくつかの実施形態において、要求は、プライオリティキューにおいて維持されてよい。例として、キューはそれ自体が、特定の要求が受信されたときを、当該要求が維持される順番によって示してよい。
【００４１】
候補要求は、様々な実施形態において、７３０で示すように、最高と判定されたプライオリティ値により選択されてよい。例として、３つの要求が、ペンディング要求の中で最高のプライオリティスコアであり得る同一のプライオリティスコア８を有する場合、当該３つの要求が候補要求として識別されてよい。しかし、スコアが最高の、単一の要求がある場合、そうした単一の要求が、（７４０で示すようなペンディング時間のいずれの比較も実施することなく）サービスのために選択されてよい。同点またはほぼ同じプライオリティ値の（それゆえ候補要求として選択される）多数の要求について、最長のペンディング時間を有する要求が、７４０で示すように、サービスのための要求として選択されてよい。例えば、プライオリティキューの最前列に最も近い候補要求は、同一または類似のプライオリティ値を有する他の候補要求よりも先に選択されてよい。
【００４２】
図８は、いくつかの実施形態に従った、プロバイダネットワークにおけるルータに、ルータ情報に対する要求をスロットリングするための様々な方法及び技法を示す、高レベルのフローチャートである。プロバイダネットワークにおけるルータに要求をスロットリングすることは、受信ルータ要求の様々な観点に関して実行されてよい。ルータ固有の観点、クライアント固有の観点、または、さらにはネットワーク全体の観点が、ルータ要求をルータでサービスするレートの、粗野な制御及び細分化された制御の両方を実行するのに利用されてよい。このように、ルータは、効率的または最適な容量でルーティング機能を実施することを可能とし得る。
【００４３】
８１０で示すように、プロバイダネットワークにおけるルータに送信される、ルータ情報に対する変換された要求は、様々な実施形態において、監視されてよい。例えば、要求の様々なレートまたは総数が、収集され、算出され、または判定されてよい。いくつかの実施形態において、集中された構成要素が、プロバイダネットワークにおけるルータ全てに対する受信要求の数を追跡してよい（例えば、図２におけるスロットリング管理モジュール２６０）。それゆえ、ルータに対する要求のネットワーク全体の観点が評価されてよい。しかし、いくつかの実施形態において、個々の構成要素（例えば、ワーカー２３０）が、同様に、特定のルータに送信される要求を監視または追跡してもよい。
【００４４】
いくつかの実施形態において、８２０で示すように、要求がクライアント固有の閾値を超えるかどうかが判定されてよい。例えば、クライアント固有の閾値は、特定のクライアントによる不正な挙動または要求を制限または防止するために送信されてよい。それゆえ、プロバイダネットワークにおける特定のルータまたはルータのいくつか／全てのいずれかでの、クライアントに対する要求が、追跡及び評価されてよい。（例えば、特定の時間期間内の）要求の特定のレートまたは要求の総数が判定されてよい。クライアントからの要求のレートまたは総数がクライアント固有の閾値を超える場合、８２０からの肯定的出口により示すように、クライアントからの要求は、８３０で示すように、スロットリングされてよい。例として、その後に受信される要求は、プライオリティ値がより低いものであってよく、または、時間の特定の期間にわたり検討のために一時中断されてよい。いくつかの実施形態において、要求をスロットリングすることは、要求を維持するルータキューまたは他の構造から、一定の要求をバウンスまたはドロップすることを含んでよい。
【００４５】
いくつかの実施形態において、８４０で示すように、要求がルータ固有の閾値を超えるかどうかが判定されてよい。例えば、ルータ固有の閾値は、特定のルータが圧倒されて、当該特定のルータの他の機能（例えば、ルーティング）の実施を妨げるのを制限または防止するように送信されてよい。それゆえ、プロバイダネットワークにおける特定のルータで受信される要求が、追跡及び評価されてよい。（例えば、特定の時間期間内の）要求の特定のレートまたは要求の総数が判定されてよい。特定のルータに対する要求のレートまたは総数がルータ固有の閾値を超える場合、８４０からの肯定的出口により示すように、特定のルータに対する要求が、８５０で示すように、スロットリングされてよい。例えば、その後に受信された要求はプライオリティ値がより低いものであってよく、または、時間の特定の期間にわたり検討のために一時中断されてよい。いくつかの実施形態において、プライオリティの低い要求は検討から遅延されてよく、他方、プライオリティのより高い要求は、スロットリング遅延をほとんど経験しなくてよい。要求をスロットリングすることは、要求を維持するルータキューまたは他の構造から、一定の要求をバウンスまたはドロップすることを含んでよい。
【００４６】
いくつかの実施形態において、８６０で示すように、要求がネットワーク全体の閾値を超えるかどうかが判定されてよい。例えば、ネットワーク全体の閾値が、プロバイダネットワークのルータが全体として圧倒されて、ルータでのトラフィック輻輳に起因するプロバイダネットワークのパフォーマンスを妨害するのを制限または防止するように送信されてよい。それゆえ、プロバイダネットワークにおける特定のルータで受信される要求が、追跡及び評価されてよい。（例えば、特定の時間内の）要求の特定のレートまたは要求の総数が、ルータで送信／処理される要求のために判定されてよい。プロバイダネットワークに対する要求のレートまたは総数がネットワーク全体の閾値を超える場合、８６０からの肯定的出口により示すように、プロバイダネットワークにおけるルータの全てに対する要求が、８７０に示すように、スロットリングされてよい。例として、その後に受信された要求は、プライオリティ値がより低いものであってよく、または、時間の特定の期間にわたり検討のために一時中断されてよい。いくつかの実施形態において、プライオリティの低い要求は検討から遅延されてよく、他方で、プライオリティのより高い要求は、スロットリング遅延をほとんど経験しなくてよい。要求をスロットリングすることは、要求を維持するルータキューまたは他の構造から、一定の要求をバウンスまたはドロップすることを含んでよい。いくつかの実施形態において、特定のルータのための異なる個々の閾値が、判定及び実施されてよい。例えば、いくつかのルータは、ルータ情報のためのより高い要求負荷を経験する場合がある。これらのルータは、他のルータよりも低い（それゆえより厳密な）、実施されるスロットリング閾値を備えてもよく、またはこれを有してもよい。このように、一定のネットワーク追跡リソースを保護するために、または、全体としてネットワークのルータのパフォーマンスに影響を与える、圧倒されるルータの普及または影響を防止するために、プロバイダネットワークにとって問題となる、または重要なルータが対象とされてよい。
【００４７】
図９は、いくつかの実施形態に従った、クライアントに提供するようにリトリーブされたルータ情報を選択するための方法及び技法を示す高レベルのフローチャートである。上述のように、ルータ情報に対する要求は、プロバイダネットワークのルータを圧倒して、それらそれぞれのルーティング機能のパフォーマンスを妨げないように、また、情報に対するプライオリティの高い要求をサービスするように、様々なプライオリティスキーム及びスロットリング技法の使用に従ったサービスされてよい。同様に、要求の結果をクライアントに提供することは、要求される情報に関するプライオリティまたは必要性がより高いものである要求が、結果をより早く受信するように、達成されてよい。この柔軟性を実現することは、様々なやり方で達成されてよい。例えば、要求の様々なプライオリティのための別々のキューが、クエリの結果のために維持されてよく、その結果、より高いプライオリティキューにおける要求された情報が、迅速に処理されて、要求するクライアントに送信されてよい。
【００４８】
別の実施例において、要求の結果は共に記憶または維持されてよいが、やはり、クライアントに選択的に提供されてよい。これらの結果は、受信された要求を維持することと共に上記で述べられたように、結果のための順序及び結果のためのプライオリティにおいてそれぞれの位置を提供するプライオリティキューまたは他のデータ構造において維持されてよい。いくつかの実施形態において、９１０で示すように、特定のルータ情報を含むクエリ結果は、ルータデータに対する要求をサービスするためのプライオリティスキームに従って共に維持されるクエリ結果の集まりから選択されてよい。少なくともいくつかの実施形態において、プライオリティスキームは、処理のために要求を選択するのに使用されるものと同一であってよい。例えば、サービスのために迅速に選択される、プライオリティの高い要求は、要求するクライアントに提供されるために、やはり迅速に選択されてよい。ペンディング時間もまた、図７に関して上記で述べられたように、使用されてよい。例えば、２つのクエリ結果が同一のプライオリティ値を有する場合があり、それゆえ、ペンディングしている時間が、最も長く「待機している」クエリ結果におけるルータ情報を送信するのに使用されてよい。いくつかの実施形態において、いくつかのクエリ結果が、プライオリティのより高い要求の代わりに永続的に遅延されないことを確実にするように、様々なメカニズムが実行されてよい。例えば、特定のメカニズムは、時間の一定の閾値を超えたペンディングしている時間を有するクエリ結果のプライオリティ値を増加させてよい。結果のキューはまた、いくつかの実施形態において、個々のルータからの情報を記憶するために、また、単一の応答をクライアントに送信する前に当該情報を共に統合するために、使用されてよい。
【００４９】
９２０で示すように、いったん選択されると、識別されたクエリ結果が取得されてよい。例えば、クエリ結果を記憶もしくはホストする記憶デバイスまたは他の構成要素への要求が、クエリ結果をリトリーブするために送信されてよい。いったんリトリーブされると、９３０で示すように、要求されたクエリ結果が含まれたルータ情報は、要求を送信したプログラマティックインターフェースに従って、フォーマット及び送信される。
【００５０】
本明細書において説明される方法は、様々な実施形態において、ハードウェア及びソフトウェアの任意の組合せによって実行されてよい。例えば、一実施形態において、方法は、プロセッサに結合されるコンピュータ可読の記憶媒体上に記憶されるプログラム命令を実行する１つまたは複数のプロセッサを含むコンピュータシステム（例えば、図１０におけるようなコンピュータシステム）によって実行されてよい。プログラム命令は、本明細書において説明される機能（例えば、本明細書において説明されるルータデータサービスを実行する様々なサーバ及び他の構成要素の機能）を実行するように構成されてよい。図面に示され、且つ、本明細書において説明される様々な方法は、方法の例示的な実施形態を表す。いずれの方法の順番も変更されてよく、様々な要素が、追加、順序変更、結合、省略、修正等がされてよい。
【００５１】
本開示の実施形態は、次の条項を考慮して説明され得る。
１．プロバイダネットワークであって、
それぞれが、前記プロバイダネットワークへのそれぞれの１つまたは複数の私的な接続を提供するように構成される、複数のルータであって、前記複数のルータの少なくともいくつかが、前記複数のルータの少なくともいくつかの他の１つとは異なる、前記複数のルータと、
前記プロバイダネットワークのためのルータデータサービスを共に実行する、複数のコンピュートノードと、
前記ルータデータサービスであって、
前記プロバイダネットワークのクライアントから、前記複数のルータの特定された１つまたは複数のルータのためのルータ情報に対する要求を受信するように、前記要求が、プログラマティックインターフェースに従ってフォーマットされるものであり、
前記要求を、前記特定された１つまたは複数のルータのためのルータ情報に対する複数の他のペンディング要求と共に維持するように、
前記複数のルータに対する要求をサービスするためのプライオリティスキームに少なくとも部分的に基づいて、サービスされる前記要求を選択するように、
サービスされる前記要求の前記選択に応答して、
前記ルータ情報に対する前記要求を、前記要求の１つまたは複数のバージョンに変換するように、前記要求の前記１つまたは複数が、前記特定された１つまたは複数のルータのためのそれぞれの１つまたは複数のインターフェースに従ってフォーマットされるものであり、
前記ルータ情報を取得するために、前記要求の前記１つまたは複数のバージョンを、前記特定された１つまたは複数のルータに送信するように、
前記プログラマティックインターフェースに従って、前記ルータ情報を前記クライアントに提供するように、構成される、前記ルータデータサービスとを含む、
前記プロバイダネットワーク。
【００５２】
２．条項１に記載のプロバイダネットワークであって、
複数の異なるクライアントが、前記複数のルータの異なる１つから、ルータ情報に対する複数の要求を送信し、前記ルータデータサービスが、前記複数の要求のそれぞれのために、前記受信すること、前記維持すること、前記選択すること、及び、前記送信することを実施するようにさらに構成され、その結果、前記複数の要求の複数の変換されたバージョンが、前記複数のルータの前記異なる１つに送信され、
前記複数のコンピュートノードが、前記複数のルータへ要求をサービスするために、サービススロットリングマネージャ及び複数のワーカーを実行し、
前記サービススロットリングマネージャが、
前記複数のルータの前記異なる１つに送信される、前記複数の要求の前記複数の変換されたバージョンを監視するように、
前記監視することに少なくとも部分的に基づいて、スロットリング要求閾値を判定するように、
前記スロットリング要求閾値を前記複数のワーカーへ送信するように、構成され、
前記複数のワーカーが、
前記スロットリング要求閾値が超過されないように、その後に受信された要求の変換されたバージョンの、前記複数のルータへの送信をスロットリングするように構成される、
前記プロバイダネットワーク。
【００５３】
３．条項１に記載のプロバイダネットワークであって、さらに、
前記複数のルータのための前もってリトリーブされたルータ情報を維持するように構成される、永続データストアを含み、
前記ルータデータサービスが、さらに、
前記クライアントから、前記特定された１つまたは複数のルータのための他のルータ情報に対する別の要求を受信するように、前記他の要求が前記プログラマティックインターフェースに従ってフォーマットされるものであり、
前記他のルータ情報が、前記永続データストアで、前記前もってリトリーブされたルータ情報において維持されると判定するように、
前記永続データストアにおいて維持される前記他のルータ情報が有効であると判定することに応答して、前記永続データストアで、前記前もってリトリーブされたルータ情報において維持される前記他のルータ情報を、前記クライアントへ送信するように、構成される、
前記プロバイダネットワーク。
【００５４】
４．条項１に記載のプロバイダネットワークであって、前記要求が、前記特定された１つまたは複数のルータのためのルータ情報に対する複数の他のペンディング要求と共に、プライオリティキューにおいて維持される、前記プロバイダネットワーク。
【００５５】
５．プロバイダネットワークのクライアントから、前記プロバイダネットワークの特定された１つまたは複数のルータからのルータ情報に対する要求を受信することであって、前記要求が、プログラマティックインターフェースに従ってフォーマットされ、前記特定された１つまたは複数のルータが、前記プロバイダネットワークの一部として実行される複数のルータの１つまたは複数であり、前記複数のルータの少なくともいくつかが、前記複数のルータの少なくともいくつかの他のものとは異なる、前記受信することと、
前記ルータ情報を取得するために、前記ルータ情報に対する前記要求の１つまたは複数のバージョンを、前記特定された１つまたは複数のルータに送信することであって、前記要求の前記１つまたは複数のバージョンが、前記特定された１つまたは複数のルータのためのそれぞれの１つまたは複数のインターフェースに従ってフォーマットされる、前記送信することと、
前記プログラマティックインターフェースに従って、前記ルータ情報を前記クライアントに提供することとを、
１つまたは複数のコンピューティングデバイスにより実施することを含む、方法。
【００５６】
６．条項５に記載の方法であって、さらに、
前記要求を、前記特定された１つまたは複数のルータのためのルータ情報に対する複数の他のペンディング要求と共に維持することと、
前記複数のルータに対する要求をサービスするためのプライオリティスキームに少なくとも部分的に基づいて、サービスされる前記要求を選択することと、を含み、
前記要求の前記１つまたは複数のバージョンの前記送信が、前記要求を選択することに応答して実施される、前記方法。
【００５７】
７．条項６に記載の方法であって、複数の異なるクライアントが、前記複数のルータの異なる１つからルータデータに対する複数の要求を送信し、前記受信すること、前記維持すること、前記選択すること、及び、前記送信することが、前記複数の要求の複数の変換されたバージョンが、前記複数のルータの前記異なる１つに送信されるように、前記複数の要求のそれぞれに対して実施され、前記方法がさらに、
前記複数のルータの前記異なる１つに送信される前記複数の要求の前記複数の変換されたバージョンを監視することと、
前記監視することに少なくとも部分的に基づいて、スロットリング要求閾値が超過されると判定することと、
前記スロットリング要求閾値が超過されると判定することに応答して、前記複数のルータの少なくとも１つに送信される、その後に受信された要求の変換されたバージョンをスロットリングすることと、を含む、前記方法。
【００５８】
８．条項７に記載の方法であって、前記スロットリング要求閾値が、前記複数のクライアントの特定のクライアントに固有の閾値であり、前記その後に受信された要求の変換されたバージョンを前記スロットリングすることが、前記特定のクライアントに固有の前記閾値が超過されないように、前記特定のクライアントから受信された要求をスロットリングすることを含む、前記方法。
【００５９】
９．条項７に記載の方法であって、前記スロットリング要求閾値が、前記プロバイダネットワークに固有の閾値であり、前記その後に受信された要求の変換されたバージョンを前記スロットリングすることが、前記プロバイダネットワークに固有の前記閾値が超過されないように、前記複数のルータのそれぞれで要求をスロットリングすることを含む、前記方法。
【００６０】
１０．条項６に記載の方法であって、サービスされる前記要求を前記選択することが、
前記プライオリティスキームに従って、前記要求、及び、前記特定された１つまたは複数のルータのためのルータ情報に対する前記複数の他のペンディング要求のそれぞれのための、それぞれのプライオリティ値を判定することと、
前記要求、及び、前記特定された１つまたは複数のルータのためのルータ情報に対する前記複数の他のペンディング要求のそれぞれのための、それぞれのペンディング時間を判定することと、
前記要求、及び、最高のそれぞれのプライオリティ値を有する前記複数の他のペンディング要求のそれぞれの中から、１つまたは複数のペンディング要求を、候補要求として識別することと、
前記１つまたは複数の候補要求の中から、最長のそれぞれのペンディング時間を有する候補要求を選択することであって、前記選択された候補要求が前記要求である、前記選択することと、を含む、前記方法。
【００６１】
１１．条項５に記載の方法であって、前記クライアントが、前記プロバイダネットワークに対して外部のクライアントであり、前記要求が、前記他のペンディング要求の１つまたは複数が選択された後に選択され、前記１つまたは複数の他のペンディング要求が、前記プロバイダネットワークに対して内部のクライアントから受信される、前記方法。
【００６２】
１２．条項５に記載の方法であって、前記クライアントが、前記プロバイダネットワークに対して内部のクライアントであり、前記要求が、前記他のペンディング要求の１つまたは複数が選択される前に選択され、前記１つまたは複数の他のペンディング要求が、前記プロバイダネットワークに対して外部のクライアントから受信される、前記方法。
【００６３】
１３．条項５に記載の方法であって、前記クライアントから、前記特定された１つまたは複数のルータからの他のルータ情報に対する別の要求が受信され、当該要求が、前記プログラマティックインターフェースに従ってフォーマットされるものであり、前記方法がさらに、
前記他のルータ情報が、前もってリトリーブされ、且つ、有効であると判定することと、
前記判定することに応答して、前記他のルータ情報を前記クライアントに提供することと、を含む、前記方法。
【００６４】
１４．条項５に記載の方法であって、前記ルータ情報を前記クライアントに前記提供することが、
前記複数のルータに対する要求をサービスするための前記プライオリティスキームに従って、前記ルータ情報を含むクエリ結果を選択することであって、前記クエリ結果が、それぞれのルータ情報を含む複数の他のクエリ結果と共に維持される、前記選択することと、
前記選択されたクエリ結果を取得することと、
前記ルータ情報を前記クライアントへ送信することと、を含む、前記方法。
【００６５】
１５．プログラム命令を記憶する非一時的なコンピュータ可読の記憶媒体であって、当該プログラム命令が、複数のコンピューティングデバイスによって実行される場合、前記複数のコンピューティングデバイスに、
プロバイダネットワークのクライアントから、前記プロバイダネットワークの特定された１つまたは複数のルータからのルータ情報に対する要求を受信することであって、前記要求がプログラマティックインターフェースに従ってフォーマットされ、前記特定された１つまたは複数のルータが、前記プロバイダネットワークの一部として実行される複数のルータの１つまたは複数であり、前記複数のルータの少なくともいくつかが、前記複数のルータの少なくともいくつかの他のものとは異なるものである、前記受信することと、
前記ルータ情報に対する前記要求を、前記特定された１つまたは複数のルータのためのそれぞれの１つまたは複数のインターフェースに従ってフォーマットされた前記ルータ情報に対する前記要求の１つまたは複数のバージョンに変換することと、
前記ルータ情報を取得するために、前記要求の前記１つまたは複数のバージョンを、前記特定された１つまたは複数のルータに送信することと、
前記プログラマティックインターフェースに従って、前記ルータ情報を前記クライアントに提供することと、を実行させる、前記非一時的なコンピュータ可読の記憶媒体。
【００６６】
１６．条項１５に記載の前記非一時的なコンピュータ可読の記憶媒体であって、前記プログラム命令がさらに、前記１つまたは複数のコンピューティングデバイスに、
前記要求を、前記特定された１つまたは複数のルータのためのルータ情報に対する複数の他のペンディング要求と共に維持すること、
前記複数のルータに対する要求をサービスするためのプライオリティスキームに少なくとも部分的に基づいて、サービスされる前記要求を選択すること、
をさらに実行させ、
前記要求を前記変換すること、及び、前記要求の前記１つまたは複数のバージョンの前記送信することすることが、サービスされる前記要求を選択することに応答して実施される、
前記非一時的なコンピュータ可読の記憶媒体。
【００６７】
１７．条項１６に記載の前記非一時的なコンピュータ可読の記憶媒体であって、複数の異なるクライアントが、前記複数のルータの異なる１つからルータデータに対する複数の要求を送信し、前記受信すること、前記維持すること、前記選択すること、前記変換すること、及び、前記送信することが、前記複数の要求の複数の変換されたバージョンが前記複数のルータの前記異なる１つに送信されるように、前記複数の要求のそれぞれに対して実施され、前記プログラム命令が、前記１つまたは複数のコンピューティングデバイスに、
前記複数のルータの前記異なる１つに送信される前記複数の要求の前記複数の変換されたバージョンを監視することと、
前記監視することに少なくとも部分的に基づいて、スロットリング要求閾値が超過されると判定することと、
前記スロットリング要求閾値が超過されると判定することに応答して、前記複数のルータの少なくとも１つに送信される、その後に受信された要求の変換されたバージョンをスロットリングすることと、
を実行させる、前記非一時的なコンピュータ可読の記憶媒体。
【００６８】
１８．条項１７に記載の前記非一時的なコンピュータ可読の記憶媒体であって、前記スロットリング要求閾値が、前記複数のルータの特定のルータに固有の閾値であり、前記その後に受信された要求の変換されたバージョンを前記スロットリングすることが、前記特定のルータに固有の前記閾値が超過されないように、前記特定のルータのために受信される要求をスロットリングすることを含む、前記非一時的なコンピュータ可読の記憶媒体。
【００６９】
１９．条項１６に記載の前記非一時的なコンピュータ可読の記憶媒体であって、サービスされる前記要求を前記選択することにおいて、前記プログラム命令が、前記１つまたは複数のコンピューティングデバイスに、
前記プライオリティスキームに従って、前記要求、及び、前記特定された１つまたは複数のルータのためのルータ情報に対する前記複数の他のペンディング要求のそれぞれのための、それぞれのプライオリティ値を判定することと、
前記要求、及び、前記特定された１つまたは複数のルータのためのルータ情報に対する前記複数の他のペンディング要求のそれぞれのための、それぞれのペンディング時間を判定することと、
前記要求、及び、最高のそれぞれのプライオリティ値を有する前記複数の他のペンディング要求のそれぞれの中から、１つまたは複数のペンディング要求を候補要求として識別することと、
前記１つまたは複数の候補要求の中から、最長のそれぞれのペンディング時間を有する候補要求を選択することと、をさらに実行させ、
前記選択された候補要求が前記要求である、前記非一時的なコンピュータ可読の記憶媒体。
【００７０】
２０．条項１５に記載の前記非一時的なコンピュータ可読の記憶媒体であって、前記プログラム命令が、前記１つまたは複数のコンピューティングデバイスに、
前記クライアントから、前記特定された１つまたは複数のルータからの他のルータ情報に対する別の要求を受信することであって、前記他の要求が、前記プログラマティックインターフェースに従ってフォーマットされるものである、前記受信することと、
前記他の要求が不適正なものであると判定することに応答して、前記プログラマティックインターフェースに従ってフォーマットされた前記クライアントにエラー応答を送信することと、
をさらに実行させる、前記非一時的なコンピュータ可読の記憶媒体。
【００７１】
２１．条項１５に記載の前記非一時的なコンピュータ可読の記憶媒体であって、前記複数のルータが、前記プロバイダネットワークのためのエッジルータとして実行される、前記非一時的なコンピュータ可読の記憶媒体。
【００７２】
２２．条項１５に記載の前記非一時的なコンピュータ可読の記憶媒体であって、前記プログラム命令が、前記１つまたは複数のコンピューティングデバイスに、
前記クライアントから、前記特定された１つまたは複数のルータからの他のルータ情報に対する別の要求を受信することであって、前記他の要求が、前記プログラマティックインターフェースに従ってフォーマットされるものである、前記受信することと、
前記他のルータ情報が既にリトリーブされ、且つ、有効でないと判定することと、
前記判定することに応答して、前記他の要求のために、前記維持すること、前記選択すること、前記変換すること、前記送信すること、及び、前記提供することを実施することと、
をさらに実行させる、前記非一時的なコンピュータ可読の記憶媒体。
【００７３】
本明細書において説明されるプログラマティックインターフェースに従ってルータ情報を提供する実施形態は、様々な他のデバイスと対話し得る１つまたは複数のコンピュータシステム上で実行されてよい。図１０は、様々な実施形態に従った、例示的なコンピュータシステムを示すブロック図である。例えば、コンピュータシステム１０００は、様々な実施形態において、ルータデータサービス、永続データストア、及び／またはクライアントのノードを実行するように構成されてよい。コンピュータシステム１０００は、これに限定されるのではないが、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップもしくはノートブックコンピュータ、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、消費者デバイス、アプリケーションサーバ、記憶デバイス、電話機、携帯電話、または、全般に任意のタイプのコンピューティングデバイスを含む、任意の様々なタイプのデバイスであってよい。
【００７４】
コンピュータシステム１０００は、入力／出力（Ｉ／Ｏ）インターフェース１０３０を介してシステムメモリ１０２０に結合される１つまたは複数のプロセッサ１０１０（そのうちのいずれかは、シングルまたはマルチスレッドとし得る多数のコアを含んでよい）を含む。コンピュータシステム１０００はさらに、Ｉ／Ｏインターフェース１０３０に結合されるネットワークインターフェース１０４０を含む。様々な実施形態において、コンピュータシステム１０００は、１つのプロセッサ１０１０を含むユニプロセッサシステム、または、いくつかのプロセッサ１０１０（例えば、２つ、４つ、８つ、または別の適切な数）を含むマルチプロセッサシステムであってよい。プロセッサ１０１０は、命令を実行可能な任意の適切なプロセッサであってよい。例えば、様々な実施形態において、プロセッサ１０１０は、ｘ８６、ＰｏｗｅｒＰＣ、ＳＰＡＲＣ、もしくはＭＩＰＳ  ＩＳＡ、または任意の他の適切なＩＳＡなどの、任意の種々の命令セットアーキテクチャ（ＩＳＡ）を実行する、汎用または埋め込みプロセッサであってよい。マルチプロセッサシステムにおいて、プロセッサ１０１０のそれぞれは一般に、必須ではないが、同一のＩＳＡを実行してよい。コンピュータシステム１０００はまた、通信ネットワーク（例えば、インターネット、ＬＡＮ等）を通じて他のシステム及び／または構成要素と通信するための１つまたは複数のネットワーク通信デバイス（例えば、ネットワークインターフェース１０４０）を含む。例えば、システム１０００上で実行されるクライアントアプリケーションは、単一サーバ上で、または、本明細書において説明されるシステムの構成要素の１つまたは複数を実行するサーバのクラスタ上で実行されるサーバアプリケーションと通信するために、ネットワークインターフェース１０４０を使用してよい。別の実施例において、コンピュータシステム１０００上で実行されるサーバアプリケーションのインスタンスは、他のコンピュータシステム（例えば、コンピュータシステム１０９０）上で実行され得るサーバアプリケーション（または別のサーバアプリケーション）の別のインスタンスと通信するために、ネットワークインターフェース１０４０を使用してよい。
【００７５】
示される実施形態において、コンピュータシステム１０００はまた、１つまたは複数の永続記憶デバイス１０６０及び／または１つまたは複数のＩ／Ｏデバイス１０８０を含む。様々な実施形態において、永続記憶デバイス１０６０は、ディスクドライブ、テープドライブ、ソリッドステートメモリ、他の大量記憶デバイス、または任意の他の永続記憶デバイスに対応してよい。コンピュータシステム１０００（または、そこで動作する分散アプリケーションもしくはオペレーティングシステム）は、永続記憶デバイス１０６０において命令及び／またはデータを要望通りに記憶してよく、当該記憶された命令及び／またはデータを必要に応じてリトリーブしてよい。例えば、いくつかの実施形態において、コンピュータシステム１０００は、記憶システムサーバノードをホストしてよく、永続ストレージ１０６０は、そうしたサーバノードに取り付けられるＳＳＤを含んでよい。
【００７６】
コンピュータシステム１０００は、プロセッサ（複数可）１０１０によりアクセス可能な命令及びデータを記憶するように構成される１つまたは複数のシステムメモリ１０２０を含む。様々な実施形態において、システムメモリ１０２０は、任意の適切なメモリ技術（例えば、キャッシュ、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ＤＲＡＭ、ＲＤＲＡＭ、ＥＤＯ  ＲＡＭ、ＤＤＲ  １０  ＲＡＭ、シンクロナスダイナミックＲＡＭ（ＳＤＲＡＭ）、ラムバスＲＡＭ、ＥＥＰＲＯＭ、不揮発性／フラッシュタイプメモリ、または、任意の他のタイプのメモリの１つまたは複数）を使用して実行されてよい。システムメモリ１０２０は、本明細書において説明される方法及び技法を実行するために、プロセッサ（複数可）１０１０により実行可能なプログラム命令１０２５を含んでよい。様々な実施形態において、プログラム命令１０２５は、Ｊａｖａ（商標）バイトコードなどの、プラットフォームネイティブバイナリの、任意のインタープリタ型言語において、または、Ｃ／Ｃ＋＋、Ｊａｖａ（商標）等などの任意の他の言語において、または、それらの任意の組合せにおいて、暗号化されてよい。例えば、示される実施形態において、プログラム命令１０２５は、様々な実施形態において、プロバイダネットワークの機能を実行するように実行可能なプログラム命令を含む。いくつかの実施形態において、プログラム命令１０２５は、多数の別々のクライアント、サーバノード、及び／または他の構成要素を実行してよい。
【００７７】
いくつかの実施形態において、プログラム命令１０２５は、ＵＮＩＸ（登録商標）、ＬＩＮＵＸ、Ｓｏｌａｒｉｓ（商標）、ＭａｃＯＳ（商標）、Ｗｉｎｄｏｗｓ（商標）等などの任意の様々なオペレーティングシステムであってよいオペレーティングシステム（図示せず）を実行するように実行可能な命令を含んでよい。プログラム命令１０２５のいずれかまたは全てが、コンピュータプログラム製品として、または、そこに記憶された命令を有する非一時的なコンピュータ可読の記憶媒体を含んでよいソフトウェアとして提供されてよく、命令は、様々な実施形態に従って、処理を実施するようにコンピュータシステム（または他の電子デバイス）をプログラムするために使用されてよい。非一時的なコンピュータ可読の記憶媒体は、マシン（例えば、コンピュータ）により判読可能な形（例えば、ソフトウェア、処理アプリケーション）で情報を記憶する任意のメカニズムを含んでよい。概して、非一時的なコンピュータによりアクセス可能な媒体は、例えば、コンピュータシステム１０００にＩ／Ｏインターフェース１０３０を介して結合されるディスクまたはＤＶＤ／ＣＤ‐ＲＯＭといった、磁気または光媒体などのコンピュータ可読の記憶媒体またはメモリ媒体を含んでよい。非一時的なコンピュータ可読の記憶媒体は、コンピュータシステム１０００のいくつかの実施形態において、システムメモリ１０２０または別のタイプのメモリとして含まれてよい、ＲＡＭ（例えば、ＳＤＲＡＭ、ＤＤＲ  ＳＤＲＡＭ、ＲＤＲＡＭ、ＳＲＡＭ等）、ＲＯＭ等のなどの任意の揮発性または不揮発性媒体をさらに含んでよい。他の実施形態において、プログラム命令は、ネットワーク及び／または無線リンクなどの通信媒体を介して伝達される光学、音響学、または他の形の伝搬される信号（例えば、搬送波、赤外線信号、デジタル信号等）を使用して伝えられてよく、例えばネットワークインターフェース１０４０を介して実行されてよい。
【００７８】
いくつかの実施形態において、システムメモリ１０２０は、本明細書において説明されるように構成され得るデータストア１０４５を含んでよい。一般に、システムメモリ１０２０（例えば、システムメモリ１０２０内のデータストア１０４５）、永続ストレージ１０６０、及び／または遠隔ストレージ１０７０は、データブロック、データブロックのレプリカ、データブロック及び／またはそれらのステータスと関連するメタデータ、コンフィグレーション情報、及び／または本明細書において説明される方法及び技法を実行する際に利用可能な任意の他の情報を記憶してよい。
【００７９】
一実施形態において、Ｉ／Ｏインターフェース１０３０は、ネットワークインターフェース１０４０または他の周辺インターフェースを介することを含め、システムにおいて、プロセッサ１０１０と、システムメモリ１０２０と、任意の周辺デバイスとの間のＩ／Ｏトラフィックを調整するように構成されてよい。いくつかの実施形態において、Ｉ／Ｏインターフェース１０３０は、１つの構成要素（例えば、システムメモリ１０２０）からのデータ信号を、別の構成要素（例えば、プロセッサ１０１０）による使用にとって適切なフォーマットに変換するように、あらゆる必要なプロトコル、タイミングまたは他のデータ変換を実施してよい。いくつかの実施形態において、Ｉ／Ｏインターフェース１０３０は、例えば、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス規格またはユニバーサルシリアルバス（ＵＳＢ）規格の変種などの様々なタイプの周辺バスを通して取付けられるデバイスへのサポートを含んでよい。いくつかの実施形態において、Ｉ／Ｏインターフェース１０３０の機能は、例えばノースブリッジ及びサウスブリッジなどの、２つまたはそれ以上の別々の構成要素に分割されてよい。また、いくつかの実施形態において、システムメモリ１０２０へのインターフェースなどの、Ｉ／Ｏインターフェース１０３０の機能のいくつかまたは全てが、プロセッサ１０１０に直接組み込まれてもよい。
【００８０】
ネットワークインターフェース１０４０は、例えば、コンピュータシステム１０００と、他のコンピュータシステム１０９０（１つまたは複数の記憶システムサーバノード、データベースエンジンヘッドノード、及び／または本明細書において説明されるデータベースシステムのクライアントを実行し得るもの）などの、ネットワークに接続される他のデバイスとの間で、データが交換されることを可能にするように構成されてよい。加えて、ネットワークインターフェース１０４０は、コンピュータシステム１０００、様々なＩ／Ｏデバイス１０５０及び／または遠隔ストレージ１０７０の間の通信を可能にするように構成されてよい。入力／出力デバイス１０５０は、いくつかの実施形態において、１つまたは複数のディスプレイ端末、キーボード、キーパッド、タッチパッド、スキャンデバイス、音声もしくは光学認識デバイス、または、１つまたは複数のコンピュータシステム１０００によりデータを入力またはリトリーブするのに適切な任意の他のデバイスを含んでよい。多数の入力／出力デバイス１０５０は、コンピュータシステム１０００内にあってもよく、または、コンピュータシステム１０００を含む分散システムの様々なノード上に分散されてもよい。いくつかの実施形態において、同様の入力／出力デバイスが、コンピュータシステム１０００とは別個であってもよく、ネットワークインターフェース１０４０を通じてなどの、有線または無線接続を介して、コンピュータシステム１０００を含む分散システムの１つまたは複数のノードと対話してもよい。ネットワークインターフェース１０４０は、一般に、１つまたは複数の無線ネットワーキングプロトコル（例えば、Ｗｉ‐Ｆｉ／ＩＥＥＥ  ８０２．１１、または別の無線ネットワーキング規格）をサポートしてよい。しかし、様々な実施形態において、ネットワークインターフェース１０４０は、例えば、他のタイプのイーサネット（登録商標）ネットワークなどの任意の適切な有線または無線の一般的なデータネットワークを介する通信をサポートしてよい。さらに、ネットワークインターフェース１０４０は、ファイバチャンネルＳＡＮなどのストレージエリアネットワークを介して、または、任意の他の適切なタイプのネットワーク及び／またはプロトコルを介して、アナログ音声ネットワークまたはデジタルファイバ通信ネットワークなどの電気通信／電話通信ネットワークを介する通信をサポートしてよい。様々な実施形態において、コンピュータシステム１０００は、図１０に示したものよりも多い、より少ない、またはそれとは異なる構成要素（例えば、ディスプレイ、ビデオカード、オーディオカード、周辺デバイス、ＡＴＭインターフェース、イーサネットインターフェース、フレームリレーインターフェース等などの他のネットワークインターフェース）を含んでよい。
【００８１】
本明細書において説明される分散システムの実施形態のいずれか、またはそれらの構成要素のいずれかが、１つまたは複数のネットワークベースのサービスとして実行されてもよいことが留意される。例えば、コンピューティングサービス内のコンピュートクラスタは、コンピューティングサービス、及び／または、本明細書において説明される分散コンピューティングシステムを用いる他のタイプのサービスを、ネットワークベースのサービスとしてクライアントに提供してよい。いくつかの実施形態において、ネットワークベースのサービスは、ネットワークを介した連携可能なマシン同士の対話をサポートするように設計されるソフトウェア及び／またはハードウェアシステムによって実行されてよい。ネットワークベースのサービスは、Ｗｅｂサービス記述言語（ＷＳＤＬ）などのマシンにより処理可能なフォーマットにおいて記述されるインターフェースを有してよい。他のシステムが、ネットワークベースのサービスのインターフェースの記述により規定される方法でネットワークベースのサービスと対話してもよい。例えば、ネットワークベースのサービスは、他のシステムが求めることのある様々な動作を規定してよく、また、特定のアプリケーションプログラミングインターフェース（ＡＰＩ）を規定してよい。他のシステムは、様々な動作を要求する際、このＡＰＩに適合するように期待され得る。
【００８２】
様々な実施形態において、ネットワークベースのサービスは、ネットワークベースのサービス要求と関連するパラメータ及び／またはデータを含むメッセージの使用を通じて、要求または呼び出されてよい。このようなメッセージは、エクステンシブルマークアップ言語（ＸＭＬ）などの特定のマークアップ言語に従ってフォーマットされてもよく、及び／または、Ｓｉｍｐｌｅ  Ｏｂｊｅｃｔ  Ａｃｃｅｓｓ  Ｐｒｏｔｏｃｏｌ（ＳＯＡＰ）などのプロトコルを使用してカプセル化されてもよい。ネットワークベースのサービス要求を実施するために、ネットワークベースのサービスのクライアントは、要求を含むメッセージをアセンブルしてよく、また、ハイパーテキスト転送プロトコル（ＨＴＴＰ）などのインターネットベースのアプリケーション層転送プロトコルを使用して、ネットワークベースのサービスに対応するアドレス指定可能なエンドポイント（例えば、ユニフォームリソースロケータ―（ＵＲＬ））にメッセージを伝達してよい。
【００８３】
いくつかの実施形態において、ネットワークベースのサービスは、メッセージベースの技法よりもむしろ、Ｒｅｐｒｅｓｅｎｔａｔｉｏｎａｌ  Ｓｔａｔｅ  Ｔｒａｎｓｆｅｒ（「ＲＥＳＴｆｕｌ」）技法を使用して実行されてもよい。例えば、ＲＥＳＴｆｕｌ技法に従って実行されるネットワークベースのサービスは、ＳＯＡＰメッセージ内でカプセル化されるよりもむしろ、ＰＵＴ、ＧＥＴまたはＤＥＬＥＴＥなどのＨＴＴＰ方法内に含まれるパラメータにより呼び出されてもよい。
【００８４】
上記の実施形態はかなり詳細に説明されたが、上記開示がいったん完全に理解されると当業者に明らかになる、非常に多くの変形及び修正が成されてもよい。以下の特許請求の範囲は、全てのそのような修正及び変更を包含するものと解釈され、従って、上記の説明は、限定的な意味ではなく、説明的な意味で考えられることが意図される。
【図１】
0006539341.tif 000002
【図２】
0006539341.tif 000003
【図３】
0006539341.tif 000004
【図４】
0006539341.tif 000005
【図５】
0006539341.tif 000006
【図６】
0006539341.tif 000007
【図７】
0006539341.tif 000008
【図８】
0006539341.tif 000009
【図９】
0006539341.tif 000010
【図１０】
0006539341.tif 000011