(57)【特許請求の範囲】
【請求項１】
クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、１つ又は複数のクライアントによって実行されるエンジンを備え、
前記エンジンは、各クライアントアプリケーション識別子を前記ターゲットサーバ又はサーバサブセットにマッピングするように構成されたサービスマッピングサブシステムを含み、
前記サービスマッピングサブシステムは、最大ランダム重み（Ｈｉｇｈｅｓｔ  Ｒａｎｄｏｍ  Ｗｅｉｇｈｔ）を使用して前記クライアントアプリケーション識別子をマッピングするように構成される、
ことを特徴とするシステム。
【請求項２】
同じクライアントアプリケーション識別子を用いる２つ以上のクライアントは、同じターゲットサーバ又はサーバサブセットを選択する、
ことを特徴とする請求項１に記載のシステム。
【請求項３】
前記複数のサーバはそれぞれ、前記１つ又は複数のクライアントに結合され、１つ又は複数のサービスクラスを提供するように構成され、
前記サービスクラスは、アプリケーションサービス及びディレクトリサービスを含む、
ことを特徴とする請求項１に記載のシステム。
【請求項４】
各サーバ上の前記アプリケーションサービスは、すべてのクライアントアプリケーションからなるサブセットにのみサービスを提供する、
ことを特徴とする請求項３に記載のシステム。
【請求項５】
各サーバの前記ディレクトリサービスは、サーバからなるリストであって、
各サーバが、当該サーバがサポートする前記アプリケーションサービスにタグ付けされているリストを提供するように構成される、
ことを特徴とする請求項３に記載のシステム。
【請求項６】
前記クライアントアプリケーション識別子は大きい数を含む、
ことを特徴とする請求項１から５のいずれか１項に記載のシステム。
【請求項７】
前記クライアントアプリケーション識別子を用いて前記複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、前記１つ又は複数のクライアントのうちの第１のクライアントによって前記エンジンを実行し、
前記クライアントアプリケーション識別子を用いて前記複数のサーバの中から同じターゲットサーバ又はサーバサブセットを選択するように、前記１つ又は複数のクライアントのうちの第２のクライアントによって前記エンジンを実行する、
ことを特徴とする請求項１から６のいずれか１項に記載のシステム。
【請求項８】
クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、１つ又は複数のクライアントによってエンジンを実行するステップを含み、
前記エンジンは、各クライアントアプリケーション識別子を前記ターゲットサーバ又はサーバサブセットにマッピングするように構成されたサービスマッピングサブシステムを含み、
前記サービスマッピングサブシステムは、最大ランダム重み（Ｈｉｇｈｅｓｔ  Ｒａｎｄｏｍ  Ｗｅｉｇｈｔ）を使用して前記クライアントアプリケーション識別子をマッピングするように構成される、
ことを特徴とする方法。
【請求項９】
同じクライアントアプリケーション識別子を用いる２つ以上のクライアントは、同じターゲットサーバ又はサーバサブセットを選択する、
ことを特徴とする請求項８に記載の方法。
【請求項１０】
前記複数のサーバはそれぞれ、前記１つ又は複数のクライアントに結合され、１つ又は複数のサービスクラスを提供するように構成され、
前記サービスクラスは、アプリケーションサービス及びディレクトリサービスを含む、
ことを特徴とする請求項８に記載の方法。
【請求項１１】
各サーバ上の前記アプリケーションサービスは、すべてのクライアントアプリケーションからなるサブセットにのみサービスを提供する、
ことを特徴とする請求項１０に記載の方法。
【請求項１２】
各サーバの前記ディレクトリサービスは、サーバからなるリストであって、
各サーバが、当該サーバがサポートする前記アプリケーションサービスにタグ付けされているリストを提供するように構成される、
ことを特徴とする請求項１０に記載の方法。
【請求項１３】
前記クライアントアプリケーション識別子は大きい数を含む、
ことを特徴とする請求項８から１２のいずれか１項に記載の方法。
【請求項１４】
前記クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、１つ又は複数のクライアントによってエンジンを実行するステップは、
クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、前記１つ又は複数のクライアントのうちの第１のクライアントによってエンジンを実行するステップと、
前記クライアントアプリケーション識別子を用いて前記複数のサーバの中から前記ターゲットサーバ又はサーバサブセットを選択するように、前記１つ又は複数のクライアントのうちの第２のクライアントによって前記エンジンを実行するステップと、
を含むことを特徴とする請求項８から１３のいずれか１項に記載の方法。
【請求項１５】
コンピュータ可読命令を格納している非一時的コンピュータ可読媒体であって、前記コンピュータ可読命令は、コンピュータシステムによって実行されると、
クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、１つ又は複数のクライアントによってエンジンを実行するステップを含む方法をもたらし、
前記エンジンは、各クライアントアプリケーション識別子を前記ターゲットサーバ又はサーバサブセットにマッピングするように構成されたサービスマッピングサブシステムを含み、
前記サービスマッピングサブシステムは、最大ランダム重み（Ｈｉｇｈｅｓｔ  Ｒａｎｄｏｍ  Ｗｅｉｇｈｔ）を使用して前記クライアントアプリケーション識別子をマッピングするように構成される、
ことを特徴とする非一時的コンピュータ可読媒体。
【請求項１６】
同じクライアントアプリケーション識別子を用いる２つ以上のクライアントは、同じターゲットサーバ又はサーバサブセットを選択する、
ことを特徴とする請求項１５に記載の非一時的コンピュータ可読媒体。
【請求項１７】
前記複数のサーバはそれぞれ、前記１つ又は複数のクライアントに結合され、１つ又は複数のサービスクラスを提供するように構成され、前記サービスクラスは、アプリケーションサービス及びディレクトリサービスを含む、
ことを特徴とする請求項１５に記載の非一時的コンピュータ可読媒体。
【請求項１８】
各サーバ上の前記アプリケーションサービスは、すべてのクライアントアプリケーションからなるサブセットにのみサービスを提供する、
ことを特徴とする請求項１７に記載の非一時的コンピュータ可読媒体。
【請求項１９】
各サーバの前記ディレクトリサービスは、サーバからなるリストであって、
各サーバが、当該サーバがサポートする前記アプリケーションサービスにタグ付けされているリストを提供するように構成される、
ことを特徴とする請求項１７に記載の非一時的コンピュータ可読媒体。
【請求項２０】
前記クライアントアプリケーション識別子は大きい数を含む、
ことを特徴とする請求項１５から１９のいずれか１項に記載の非一時的コンピュータ可読媒体。
【請求項２１】
前記クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、１つ又は複数のクライアントによってエンジンを実行するステップは、
クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、前記１つ又は複数のクライアントのうちの第１のクライアントによってエンジンを実行するステップと、
前記クライアントアプリケーション識別子を用いて前記複数のサーバの中から前記ターゲットサーバ又はサーバサブセットを選択するように、前記１つ又は複数のクライアントのうちの第２のクライアントによって前記エンジンを実行するステップと、
を含むことを特徴とする請求項１５から２０のいずれか１項に記載の非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概して、サーバフェイルオーバー及び／又はロードバランシングに使用する、システム、方法、及び／又は媒体に関する。より具体的には、本開示は、クライアントを用いたサーバフェイルオーバー及び／又はロードバランシングに使用する、システム、方法、及び／又は媒体に関する。
【背景技術】
【０００２】
関連出願の相互参照
本願は、米国特許法第１１９条（ｅ）に基づき、２０１５年５月２６日に出願された米国仮特許出願第６２／１７９，９６９号の利益を主張するものであり、この出願の全体を参照によって本願に援用し、その一部とする。
【０００３】
クライアントにサービスを提供するバックエンドサーバは、常時利用可能である必要がある。特定のサーバに障害が発生した場合には、クライアントを１つ又は複数の代替サーバにルーティングするための仕組みがあることが必要である。例えば、ウェブサービスでは、通常、フロントエンドロードバランサ又はルータを利用し、これらのバランサ又はルータが、機能しているサーバに要求を送信する。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
このロードバランサ又はルータは、高速ではあるが、それら自身が重大な単一障害点であり、追加のコストをもたらす。代替的に、新しいサーバをインスタンス化し、そのサービスのＤＮＳ（ドメインネームシステム）エントリを変更して、その新しいサーバを指すようにすることもできる。ただし、新しいＤＮＳエントリを広めるには著しい遅れが生じる。
【課題を解決するための手段】
【０００５】
記載された仕組みにおいて、要求のルーティング及びポインタの変更は、クライアントの関与なしにバックエンド側で（例えば、サーバ自身上で）で実行される。
【０００６】
サーバフェイルオーバー及び／又はロードバランシングにおいてクライアントを関与させること及び／又は他の方法でクライアントを利用することが可能であることが判明した。
【０００７】
いくつかの実施形態では、本システム（及び／又は方法及び／又は媒体）は、ロードバランシング、サーバフェイルオーバー、スケーリング、データの局所化及び／又は冗長性を提供し得る。本システム（及び／又は方法及び／又は媒体）は、ランダムクライアントアプリケーション識別子（ＣＡＩ）に基づいて、すべてのサーバにわたってターゲットサーバを均等に選択することによってロードバランシングを達成することができる。本システム（及び／又は方法及び／又は媒体）は、適切な代替サーバを選択することによってフェイルオーバーを提供することができる。本システム（及び／又は方法及び／又は媒体）は、新しいサーバを追加し、この新しい追加についてディレクトリサービスに通知することにより、システム容量を拡張することによってスケーラビリティを達成することができる。本システム（及び／又は方法及び／又は媒体）は、データ複製を、ＣＡＩ別に最大ランダム重み（Ｈｉｇｈｅｓｔ  Ｒａｎｄｏｍ  Ｗｅｉｇｈｔ）（ＨＲＷ）でソートされたリストの最初のＮ個のサーバに限定することによって、データの局所化及び冗長性を提供することができる。本システム（及び／又は方法及び／又は媒体）は、上記の特徴を提供することができるので、２つ以上のクライアントが同じＣＡＩに同意した場合、これらのクライアントは、常に同じサーバ又は同じサーバサブセットを選択することになる。本システム（及び／又は方法及び／又は媒体）は、サーバ側に集中化したサービス、ボトルネック、及び／又は単一障害点なしに、これらの利益を提供することができる。ロードバランサ、第三者のディレクトリ関与（例えば、ＤＮＳ）、又はシステム全体のデータ複製の必要はない。
【０００８】
いくつかの実施形態では、本システムは、クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、１つ又は複数のクライアントによって実行されるエンジンを備える。いくつかの実施形態では、同じクライアントアプリケーション識別子を用いる２つ以上のクライアントは、同じターゲットサーバ又はサーバサブセットを選択する。いくつかの実施形態では、複数のサーバはそれぞれ、１つ又は複数のクライアントと結合され、１つ又は複数のサービスクラスを提供するように構成され、このサービスクラスは、アプリケーションサービス及びディレクトリサービスを含む。いくつかの実施形態では、各サーバ上のアプリケーションサービスは、すべてのクライアントアプリケーションからなるサブセットにのみサービスを提供する。いくつかの実施形態では、各サーバのディレクトリサービスは、サーバからなるリストであって、各サーバが、当該サーバがサポートするアプリケーションサービスにタグ付けされているリストを提供するように構成される。いくつかの実施形態では、エンジンは、各クライアントアプリケーション識別子をターゲットサーバ又はサーバサブセットにマッピングするように構成されたサービスマッピングサブシステムを含む。いくつかの実施形態では、サービスマッピングサブシステムは、最大ランダム重みを使用してこのクライアントアプリケーション識別子をマッピングするように構成される。いくつかの実施形態では、クライアントアプリケーション識別子は大きな数である。いくつかの実施形態では、クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、１つ又は複数のクライアントのうちの第１のクライアントによってエンジンが実行され、クライアントアプリケーション識別子を用いて複数のサーバの中から同じターゲットサーバ又はサーバサブセットを選択するように、１つ又は複数のクライアントのうちの第２のクライアントによってエンジンが実行される。いくつかの実施形態では、クライアントアプリケーション識別子は大きな数である。いくつかの実施形態では、大きな数は、少なくとも１２８ビットである。いくつかの実施形態では、大きな数は、少なくとも５１２ビットである。
【０００９】
いくつかの実施形態では、本システムは、ネットワークを通じて１つ又は複数のクライアントと電子通信する（又は（任意のタイプの通信リンクを介して）他の方法で結合された）コンピュータシステムを備え、このコンピュータシステムは、複数のサーバと、１つ又は複数のクライアントに格納され且つ／又は実行されるエンジンとを含み、このエンジンは、１つ又は複数のクライアントアプリケーションがクライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバを選択することを可能にするように構成される。いくつかの実施形態では、クライアントアプリケーション識別子は大きな数である。いくつかの実施形態では、大きな数は、少なくとも１２８ビットである。いくつかの実施形態では、大きな数は、少なくとも５１２ビットである。
【００１０】
いくつかの実施形態では、本方法は、複数のサーバのサーバアイデンティティを有するディレクトリリストを電子的に（又は他の方法で）受信し、クライアントアプリケーション識別子を用いてアプリケーション別ディレクトリリストを電子的に（又は他の方法で）受信して、所望のアプリケーションを有するサーバを識別するステップと、クライアントに格納され且つ／又はクライアントによって実行されるエンジンによって、アプリケーション別ディレクトリリストに、最大ランダム重みを適用して、所望のアプリケーションを提供するサーバからなる、クライアントアプリケーション識別子別ソート済みリストを電子的に（又は他の方法で）生成するステップと、クライアントアプリケーション識別子別ソート済みサーバリストの先頭から開始してそのリストを下がっていくことによって、クライアントがそのリストからのサーバに電子的に（又は別の方法で）コンタクトを試みるステップとを含む。いくつかの実施形態では、クライアントアプリケーション識別子は大きな数である。いくつかの実施形態では、ソート済みリストは、サーバのうちの少なくとも１つの機能しているサーバにコンタクトが取れるまでサーバにコンタクトを試みる順序を定義する任意のタイプの情報を、任意の形式で含むことができる。いくつかの実施形態では、大きな数は、少なくとも１２８ビットである。いくつかの実施形態では、大きな数は、少なくとも５１２ビットである。
【００１１】
いくつかの実施形態では、本方法は、クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、１つ又は複数のクライアントによってエンジンを実行するステップを含む。いくつかの実施形態では、同じクライアントアプリケーション識別子を用いる２つ以上のクライアントは、同じターゲットサーバ又はサーバサブセットを選択する。いくつかの実施形態では、複数のサーバはそれぞれ、１つ又は複数のクライアントと結合され、１つ又は複数のサービスクラスを提供するように構成され、このサービスクラスは、アプリケーションサービス及びディレクトリサービスを含む。いくつかの実施形態では、各サーバ上のアプリケーションサービスは、すべてのクライアントアプリケーションからなるサブセットにのみサービスを提供する。いくつかの実施形態では、各サーバのディレクトリサービスは、サーバからなるリストであって、各サーバが、当該サーバがサポートするアプリケーションサービスにタグ付けされているリストを提供するように構成される。いくつかの実施形態では、エンジンは、各クライアントアプリケーション識別子をターゲットサーバ又はサーバサブセットにマッピングするように構成されたサービスマッピングサブシステムを含む。いくつかの実施形態では、サービスマッピングサブシステムは、最大ランダム重みを使用してこのクライアントアプリケーション識別子をマッピングするように構成される。いくつかの実施形態では、クライアントアプリケーション識別子は大きな数である。いくつかの実施形態では、クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、エンジンを実行するステップは、クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、１つ又は複数のクライアントのうちの第１のクライアントによってエンジンを実行するステップと、クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、１つ又は複数のクライアントのうちの第２のクライアントによってエンジンを実行するステップとを含む。いくつかの実施形態では、クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するようにエンジンを実行するステップは、クライアントによって実行されたエンジンが、所望のアプリケーションを提供するサーバのアイデンティティを示す情報を受信するステップと、クライアントによって実行されたエンジンが、所望のアプリケーションを提供するサーバからなる、クライアントアプリケーション識別子別ソート済みリストを、この情報及びクライアントアプリケーション識別子に少なくとも部分的に基づいて生成するステップとを含む。いくつかの実施形態では、ソート済みリストは、サーバのうちの少なくとも１つの機能しているサーバにコンタクトが取れるまでサーバにコンタクトを試みる順序を定義する任意のタイプの情報を、任意の形式で含むことができる。いくつかの実施形態では、大きな数は、少なくとも１２８ビットである。いくつかの実施形態では、大きな数は、少なくとも５１２ビットである。
【００１２】
いくつかの実施形態では、非一時的コンピュータ可読媒体がコンピュータ可読命令を格納し、このコンピュータ可読命令は、コンピュータシステムによって実行されると、クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、１つ又は複数のクライアントによってエンジンを実行するステップを含む方法をもたらす。いくつかの実施形態では、同じクライアントアプリケーション識別子を用いる２つ以上のクライアントは、同じターゲットサーバ又はサーバサブセットを選択する。いくつかの実施形態では、複数のサーバはそれぞれ、１つ又は複数のクライアントと結合され、１つ又は複数のサービスクラスを提供するように構成され、このサービスクラスは、アプリケーションサービス及びディレクトリサービスを含む。いくつかの実施形態では、各サーバ上のアプリケーションサービスは、すべてのクライアントアプリケーションからなるサブセットにのみサービスを提供する。いくつかの実施形態では、各サーバのディレクトリサービスは、サーバからなるリストであって、各サーバが、当該サーバがサポートするアプリケーションサービスにタグ付けされているリストを提供するように構成される。いくつかの実施形態では、エンジンは、各クライアントアプリケーション識別子をターゲットサーバ又はサーバサブセットにマッピングするように構成されたサービスマッピングサブシステムを含む。いくつかの実施形態では、サービスマッピングサブシステムは、最大ランダム重みを使用してこのクライアントアプリケーション識別子をマッピングするように構成される。いくつかの実施形態では、クライアントアプリケーション識別子は大きな数である。いくつかの実施形態では、クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するようにエンジンを実行するステップは、クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、１つ又は複数のクライアントのうちの第１のクライアントによってエンジンを実行するステップと、クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、１つ又は複数のクライアントのうちの第２のクライアントによってエンジンを実行するステップとを含む。いくつかの実施形態では、クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するようにエンジンを実行するステップは、クライアントによって実行されたエンジンが、所望のアプリケーションを提供するサーバのアイデンティティを示す情報を受信するステップと、クライアントによって実行されたエンジンが、所望のアプリケーションを提供するサーバからなる、クライアントアプリケーション識別子別ソート済みリストを、この情報及びクライアントアプリケーション識別子に少なくとも部分的に基づいて生成するステップとを含む。いくつかの実施形態では、ソート済みリストは、サーバのうちの少なくとも１つの機能しているサーバにコンタクトが取れるまでサーバにコンタクトを試みる順序を定義する任意のタイプの情報を、任意の形式で含むことができる。いくつかの実施形態では、大きな数は、少なくとも１２８ビットである。いくつかの実施形態では、大きな数は、少なくとも５１２ビットである。
【図面の簡単な説明】
【００１３】
本開示の前述の特徴は、以下の詳細な説明を添付の図面に関連して読むことにより明らかになるであろう。
【００１４】
【図１】いくつかの実施形態による、サーバフェイルオーバー及びロードバランシングシステムを示す図である。
【図２】いくつかの実施形態による、フェイルオーバー及びロードバランシングエンジンのサブシステムを示す図である。
【図３】いくつかの実施形態による、サーバと通信するクライアントを示す図である。
【図４】いくつかの実施形態による、プロセスのフローチャートである。
【図５】いくつかの実施形態による、アーキテクチャを示す図である。
【図６】いくつかの実施形態による、リスト（又は他の定義）の図表示である。
【図７】いくつかの実施形態による、リスト（又は他の定義）の図表示である。
【図８】いくつかの実施形態による、リスト（又は他の定義）の図表示である。
【図９】いくつかの実施形態による、ハッシュ後且つソート前のリスト（又は他の定義）の図表示である。
【図１０】いくつかの実施形態による、リスト（又は他の定義）の図表示である。
【図１１】いくつかの実施形態による、ハッシュ後且つソート前のリスト（又は他の定義）の図表示である。
【図１２】いくつかの実施形態による、リスト（又は他の定義）の図表示である。
【図１３】いくつかの実施形態による、プロセスのフローチャートである。
【発明を実施するための形態】
【００１５】
本開示は、概して、サーバフェイルオーバー及び／又はロードバランシングのためのシステム及び方法に関する。より具体的には、本開示では、サーバよりも多数のクライアントを利用して、サーバフェイルオーバー及び／又はロードバランシング及び／又は他のタスクに対処する。したがって、サーバシステムはクライアントに対して中断のないサービスを提供する責任を負わないため、サーバシステムは単純化される。その代わりに、各クライアントが、機能しているサーバを見つけ出すことを担当する。同時に、本サーバ選択方法では、選択されたサーバ上でクライアント別情報が利用可能になることが保証される。
【００１６】
図１は、いくつかの実施形態による、サーバフェイルオーバー及びロードバランシングシステム１０を示す図である。
【００１７】
図１を参照すると、いくつかの実施形態によれば、サーバフェイルオーバー及びロードバランシングシステム１０は、複数のサーバ１２（例えば、サーバ１２ａ〜１２ｎ）と、１つ又は複数のクライアント２２（例えば、クライアント２６ａ〜２６ｃ）とを備える。１つ又は複数のクライアント２２（例えば、クライアント２６ａ〜２６ｃ）はそれぞれ、サーバフェイルオーバー及びロードバランシングエンジン（例えば、それぞれ、サーバフェイルオーバーエンジン及びロードバランシングエンジン１６ａ〜１６ｃ）を含むことができる。複数のサーバ１２はそれぞれ、任意の適切なオペレーティングシステム（例えば、マイクロソフト社のＷＩｎｄｏｗｓ（登録商標）、Ｌｉｎｕｘ（登録商標）など）を実行する任意の適切なタイプのコンピュータサーバ（例えば、ＩＮＴＥＬマイクロプロセッサ、複数のプロセッサ、複数の処理コアなどを有するサーバ）とすることができる。複数のサーバ１２（例えば、サーバ１２ａ〜１２ｎ）のうちの１つ又は複数は、そのサーバ内に格納されるか、又はそのサーバに動作上接続されたデータベース（例えば、それぞれデータベース１４ａ〜１４ｎ）を含むことができる。各データベースは、そのサーバ上に格納されるか、又はそこから外部に（例えば、サーバフェイルオーバー及びロードバランシングシステム１０と通信状態にある別個のデータベースサーバ内に）配置されてもよい。以下でさらに説明するように、複数のサーバ１２のうちの１つ又は複数もまた、サーバフェイルオーバー及びロードバランシングエンジン１６ａ〜１６ｃと同一且つ／又は類似であり得るサーバフェイルオーバー及びロードバランシングエンジン（図示せず）を含むことができる。複数のサーバ１２はそれぞれ、１つ又は複数のクライアント２２のうちの１つ又は複数とネットワーク２０を介して（且つ／又は他の任意のタイプの通信リンクを介して）通信することができるように、遠隔アクセス可能である。１つ又は複数のクライアント２２はそれぞれ、任意のタイプのクライアントデバイス（例えば、パーソナルコンピュータシステム２６ａ、スマートセルラー電話機２６ｂ、タブレットコンピュータ２６ｃ、及び／又は他の電子デバイス）を含み得る。ネットワーク通信は、当業者には理解されるように、プライベートネットワーク接続（広域ネットワーク（ＷＡＮ）接続、電子メール、電子データ交換（ＥＤＩ）メッセージ、拡張マークアップ言語（ＸＭＬ）メッセージ、ファイル転送プロトコル（ＦＴＰ）ファイル転送など）を介した、標準的なＴＣＰ／ＩＰ通信プロトコル（例えば、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、セキュアＨＴＴＰ（ＨＴＴＰＳ）、ファイル転送プロトコル（ＦＴＰ）、電子データ交換（ＥＤＩ）など）か、又は他の適切な有線もしくは無線の電子（もしくはその他の）通信フォーマット及びシステムを用いて、インターネット上に存在してもよい。
【００１８】
見てとれるように、システム１０は、すべての単一障害点が取り除かれた分散システムである。
【００１９】
いくつかの実施形態によれば、システム１０は、２つの基本サービスクラス、すなわち、ディレクトリサービス及びアプリケーションサービスでサービスを提供する。システム１０内の複数のサーバ１２（本明細書ではノードと呼ばれることもある）はそれぞれ、そのようなサービスクラス（すなわち、ディレクトリサービス及びアプリケーションサービス）の一方又は両方でサービスを提供することができる。いくつかの実施形態では、アプリケーションサービスは、リアルタイム通信サービス（例えば、２つ以上のクライアント間のリアルタイム通信セッション）及び／又はストレージサービス（例えば、１つ又は複数のクライアントによる読み出し／書き込みストレージの使用）を含む。
【００２０】
いくつかの実施形態では、すべてのノード上のすべてのディレクトリサービスは、システム全体についてのサービス情報を含む。逆に、特定のノード上の（例えば、クライアントアプリケーション識別子サブシステム３０によって使用される）アプリケーションサービスは、すべてのクライアントのうちの一部だけにサービスを提供するので、すべてのクライアントに関する情報をすべてのアプリケーションノードに配布する必要はない。これにより、システム効率への悪影響が低減される。サーバサブセット上にクライアント情報を局所化することにより、ネットワーク及びストレージのパフォーマンスが大幅に改善され、（例えば、サーバをシステムに追加するだけで）線形容量スケーリングが可能になる。
【００２１】
ディレクトリサービス（例えば、情報ディレクトリサービス）は、既知のサーバのリストを提供し、このリストでは、各サーバは、当該サーバがサポートするすべてのアプリケーションサービスとタグ付けされるか又は関連付けられている。いくつかの実施形態では、このリストは、サーバが「オンライン」になり、且つ／又は他の方法で利用可能になると、以下のように生成されることができる。最初に、第１のサーバが「オンライン」になり、且つ／又は別の方法で利用可能になる。その後、第２のサーバが「オンライン」になり、且つ／又は別の方法で利用可能になり、第１のサーバのＩＰアドレスが付与される。第２のサーバは、その後、第１のサーバに対して、システム１０内にあり、第１のサーバにとって既知であるすべてのサーバのリスト（又は他の定義）の要求を送信する。第２のサーバは、第１のサーバからの応答を受信した後、このリスト（又は他の定義）上の各追加サーバに対して、システム１０内にあり、これらの追加のサーバにとって既知であるすべてのサーバのリスト（又は他の定義）の要求を送信する。第１のサーバからのリストは、最初は、第１のサーバのみで構成され得る。したがって、第２のサーバが追加の要求を全く送信しないこともあり得る。しかし、このプロセスは、各追加サーバが「オンライン」且つ／又は他の方法で利用可能になるときに繰り返され、したがって各追加サーバはシステム１０内のサーバのうちの少なくともいくつかからなるリスト（又は他の定義）を取得する。各サーバもまた、当該サーバにとって既知であるサーバからなるリスト（又は他の定義）を一斉送信してもよく、この場合、システム内の各サーバは、最終的にシステム１０内の各サーバからなるリスト（又は他の定義）を有することになる。いくつかの実施形態では、リスト（又は他の定義）は、そのリスト上の各サーバの能力（例えば、アプリケーションサービス）を示すこともできる。
【００２２】
システム１０内にあり、１つ又は複数のクライアントコンピュータシステムが利用することができるサーバのリスト（又は他の定義）を取得するために、１つ又は複数のクライアントコンピュータシステムによってサーバのディレクトリサービスが使用されてもよい。いくつかの実施形態では、クライアントは、サーバに対してこのようなリスト（又は他の定義）の要求を送信することができる。その後、クライアントは、システム１０内にあり、このクライアントが利用することができるサーバのリスト（又は他の定義）を伴う応答を受信することができる。いくつかの実施形態では、クライアントは、システム１０内の任意のサーバに要求を送信することができる。いくつかの他の実施形態では、クライアントは、１つ又は複数の指定サーバ（例えば、集中ディレクトリサービス）に要求を送信することが必要となり得る。クライアントは、ディレクトリサーバに照会することによって（例えば、リアルタイム、数時間又は数日ごとなどに）この情報をときどき再読込することができる。
【００２３】
図６は、いくつかの実施形態による、１つ又は複数のクライアント２２のうちの１つによって受信される可能性のあるリスト（又は他の定義）の図表示である。
【００２４】
図６を参照すると、リスト（又は他の定義）が、エントリ６０２〜６２８などの複数のエントリを有するテーブル６００の形式で示されており、システム１０内にあり、リストを要求したクライアントが利用することができるすべてのサーバ１２が示されている。図示の実施形態では、各エントリは、このクライアントが利用することができる複数のサーバ１２のうちの特定の１つに関連付けられており、（ｉ）エントリに関連付けられたサーバのＩＰアドレス又は他の識別子、及び（ｉｉ）このサーバの１つ又は複数の能力（例えば、アプリケーションサービス）を示している。
【００２５】
例えば、第１のエントリ６０２は、クライアントが利用することができる第１のサーバに関連付けられたＩＰアドレス１などのＩＰアドレスを示している。第１のエントリ６０２は、さらに、リアルタイム通信などのこの第１のサーバの能力を示している。第３のエントリ６０６は、クライアントが利用することができる第３のサーバに関連付けられたＩＰアドレス３などのＩＰアドレスを示し、さらに、リアルタイム通信及びストレージなどのこの第３のサーバの能力を示している。第９のエントリ６１８は、クライアントが利用することができる第９のサーバに関連付けられたＩＰアドレス９などのＩＰアドレスを示し、さらに、ストレージなどのこの第９のサーバの能力を示している。いくつかの実施形態では、各ＩＰアドレスは３２ビットのＩＰアドレスとすることができる。
【００２６】
いくつかの実施形態では、クライアントは、サーバ能力（例えば、アプリケーションサービス）のタイプごとに個別のリストを受信及び／又は生成することができる。
【００２７】
図７は、クライアントが利用することができ、リアルタイム通信の能力を有するサーバ１２のリスト（テーブル７００の形式で示される）の図表示である。
【００２８】
図８は、クライアントが利用することができ、ストレージの能力を有するサーバ１２のリスト（テーブル８００の形式で示される）の図表示である。
【００２９】
図２は、いくつかの実施形態による、サーバフェイルオーバー及びロードバランシングエンジン１６ａ〜１６ｃなどのサーバフェイルオーバー及びロードバランシングエンジンのうちの１つのサブシステムを示す図である。
【００３０】
図２を参照すると、いくつかの実施形態によれば、サーバフェイルオーバー及びロードバランシングエンジン１６ａ〜１６ｃなどの各サーバフェイルオーバー及びロードバランシングエンジンは、ＣＡＩサブシステム３０及びサービスマッピングサブシステム３２を含むことができる。
【００３１】
ＣＡＩサブシステム３０は、クライアント情報のフェイルオーバー、スケーリング、及び／又は局所性を促進する。ＣＡＩサブシステム３０は、クライアントアプリケーション識別子（ＣＡＩ）を、特定のクライアント又は特定のクライアントのグループの特定のアプリケーションに関連付ける。例えば、ＣＡＩサブシステム３０は、２つ以上のクライアント間のリアルタイム通信セッション、１つ又は複数のクライアントによる読み出し／書き込みストレージの使用、１つのクライアントから１つのクライアントグループへのオーディオ／ビデオコンテンツのストリーミング、クライアントグループにサービスを提供するアプリケーション（例えば、給与計算）などを含むことができる。ＣＡＩサブシステム３０は、特定のクライアントセットにサービスを提供するために使用されるサーバシステムのパーティションを定義する。これにより、データ及び通信がシステム全体うちの当該サブセットに限定され、スケーリングが可能になる。冗長性要件は、そのパーティション内の特定のケース（例えば、サブセット）ごとに定義される。ステート（例えば、データ）保持が含まれる場合、冗長係数（例えば、２以上）によってそのサブセット内での複製及びサブセットサイズが決定される。リアルタイムコンポーネント（例えば、リアルタイム通信用又はライブビデオストリーミング用）のみが存在する場合には、システム全体が関与することができるため、冗長係数は、システム全体のサーバ数に等しい。これらすべての場合で、同じＣＡＩに同意した２つ以上のクライアントは、常に同じサーバ又は同じサーバサブセットを選択することになる。ＣＡＩの１つの可能な実施形態は、大きい数（例えば、１２８ビット、５１２ビット、又はそれ以上のビット）であり、部外者から秘密に保たれる。この数は、（例えば、部内者によるランダムな選択によって）自己割り当てされ、利用することができる可能な数の多さに起因するすべての衝突を実質的に排除することができる。他の実施形態もまた想定される（例えば、集中化又は半集中化割り当て）。当業者であれば、任意の適切な割り当てシステム、方法又はプロトコルが使用できることを理解されたい。
【００３２】
サービスマッピングサブシステム３２は、本システムの適切な機能のために、各ＣＡＩを特定のサーバ又はサーバサブセットにマッピングする。同じＣＡＩに同意した２つ以上のクライアントは、常に同じサーバ又は同じサーバサブセットを選択することになる。このマッピングは、リアルタイムディレクトリサービスがない場合に機能する。本システムの最新のディレクトリマップ以外には、他の外部情報は必要ない。本システムで使用できる１つの可能なマッピング方法は、最大ランダム重み（ＨＲＷ）法である。例えば、その全体が参照により本明細書に組み込まれる、ｈｔｔｐｓ：／／ｅｎ．ｗｉｋｉｐｅｄｉａ．ｏｒｇ／ｗｉｋｉ／Ｒｅｎｄｅｚｖｏｕｓ＿ｈａｓｈｉｎｇを参照されたい。
【００３３】
図３は、いくつかの実施形態による、サーバＩＰアドレス１３６のリストを用いて複数のサーバ１２のうちの１つと通信する１つ又は複数のクライアント２２のうちの１つを示す図である。
【００３４】
図３を参照すると、いくつかの実施形態によれば、システム１０は、クライアントが利用することができるサーバのディレクトリリスト（ＩＰアドレスによって表されるサーバアイデンティティを有する）を生成及び／又は提供することができる。クライアント２２のサーバフェイルオーバー及びロードバランシングエンジンは、ＣＡＩと、このクライアントが利用することができる、所望のアプリケーション（例えば、リアルタイム通信及び／又は他の機能）を提供するサーバのＩＰアドレスとを組み合わせ、この組み合わせからなるリストに対してＨＲＷ法を実行して、所望のアプリケーション（例えば、リアルタイム通信及び／又は他の機能）を提供するサーバからなる、ＣＡＩ別ソート済みリスト１３６を生成することができる。換言すれば、エンジンは、ＨＲＷ（ＣＡＩ、ＩＰ）でリストをソートすることができる。
【００３５】
クライアント２２は、ＣＡＩ別ソート済みサーバリスト１３６の先頭から開始することにより、そのリストからサーバ（例えば、サーバ１２ａ）を選択することができ、リストの先頭にあるサーバが利用できない場合には、次のＮ−１サーバ１２ｂ〜１２ｎを続けて試行することができ、Ｎは冗長係数である。最終的に、クライアント１３４は、利用可能なサーバ（例えば、サーバ１２ｄ）を選択し、そのサーバ（例えば、サーバ１２ｄ）との接続を確立する。
【００３６】
例えば、２つのクライアントがそれらの間に「通信アプリケーション」を介した通信リンクを確立することを希望する場合、これらのクライアントは、あるＣＡＩに同意して上記ＨＲＷアルゴリズムを実行する。両クライアントのディレクトリマップが同一であるため、これらのクライアントはそれぞれ、同じソート済みリストを示し、そのリストから同じ動作中のサーバを選択することになる。この場合はステートが存在しないので、この「通信アプリケーション」を提供するすべてのサーバがリスト上に存在することが可能であり、高い冗長性が提供される。
【００３７】
図９は、いくつかの実施形態による、ハッシュ後且つソート前のリスト（又は他の定義）の図表示である。
【００３８】
図９を参照すると、リスト（又は他の定義）が、エントリ９０２〜９１６などの複数のエントリを有するテーブル９００の形式で示されている。図示の実施形態では、各エントリは、複数のサーバ１２のうちの特定の１つに関連付けられており、（ｉ）エントリに関連付けられたサーバのＩＰアドレス又は他の識別子と、ＣＡＩとサーバのＩＰアドレスとの組み合わせ（例えば、ＩＰアドレスとＣＡＩの連結）と、（ｉｉｉ）ＣＡＩとサーバのＩＰアドレスとの組み合わせをハッシュした結果得られたハッシュアウト値とを示している。
【００３９】
例えば、第１のエントリ９０２は、ＩＰアドレス１などの第１のサーバに関連付けられたＩＰアドレスと、このＩＰアドレスとＣＡＩとの組み合わせ（例えば、ＩＰアドレス１とＣＡＩ）と、この組み合わせをハッシュした結果得られたハッシュアウト１などのハッシュアウト値とを含む。いくつかの実施形態では、各ＩＰアドレスは３２ビットのＩＰアドレスであり、ＣＡＩは１２８ビットであり、ＩＰアドレスとＣＡＩとの組み合わせは１６０ビットである。いくつかの実施形態では、この同意済みＣＡＩは、電話番号を表す１２８ビットの識別子である。
【００４０】
図１０は、いくつかの実施形態による、テーブル９００のハッシュアウト値に基づいてソートした後の、テーブル９００に示されたＩＰアドレスのリスト（又は他の定義）の図表示である。
【００４１】
図１０を参照すると、ソート済みリスト（又は他の定義）が、エントリ１００２〜１０１６などの複数のエントリを有するテーブル１０００の形式で示されている。説明のために、テーブル９００内のハッシュアウト値が、以下の降順（最大から最小）のハッシュアウト値、すなわち、ハッシュアウト７、ハッシュアウト３、ハッシュアウト１、ハッシュアウト２、ハッシュアウト６、ハッシュアウト５、ハッシュアウト４、ハッシュアウト８を定義すると仮定した。
【００４２】
上述したように、ソート済みリストは上記の形態に限定されない。いくつかの実施形態によれば、ソート済みリストは、サーバのうちの少なくとも１つの機能しているサーバにコンタクトが取れるまでサーバにコンタクトを試みる順序を定義する任意のタイプの情報を、任意の形式で含むことができる。
【００４３】
上記の通信例は、１つの非限定的な例に過ぎず、当業者には理解されるように、他の多くの応用が可能である。
【００４４】
別の例では、同じ事業に属するクライアントのグループが、給与計算にアクセスすることを望んでいる。すべてのクライアントは、あるＣＡＩに同意済みであり、この（例えば、ＣＡＩによって定義された）グループに関する給与計算データにアクセスを有する、機能しているサーバを選択する。この場合のアプリケーションサービスは、ステート（例えば、給与情報）と、係数Ｎ（通常、１より大きい）の冗長性要件とを有する。これを達成するために、いくつかの実施形態では、各給与アプリケーションサービス（及び／又は機能しているサーバの他の部分）が、特定のクライアントからの要求／セッションを受信するときにＣＡＩも受信して、自身のＨＲＷソート済みリストを計算する。次に、リスト上の最初のＮ個のサーバ（例えば、その１つがそのサーバ自身である）を見つけ出し、このＣＡＩについてのすべての給与情報をリスト上の他のＮ−１サーバに複製する。いくつかの実施形態では、機能しているサーバが、要求クライアントからＨＲＷソート済みリスト（又はその一部）を受信し、自身ではＨＲＷソートリストを生成しない。いくつかの実施形態では、機能しているサーバは、情報をリスト上の他のＮ−１サーバに複製しない。後者の実施形態では、要求クライアントが情報を他のＮ−１サーバに複製することができる。
【００４５】
図１１は、いくつかの実施形態による、ハッシュ後且つソート前のリスト（又は他の定義）の図表示である。
【００４６】
図１１を参照すると、リスト（又は他の定義）が、エントリ１１０２〜１１１６などの複数のエントリを有するテーブル１１００の形式で示されている。図示の実施形態では、各エントリは、複数のサーバ１２のうちの特定の１つに関連付けられており、（ｉ）エントリに関連付けられたサーバのＩＰアドレス又は他の識別子と、ＣＡＩとサーバのＩＰアドレスとの組み合わせ（例えば、ＩＰアドレスとＣＡＩの連結）と、（ｉｉｉ）ＣＡＩとサーバのＩＰアドレスとの組み合わせをハッシュした結果得られたハッシュアウト値とを示している。
【００４７】
例えば、第１のエントリ１１０２は、ＩＰアドレス３などの第３のサーバに関連付けられたＩＰアドレスと、このＩＰアドレスとＣＡＩとの組み合わせ（例えば、ＩＰアドレス３とＣＡＩ）と、この組み合わせをハッシュした結果得られたハッシュアウト３などのハッシュアウト値とを含む。いくつかの実施形態では、各ＩＰアドレスは３２ビットのＩＰアドレスであり、ＣＡＩは１０４ビットであり、ＩＰアドレスとＣＡＩとの組み合わせは１３６ビットである。
【００４８】
図１２は、いくつかの実施形態による、テーブル１１００のハッシュアウト値に基づいてソートした後の、テーブル１１００に示されたＩＰアドレスのリスト（又は他の定義）の図表示である。
【００４９】
図１２を参照すると、ソート済みリスト（又は他の定義）が、エントリ１２０２〜１２１６などの複数のエントリを有するテーブル１２００の形式で示されている。説明のために、テーブル１１００内のハッシュアウト値が、以下の降順（最大から最小）のハッシュアウト値、すなわち、ハッシュアウト７、ハッシュアウト３、ハッシュアウト９、ハッシュアウト１０、ハッシュアウト６、ハッシュアウト５、ハッシュアウト４、ハッシュアウト８を定義すると仮定した。
【００５０】
いくつかの実施形態では、クライアントは選択されたサーバに対してその選択されたサーバ内にある（任意のサイズの）レコードを識別するための情報を送信し、（データを格納している場合には）このレコードにデータを格納し、且つ／又は（データを取得している場合には）このレコードからデータを取得する。いくつかの実施形態では、この情報は１２８ビットである。いくつかの実施形態では、この情報は、選択されたサーバ内のパーティションを識別するためのキーとして選択されたサーバが使用することができるＣＡＩと、識別されたパーティション内のレコードを識別するレコード番号とを含むことができる。いくつかの実施形態では、パーティションを識別するために使用されるＣＡＩは１０４ビットをとすることができ、そのストレージパーティション内のレコードを識別するために使用されるレコード番号は２４ビットとすることができる。
【００５１】
上述したように、ソート済みリストは上記の形態に限定されない。いくつかの実施形態によれば、ソート済みリストは、サーバのうちの少なくとも１つの機能しているサーバにコンタクトが取れるまでサーバにコンタクトを試みる順序を定義する任意のタイプの情報を、任意の形式で含むことができる。
【００５２】
上記のストレージ例は１つの非限定的な例に過ぎず、当業者には理解されるように、他の多くの応用が可能である。
【００５３】
図４は、いくつかの実施形態による、プロセス１５０のフローチャートである。ステップ１５２において、システム１０は、ＩＰアドレスによって表されるサーバアイデンティティを有するディレクトリリストを電子的に（又は他の方法で）生成する。ステップ１５４において、このシステムは、クライアントアプリケーション識別子を用いてアプリケーション別ディレクトリリストを電子的に（又は他の方法で）生成して、所望のアプリケーションを有するサーバを識別する。ステップ１５６において、クライアントは、アプリケーション別ディレクトリリストにＨＲＷ法を電子的に（又は他の方法で）適用して、所望のアプリケーションを提供するサーバからなる、ＣＡＩ別ソート済みリストを電子的に（又は他の方法で）生成する。ステップ１５８において、１つ又は複数のクライアントが、ＣＡＩ別ソート済みサーバリストにリストされた第１のサーバにコンタクトを試みる。ステップ１６０において、その選択されたサーバからの回答を受信したかの判定を行う。受信していない場合、ステップ１６２において、ＣＡＩ別ソート済みサーバリストにリストされた次のサーバにコンタクトを試みる。受信した場合、ステップ１６４において、１つ又は複数のクライアントと選択されたサーバとの間で電気通信又はデータ通信を確立する。
【００５４】
図１３は、いくつかの実施形態による、プロセス１３００のフロー図である。
【００５５】
いくつかの実施形態によれば、この方法は、サーバフェイルオーバー及び／又はロードバランシングにおいて使用することができる。
【００５６】
方法１３００は、フロー図に示された順序に限定されない。それどころか、方法１３００の実施形態は、実行可能な任意の順序で実行することができる。それに関して、別段の記載のない限り、本明細書に開示される任意の方法は、実行可能な任意の順序で実行することができる。
【００５７】
別段の記載のない限り、方法１３００（及び／又は本明細書に開示される任意の他の方法）は、任意のやり方で実行することができる。いくつかの実施形態では、この方法（及び／又は本明細書に開示される任意の他の方法）又はその１つ又は複数の部分は、システム１０の１つ又は複数の部分及び／又は任意の他の処理システムによって実行することができる。
【００５８】
いくつかの実施形態では、非一時的コンピュータ可読媒体は、命令を格納することができ、この命令は、機械によって実行されると、方法１３００（及び／又は本明細書に開示される任意の他の方法）又はその１つ又は複数の部分を実行することになる。
【００５９】
図１３を参照すると、いくつかの実施形態によれば、この方法は、１３０２において、クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、１つ又は複数のクライアントによってエンジンを実行することを含むことができる。
【００６０】
いくつかの実施形態では、同じクライアントアプリケーション識別子を用いる２つ以上のクライアントは、同じターゲットサーバ又はサーバサブセットを選択する。
【００６１】
いくつかの実施形態では、エンジンは、各クライアントアプリケーション識別子をターゲットサーバ又はサーバサブセットにマッピングするように構成されたサービスマッピングサブシステムを含む。
【００６２】
いくつかの実施形態では、サービスマッピングサブシステムは、最大ランダム重みを使用してこのクライアントアプリケーション識別子をマッピングするように構成される。
【００６３】
いくつかの実施形態では、クライアントアプリケーション識別子は大きな数である。
【００６４】
いくつかの実施形態では、クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するようにエンジンを実行するステップは、クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、１つ又は複数のクライアントのうちの第１のクライアントによってエンジンを実行するステップと、クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するように、１つ又は複数のクライアントのうちの第２のクライアントによってエンジンを実行するステップとを含む。
【００６５】
いくつかの実施形態では、クライアントアプリケーション識別子を用いて複数のサーバの中からターゲットサーバ又はサーバサブセットを選択するようにエンジンを実行するステップは、クライアントによって実行されたエンジンが、所望のアプリケーションを提供するサーバのアイデンティティを示す情報を受信するステップと、クライアントによって実行されたエンジンが、所望のアプリケーションを提供するサーバからなる、クライアントアプリケーション識別子別ソート済みリストを、この情報及びクライアントアプリケーション識別子に少なくとも部分的に基づいて生成するステップとを含む。
【００６６】
いくつかの実施形態では、ソート済みリストは、サーバのうちの少なくとも１つの機能しているサーバにコンタクトが取れるまでサーバにコンタクトを試みる順序を定義する任意のタイプの情報を、任意の形式で含むことができる。
【００６７】
いくつかの実施形態では、大きな数は、少なくとも１２８ビットである。いくつかの実施形態では、大きな数は、少なくとも５１２ビットである。
【００６８】
図５は、いくつかの実施形態による、アーキテクチャ２００を示す図である。いくつかの実施形態では、本明細書で開示されるシステム及び／又はデバイス（及び／又はその一部）のうちの１つ又は複数は、アーキテクチャ２００の１つ又は複数の部分と同じ且つ／又は類似のアーキテクチャを有することができる。いくつかの実施形態では、サーバフェイルオーバー及びロードバランシングシステム１０内の複数のサーバ１２のうちの１つ又は複数、及び／又はサーバフェイルオーバー及びロードバランシングシステム１０内の１つ又は複数のクライアント２２のうちの１つ又は複数は、アーキテクチャ２００の１つ又は複数の部分と同じ且つ／又は類似のアーキテクチャを有する。
【００６９】
いくつかの実施形態では、本明細書で開示される方法（又はその一部）の１つ又は複数は、アーキテクチャ２００（又はその一部）と同じ又は類似のアーキテクチャを有するシステム、装置及び／又はデバイスによって実行することができる。
【００７０】
このアーキテクチャは、分散アーキテクチャ又は非分散アーキテクチャとして実装されてもよい。分散アーキテクチャは、完全な分散アーキテクチャか又は一部分散一部非分散アーキテクチャであってもよい。
【００７１】
図５を参照すると、いくつかの実施形態によれば、アーキテクチャ２００は処理システム２０２を含み、処理システム２０２は、ストレージデバイス２０４と、ネットワークインターフェース２０８と、通信バス２１０と、中央処理装置（ＣＰＵ）（マイクロプロセッサ）２１２と、ランダムアクセスメモリ（ＲＡＭ）２１４と、キーボード、マウスなどの１つ又は複数の入力デバイス２１６とのうちの１つ又は複数を含み得る。処理システム２０２はまた、ディスプレイ（例えば、液晶ディスプレイ（ＬＣＤ）、陰極線管（ＣＲＴ）など）を含み得る。いくつかの実施形態では、ストレージデバイス２０４は、任意の適切なコンピュータ可読記憶媒体、例えば、ディスク、不揮発性メモリ（例えば、読み出し専用メモリ（ＲＯＭ）、消去可能ＲＯＭ（ＥＰＲＯＭ）、電気的消去可能ＲＯＭ（ＥＥＰＲＯＭ）、フラッシュメモリ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）など）を含み得る。いくつかの実施形態では、処理システム２０２は、ネットワークコンピュータシステム、パーソナルコンピュータ、スマートフォン、タブレットコンピュータなどを含むことができる。いくつかの実施形態では、サーバフェイルオーバー及びロードバランシングエンジン１６は、ストレージデバイス２０４に記憶され、例えば、Ｐｙｔｈｏｎ、Ｊａｖａ（登録商標）、Ｃ、Ｃ＋＋、Ｃ＃、．ＮＥＴ、ＭＡＴＬＡＢなどの適切な、高レベル又は低レベルのコンピューティング言語を用いてＣＰＵ２１２によって実行されるコンピュータ可読プログラムコードとして具現化され得る。いくつかの実施形態では、ネットワークインターフェース２０８は、イーサネット（登録商標）ネットワークインタフェースデバイス、１つ又は複数の適切な無線プロトコルで動作可能な無線ネットワークインタフェースデバイス、又はネットワークを介してサーバ２０２に通信させる任意の他の適切なデバイスを含むことができる。いくつかの実施形態では、ＣＰＵ２１２は、サーバフェイルオーバー及びロードバランシングエンジン１６を実装及び実行することができる任意の適切なアーキテクチャの任意の適切な単一又は複数コアのマイクロプロセッサを含むことができる。いくつかの実施形態では、ランダムアクセスメモリ２１４は、ダイナミックＲＡＭ（ＤＲＡＭ）などの最新のコンピュータに典型的な任意の適切な高速ランダムアクセスメモリを含むことができる。
【００７２】
別段の記載のない限り、本明細書で開示される任意のプロセス（本明細書では方法と呼ぶこともある）は、フローチャートに示される順序に限定されない。それどころか、各実施形態は、実行可能な任意の順序で実行することができる。
【００７３】
別段の記載のない限り、本明細書に開示される任意の方法は、任意のやり方で実行することができる。いくつかの実施形態では、方法（又はその１つ又は複数の部分）は、システム１０の１つ又は複数の部分によって実行することができる。
【００７４】
いくつかの実施形態では、非一時的コンピュータ可読媒体は、命令を格納することができ、この命令は、機械によって実行されると、本明細書に開示される任意の１つ又は複数の方法（又はその１つ又は複数の部分）を実行することになる。
【００７５】
別段の記載のない限り、プロセッサは、任意のタイプのプロセッサとすることができる。例えば、プロセッサは、プログラマブル又はノンプログラマブル、汎用又は特定目的、専用又は非専用、分散又は非分散、共有又は非共有、及び／又はこれらの任意の組み合わせであってもよい。プロセッサは、ハードウェア、ソフトウェア、ファームウェア、及び／又はそれらの任意の組み合わせを含み得るが、これらに限定されない。ハードウェアは、市販の集積回路、カスタム集積回路、及び／又はそれらの任意の組合せを含み得るが、これらに限定されない。いくつかの実施形態では、プロセッサはマイクロプロセッサである。ソフトウェアは、例えば、磁気又は光学ディスク、磁気又は光学テープ、ＣＤ−ＲＯＭ、ＤＶＤ、ＲＡＭ、ＥＰＲＯＭ、ＲＯＭ、又は他の半導体メモリなどであるがこれらに限定されないコンピュータ可読媒体に格納可能な命令及び／又は格納された命令を含むことができる。プロセッサは、連続信号、定期的にサンプリングされた信号、及び／又はそれらの任意の組み合わせを使用することができる。プロセッサが分散される場合、制御／記憶回路構成の２つ以上の部分は、通信リンクを介して互いに通信することができる。
【００７６】
別段の記載のない限り、処理システムは、少なくとも１つのプロセッサを含む任意のタイプのシステムである。
【００７７】
別段の記載のない限り、通信リンクは任意のタイプの通信リンクであって、例えば、これらに限定されないが、有線（例えば、導体、光ファイバケーブル）又は無線（例えば、これらに限定されないが、マイクロ波リンク、衛星リンク、赤外線リンクを含む、音響リンク、電磁リンク、又はそれらの任意の組合せ）、及び／又はそれらの組み合わせを含み、それらはそれぞれ、公的又はプライベート、専用及び／又は共有（例えば、ネットワーク）であってもよい。通信リンクは、永続的通信リンクであってもなくてもよい。通信リンクは、任意のタイプの情報を任意の形式でサポートすることができ、例えば、これに限定されないが、アナログ及び／又はデジタル（例えば、２進値のシーケンス、すなわち、ビット列）信号をシリアル及び／又はパラレル形式でサポートすることができる。情報は、ブロックに分割されても分割されなくてもよい。ブロックに分割される場合、１ブロックの情報量は、予め決定されてもよいし又は動的に決定されてもよく、且つ／又は固定（例えば、一定）又は可変であってもよい。通信リンクは、プロトコル又はプロトコルの組合せを使用することができ、このプロトコルは、例えば、インターネットプロトコルを含むが、これに限定されない。
【００７８】
別段の記載のない限り、「受信する」という用語は、内部及び／又は外部の任意のソースから任意の方法で受信することを意味する。
【００７９】
別段の記載のない限り、「定義する」という用語は「直接的及び／又は間接的に定義する」ことを意味する。
【００８０】
別段の記載のない限り、２つ以上のことに応答すること且つ／又は基づくことを排除しないようにするために、例えば、「に応答して」及び「に基づいて」などの用語は、それぞれ「に少なくとも応答して」及び「に少なくとも基づいて」を意味する。
【００８１】
別段の記載のない限り、「に結合された」、「に送信する」、及び「から受信する」などの用語は、「に直接的及び／又は間接的に結合された」、「に直接的及び／又は間接的に送信する」、「から直接的及び／又は間接的に受信する」をそれぞれ意味する。
【００８２】
別段の記載のない限り、例えば、「備える（comprises）」、「有する（has）」、「含む（includes）」及びそのすべての語形などの用語は、追加の要素及び／又は特徴を排除しないように、制限なしとみなされる。また、別段の記載のない限り、例えば「１つ（a）」、「１つ（one）」、「第１の（first）」などの用語は制限なしとみなされ、「ただ１つ（only a）」、「ただ１つ（only one）」、及び「第１のみ（only a first）」をそれぞれ意味するものではない。さらに、別段の記載のない限り、「第１」という用語は、それ自身が、「第２」もまた存在することを要求するものではない。
【００８３】
本システム及び方法を詳細に説明したので、前述の説明は、本システム及び方法の趣旨又は範囲を限定するものではないことを理解すべきである。当業者であれば、本明細書に記載された本開示の実施形態は単なる例示であり、当業者は、本明細書の教示に基づいて、本開示の趣旨及び／又は範囲から逸脱することなく、任意の多数の変形及び変更を行うことができることが理解されよう。上記で論じたものを含む、このような変形及び変更のすべては、本開示の範囲内に含まれることが意図される。ほんの一例として、本開示は、これに限定されないが、上記の説明に記載された特徴のうちの任意の１つ又は複数を互いに任意に組み合わせて有する実施形態を企図している。別の例として、本開示は、これに限定されないが、上記の説明に記載された特徴のうちの１つ又は複数を含まない実施形態を意図している。したがって、本明細書における実施形態の説明は、限定的な意味ではなく例示として解釈されるべきであり、本発明及び本開示のいずれも、本明細書に記載される特定の実施形態又は特徴の組み合わせに限定されない。
【図１】
0006513228.tif 000002
【図２】
0006513228.tif 000003
【図３】
0006513228.tif 000004
【図４】
0006513228.tif 000005
【図５】
0006513228.tif 000006
【図６】
0006513228.tif 000007
【図７】
0006513228.tif 000008
【図８】
0006513228.tif 000009
【図９】
0006513228.tif 000010
【図１０】
0006513228.tif 000011
【図１１】
0006513228.tif 000012
【図１２】
0006513228.tif 000013
【図１３】
0006513228.tif 000014