(57)【要約】ロード・バランサ・コンピュータ装置における装置および方法は、局面において、マスタが機能しているかを判定することと、もしもマスタが機能していないのであれば、少なくとも１つのスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を、自己のネットワーク識別情報内に設定することによって、マスタになることを試みる。他の局面では、この装置および方法は、コマンドのグループのおのおのを、複数のスレーブのうちの１つに割り当てることと、コマンドおよび対応する割当をデータベース・テーブルに格納することと、コマンドのグループのおのおのについて、データベース・テーブルにおいて、それぞれのコマンドが実行されたか否かを示すコマンド・ステータスを確認することと、全てのコマンドが実行された場合、コールバックを実行することとを含む。
2010511964.tif 000002
【特許請求の範囲】
【請求項１】
ロード・バランサのスレーブ・コンピュータ装置のためにコンピュータによって実現される方法であって、
前記ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたヘルス・メンテナンス・アルゴリズムにしたがって、前記ロード・バランサのマスタが機能しているかを判定することと、
前記マスタが機能していない場合、前記ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたロール・トランジション・アルゴリズムにしたがって前記マスタになることを試みることとを備え、
前記予め定められたロール・トランジション・アルゴリズムは、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、前記マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を、自己のネットワーク識別情報に設定することを含む方法。
【請求項２】
前記マスタになることを試みることはさらに、マスタ・コードを有する前記マスタ・データベース・テーブルのポーションに前記自己のネットワーク識別情報を設定することを含み、前記マスタ・コードは、前記マスタ・データベース・テーブルの主要鍵のために予め定められた値を備える請求項１に記載の方法。
【請求項３】
前記マスタになることを試みることはさらに、前記マスタ・ネットワーク識別情報へのアクセスを制御するために、前記マスタ・データベース・テーブルの一部分を用いてセマフォー（semaphore）を実現することを備える請求項１に記載の方法。
【請求項４】
前記マスタになることを試みることはさらに、
マスタ・コードに基づいて、前記マスタ・データベース・テーブルの一部分から、前記マスタ・ネットワーク識別情報を読み取ることと、
前記マスタ・データベース・テーブルのうち、前記マスタ・コードと前記マスタ・ネットワーク識別情報とを備える部分の削除を試みることと
を備える請求項１に記載の方法。
【請求項５】
マスタ・コードに対応するマスタ・データベース・テーブルの一部分から前記マスタ・ネットワーク識別情報を読み取ることと、
前記マスタ・ネットワーク識別情報が、前記自己のネットワーク識別情報と一致しているかを確認することと、
前記マスタ・ネットワーク識別情報が、前記自己のネットワーク識別情報と一致していない場合、スレーブとして動作することと、
前記マスタ・ネットワーク識別情報が、前記自己のネットワーク識別情報と一致している場合、前記マスタとして動作することと
をさらに備える請求項１に記載の方法。
【請求項６】
前記マスタが機能しているかを判定することはさらに、
前記マスタ・ネットワーク識別情報に基づいて前記マスタへ通信を送ることと、
前記マスタから予め定められた時間内にアクノレッジメントが受信されない場合、前記マスタになることを試みることと
を備える請求項１に記載の方法。
【請求項７】
前記マスタが機能しているかを判定することはさらに、トランスポート・コントロール・プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）を用いてローカル・エリア・ネットワーク（ＬＡＮ）を介して通信メッセージを前記マスタへ送信することを備える請求項１に記載の方法。
【請求項８】
前記マスタから通信メッセージを受信することと、
前記マスタへアクノレッジメントを送信することと
をさらに備える請求項１に記載の方法。
【請求項９】
実行するための少なくとも１つのコマンドを前記マスタから受信することと、
前記コマンドの実行結果を前記マスタへ送信することと
をさらに備える請求項１に記載の方法。
【請求項１０】
前記コマンドを実行することをさらに備え、
前記コマンドを実行することは、無線ネットワークで動作する少なくとも１つの無線デバイスに対応するパフォーマンス統計量を処理することを備える請求項９に記載の方法。
【請求項１１】
マスタ・パフォーマンス要件を取得することと、
前記スレーブの実際のパフォーマンス測定値を取得することと、
前記実際のパフォーマンス測定値が前記マスタ・パフォーマンス要件を満足する場合にのみ、前記スレーブが前記マスタになることを許可することと
をさらに備える請求項１に記載の方法。
【請求項１２】
ロード・バランサのスレーブとして動作するように構成された少なくとも１つのプロセッサであって、
前記ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたヘルス・メンテナンス・アルゴリズムにしたがって、前記ロード・バランサのマスタが機能しているかを判定する第１のモジュールと、
前記マスタが機能していない場合、前記ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたロール・トランジション・アルゴリズムにしたがって前記マスタになることを試みるように構成された第２のモジュールとを備え、
前記予め定められたロール・トランジション・アルゴリズムは、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、前記マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を、自己のネットワーク識別情報に設定することを含むプロセッサ。
【請求項１３】
ロード・バランサのスレーブのためのコンピュータ・プログラム製品であって、
コンピュータに、前記ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたヘルス・メンテナンス・アルゴリズムにしたがって、前記ロード・バランサのマスタが機能しているかを判定させる第１のコードのセットと、
前記マスタが機能していない場合、前記コンピュータに、前記ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたロール・トランジション・アルゴリズムにしたがって前記マスタになることを試みさせる第２のコードのセットとを備え、
前記予め定められたロール・トランジション・アルゴリズムは、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、前記マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を、自己のネットワーク識別情報に設定することを含むコンピュータ・プログラム製品。
【請求項１４】
ロード・バランサのスレーブ装置であって、
前記ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたヘルス・メンテナンス・アルゴリズムにしたがって、前記ロード・バランサのマスタが機能しているかを判定する手段と、
前記マスタが機能していない場合、前記ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたロール・トランジション・アルゴリズムにしたがって前記マスタになることを試みる手段とを備え、
前記予め定められたロール・トランジション・アルゴリズムは、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、前記マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を、自己のネットワーク識別情報に設定することを含むスレーブ装置。
【請求項１５】
ロード・バランサのスレーブ装置であって、
前記ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたヘルス・メンテナンス・アルゴリズムにしたがって、マスタが機能しているかを判定し、さらに、前記マスタが機能していない場合、前記ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたロール・トランジション・アルゴリズムにしたがって前記マスタになることを試みるように動作可能なヘルス・マネジメント・サービスを備え、
前記予め定められたロール・トランジション・アルゴリズムは、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、前記マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を、自己のネットワーク識別情報に設定することを含み、
前記スレーブ装置はさらに、前記ヘルス・マネジメント・サービスと通信しており、前記ヘルス・マネジメント・サービスに応答して前記マスタ・データベースとの読み書きが可能なデータベース・サービスを備えるスレーブ装置。
【請求項１６】
前記ヘルス・マネジメント・サービスに応答して、前記データベース・サービスはさらに、マスタ・コードを有する前記マスタ・データベース・テーブルの一部分に前記自己のネットワーク識別情報を設定するように動作し、前記マスタ・コードは、前記マスタ・データベース・テーブルの主要鍵のために予め定められた値を備える請求項１５に記載のスレーブ装置。
【請求項１７】
前記ヘルス・マネジメント・サービスに応答して、前記データベース・サービスはさらに、前記マスタ・ネットワーク識別情報へのアクセスを制御するために、前記マスタ・データベース・テーブルの一部分を用いてセマフォー（semaphore）を実現するように動作する請求項１５に記載のスレーブ装置。
【請求項１８】
前記ヘルス・マネジメント・サービスに応答して、前記データベース・サービスはさらに、マスタ・コードに基づいて、前記マスタ・データベース・テーブルの一部分から、前記マスタ・ネットワーク識別情報を読み取り、前記マスタ・データベース・テーブルのうち、前記マスタ・コードと前記マスタ・ネットワーク識別情報とを備える部分の削除を試みるように動作する請求項１５に記載のスレーブ装置。
【請求項１９】
前記ヘルス・マネジメント・サービスまたは前記データベース・サービスのうちの少なくとも１つはさらに、
マスタ・コードに対応するマスタ・データベース・テーブルの一部分から前記マスタ・ネットワーク識別情報を読み取り、
前記マスタ・ネットワーク識別情報が、前記自己のネットワーク識別情報と一致しているかを確認し、
前記マスタ・ネットワーク識別情報が、前記自己のネットワーク識別情報と一致していない場合、前記スレーブ装置をスレーブとして動作させ、
前記マスタ・ネットワーク識別情報が、前記自己のネットワーク識別情報と一致している場合、前記スレーブ装置を前記マスタとして動作させるように動作する請求項１５に記載のスレーブ装置。
【請求項２０】
前記ヘルス・マネジメント・サービスはさらに、前記マスタ・ネットワーク識別情報に基づいて前記マスタへ通信を送り、前記マスタから予め定められた時間内にアクノレッジメントが受信されない場合、前記マスタになることを試みるように動作する請求項１５に記載のスレーブ装置。
【請求項２１】
前記ヘルス・マネジメント・サービスはさらに、トランスポート・コントロール・プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）を用いてローカル・エリア・ネットワーク（ＬＡＮ）を介して通信メッセージを前記マスタへ送信するように動作する請求項１５に記載のスレーブ装置。
【請求項２２】
前記マスタから通信メッセージを受信することと、
前記マスタへアクノレッジメントを送信することと
をさらに備える請求項１に記載のスレーブ装置。
【請求項２３】
通信ネットワークを介して前記マスタからコマンドを受信し、前記コマンドを実行し、前記コマンドの実行結果を、前記通信ネットワークを介して前記マスタへ送信するように動作可能なユーザ・コマンド実行部をさらに備える請求項１５に記載のスレーブ装置。
【請求項２４】
前記ユーザ・コマンド実行部はさらに、無線ネットワークで動作する少なくとも１つの無線デバイスに対応するパフォーマンス統計量を処理するように動作する請求項１５に記載のスレーブ装置。
【請求項２５】
マスタ・パフォーマンス要件と、前記スレーブの実際のパフォーマンス測定値とを有するメモリをさらに備え、
前記ヘルス・メンテナンス・サービスはさらに、前記実際のパフォーマンス測定値が前記マスタ・パフォーマンス要件を満足する場合にのみ、前記スレーブが前記マスタになることを許可するように動作する請求項１５に記載のスレーブ装置。
【請求項２６】
ロード・バランサのマスタ・コンピュータ装置のためにコンピュータによって実現される方法であって、
マスタになるために、共通の予め定められたロール・トランジション・アルゴリズムを実行することを備え、
前記共通の予め定められたロール・トランジション・アルゴリズムは、前記ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能であり、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、前記マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を、自己のネットワーク識別情報に設定することを含み、
前記方法はさらに、前記複数のスレーブのおのおののヘルスを判定するために、共通の予め定められたヘルス・メンテナンス・アルゴリズムを実行することを備え、
前記共通の予め定めたヘルス・メンテナンス・アルゴリズムは、前記ロード・バランサの複数のスレーブのおのおのによって独立して動作されることが可能であり、
前記方法はさらに、
前記予め定められたヘルス・メンテナンス・アルゴリズムの実行に基づいて、機能していると判定された複数のスレーブのうちの少なくとも１つに、コマンドのグループのおのおのを割り当てることと、
前記コマンドおよび対応する割当をデータベース・テーブル内に格納することとを備え、
おのおのの割当は、それぞれのコマンドに割り当てられた複数のスレーブのうちの１つのためのネットワーク識別情報を備え、
前記方法はさらに、
前記コマンドのグループのおのおのについて、それぞれのコマンドが実行されているか否かを示すコマンド・ステータスを、前記データベース・テーブルにおいて確認することと、
前記コマンド・ステータスに基づいて、全てのコマンドが実行されたと判定された場合、コールバック機能を実行することと
を備える方法。
【請求項２７】
前記コールバック機能を実行することは、前記コマンドのグループのおのおのの実行によって生成される少なくとも１つの結果にコマンド・スクリプトを実行することをさらに備える請求項２６に記載の方法。
【請求項２８】
前記共通の予め定められたヘルス・メンテナンス・アルゴリズムを実行することはさらに、
前記複数のスレーブのおのおのが機能しているかを判定することと、
前記複数のスレーブのそれぞれ１つが機能していない場合、機能していないそれぞれのスレーブに対応するそれぞれのコマンドを、機能している複数のスレーブのうちの少なくとも１つに再割り当てすることとを備え、
前記コールバック機能を実行することは、前記再割り当てすることに基づく請求項２６に記載の方法。
【請求項２９】
前記スレーブのおのおのが機能しているかを判定することは、
前記複数のスレーブのおのおのに通信メッセージを送信することと、
前記複数のスレーブのおのおのから、予め定めた時間内にアクノレッジメントが受信されない場合、前記スレーブを、機能していないものと指定することと
をさらに備える請求項２８に記載の方法。
【請求項３０】
前記送信することはさらに、トランスポート・コントロール・プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）を用いてローカル・エリア・ネットワーク（ＬＡＮ）を介して通信メッセージを前記複数のスレーブのおのおのに送信することを備える請求項２９に記載の方法。
【請求項３１】
前記割り当てることはさらに、前記複数のスレーブのおのおのに既に割り当てられたコマンドの数に基づいて割り当てる請求項２６に記載の方法。
【請求項３２】
前記割り当てることはさらに、前記複数のスレーブのおのおのの利用度に基づいて割り当てる請求項２６に記載の方法。
【請求項３３】
前記複数のスレーブのおのおのから受信した通信メッセージを用いることによってスレーブ識別テーブルを構築することをさらに備え、
前記スレーブ識別テーブルは、おのおののスレーブのネットワーク識別情報を含む請求項２６に記載の方法。
【請求項３４】
既存のマスタのヘルスを判定するために、前記共通の予め定められたヘルス・メンテナンス・アルゴリズムを、マスタになる前に実行することをさらに備え、
前記マスタになるために、前記共通の予め定められたロール・トランジション・アルゴリズムを実行することは、前記既存のマスタが機能していないとの判定に基づいてトリガされる請求項２６に記載の方法。
【請求項３５】
前記マスタになることはさらに、
実際のパフォーマンス測定値を判定することと、
マスタ・パフォーマンス要件を判定することと、
前記実際のパフォーマンス測定値が、前記マスタ・パフォーマンス要件を満足する場合、前記マスタとして動作することと
を備える請求項３４に記載の方法。
【請求項３６】
ロード・バランサのマスタとして動作するように構成された少なくとも１つのプロセッサであって、
マスタになるために、共通の予め定められたロール・トランジション・アルゴリズムを実行する第１のモジュールを備え、
前記共通の予め定められたロール・トランジション・アルゴリズムは、前記ロード・バランサの複数のスレーブのおのおのによって独立して動作可能であり、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、前記マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を、自己のネットワーク識別情報に設定することを含み、
前記プロセッサはさらに、前記複数のスレーブのおのおののヘルスを判定するために、共通の予め定められたヘルス・メンテナンス・アルゴリズムを実行する第２のモジュールを備え、
前記共通の予め定めたヘルス・メンテナンス・アルゴリズムは、前記ロード・バランサの複数のスレーブのおのおのによって独立して動作されることが可能であり、
前記プロセッサはさらに、
前記予め定められたヘルス・メンテナンス・アルゴリズムの実行に基づいて、機能していると判定された複数のスレーブのうちの少なくとも１つに、コマンドのグループのおのおのを割り当てる第３のモジュールと、
前記コマンドおよび対応する割当をデータベース・テーブル内に格納する第４のモジュールとを備え、
おのおのの割当は、それぞれのコマンドに割り当てられた複数のスレーブのうちの１つのためのネットワーク識別情報を備え、
前記プロセッサはさらに、
前記コマンドのグループのおのおのについて、それぞれのコマンドが実行されているか否かを示すコマンド・ステータスを、前記データベース・テーブルにおいて確認する第５のモジュールと、
前記コマンド・ステータスに基づいて、全てのコマンドが実行されたと判定された場合、コールバック機能を実行する第６のモジュールと
を備えるプロセッサ。
【請求項３７】
コンピュータ・プログラム製品であって、
コンピュータに対して、マスタになるために、共通の予め定められたロール・トランジション・アルゴリズムを実行させる第１のコードのセットを備えるコンピュータ読取可能媒体を備え、
前記共通の予め定められたロール・トランジション・アルゴリズムは、前記ロード・バランサの複数のスレーブのおのおのによって独立して動作可能であり、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、前記マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を、自己のネットワーク識別情報に設定することを含み、
前記コンピュータ読取可能媒体はさらに、
前記コンピュータに、前記複数のスレーブのおのおののヘルスを判定するために、共通の予め定められたヘルス・メンテナンス・アルゴリズムを実行させる第２のコードのセットを備え、
前記共通の予め定めたヘルス・メンテナンス・アルゴリズムは、前記ロード・バランサの複数のスレーブのおのおのによって独立して動作されることが可能であり、
前記コンピュータ読取可能媒体はさらに、
前記コンピュータに、前記予め定められたヘルス・メンテナンス・アルゴリズムの実行に基づいて、機能していると判定された複数のスレーブのうちの少なくとも１つに、コマンドのグループのおのおのを割り当てさせる第３のコードのセットと、
前記コンピュータに、前記コマンドおよび対応する割当をデータベース・テーブル内に格納させる第４のコードのセットとを備え、
おのおのの割当は、それぞれのコマンドに割り当てられた複数のスレーブのうちの１つのためのネットワーク識別情報を備え、
前記コンピュータ読取可能媒体はさらに、
前記コンピュータに、前記コマンドのグループのおのおのについて、それぞれのコマンドが実行されているか否かを示すコマンド・ステータスを、前記データベース・テーブルにおいて確認させる第５のコードのセットと、
前記コンピュータに、前記コマンド・ステータスに基づいて、全てのコマンドが実行されたと判定された場合、コールバック機能を実行させる第６のコードのセットと
を備えるコンピュータ・プログラム製品。
【請求項３８】
ロード・バランサのマスタ装置であって、
マスタになるために、共通の予め定められたロール・トランジション・アルゴリズムを実行する手段を備え、
前記共通の予め定められたロール・トランジション・アルゴリズムは、前記ロード・バランサの複数のスレーブのおのおのによって独立して動作可能であり、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、前記マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を、自己のネットワーク識別情報に設定することを含み、
前記マスタ装置はさらに、
前記複数のスレーブのおのおののヘルスを判定するために、共通の予め定められたヘルス・メンテナンス・アルゴリズムを実行する手段を備え、
前記共通の予め定めたヘルス・メンテナンス・アルゴリズムは、前記ロード・バランサの複数のスレーブのおのおのによって独立して動作されることが可能であり、
前記マスタ装置はさらに、
前記予め定められたヘルス・メンテナンス・アルゴリズムの実行に基づいて、機能していると判定された複数のスレーブのうちの少なくとも１つに、コマンドのグループのおのおのを割り当てる手段と、
前記コマンドおよび対応する割当をデータベース・テーブル内に格納する手段とを備え、
おのおのの割当は、それぞれのコマンドに割り当てられた複数のスレーブのうちの１つのためのネットワーク識別情報を備え、
前記マスタ装置はさらに、
前記コマンドのグループのおのおのについて、それぞれのコマンドが実行されているか否かを示すコマンド・ステータスを、前記データベース・テーブルにおいて確認する手段と、
前記コマンド・ステータスに基づいて、全てのコマンドが実行されたと判定された場合、コールバック機能を実行する手段と
を備えるマスタ装置。
【請求項３９】
ロード・バランサのマスタ装置であって、
マスタになるために、共通の予め定められたロール・トランジション・アルゴリズムを実行するように動作可能なヘルス・メンテナンス・サービスを備え、
前記共通の予め定められたロール・トランジション・アルゴリズムは、前記ロード・バランサの複数のスレーブのおのおのによって独立して動作可能であり、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、前記マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を、自己のネットワーク識別情報に設定することを含み、
前記ヘルス・メンテナンス・サービスはさらに、前記複数のスレーブのおのおののヘルスを判定するために、共通の予め定められたヘルス・メンテナンス・アルゴリズムを実行するように動作可能であり、
前記共通の予め定めたヘルス・メンテナンス・アルゴリズムは、前記ロード・バランサの複数のスレーブのおのおのによって独立して動作されることが可能であり、
前記マスタ装置はさらに、
前記予め定められたヘルス・メンテナンス・アルゴリズムの実行に基づいて、機能していると判定された複数のスレーブのうちの少なくとも１つに、コマンドのグループのおのおのを割り当てるように動作可能な分配サービスと、
前記分配サービスと通信しており、前記コマンドおよび対応する割当をデータベース・テーブル内に格納するように動作可能なデータベース・サービスとを備え、
おのおのの割当は、それぞれのコマンドに割り当てられた複数のスレーブのうちの１つのためのネットワーク識別情報を備え、
前記分配サービスはさらに、前記コマンドのグループのおのおのについて、それぞれのコマンドが実行されているか否かを示すコマンド・ステータスを、前記データベース・テーブルにおいて確認するように動作し、
前記マスタ装置はさらに、前記コマンド・ステータスに基づいて、全てのコマンドが実行されたと判定された場合、コールバック機能を実行するように動作可能なユーザ・コマンド実行部を備えるマスタ装置。
【請求項４０】
前記コールバック機能は、前記コマンドのグループのおのおのの実行によって生成される少なくとも１つの結果について実行可能なコマンド・スクリプトを備える請求項３９に記載のマスタ装置。
【請求項４１】
前記分配サービスと通信するヘルス・メンテナンス・サービスをさらに備え、
前記ヘルス・メンテナンス・サービスは、
前記複数のスレーブのおのおのが機能しているかを判定し、
前記複数のスレーブのそれぞれ１つが機能していない場合、機能していないそれぞれのスレーブに対応するそれぞれのコマンドを、機能している複数のスレーブのうちの少なくとも１つに再割り当てするように動作し、
前記コールバック機能を実行することは、前記再割り当てすることに基づく請求項３９に記載のマスタ装置。
【請求項４２】
前記ヘルス・メンテナンス・サービスはさらに、前記複数のスレーブのおのおのに通信メッセージを送信し、前記複数のスレーブのおのおのから、予め定めた時間内にアクノレッジメントが受信されない場合、前記スレーブを、機能していないものと指定するように動作する請求項４１に記載のマスタ装置。
【請求項４３】
前記ヘルス・メンテナンス・サービスはさらに、トランスポート・コントロール・プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）を用いてローカル・エリア・ネットワーク（ＬＡＮ）を介して通信メッセージを前記複数のスレーブのおのおのに送信するように動作する請求項４２に記載のマスタ装置。
【請求項４４】
前記分配サービスはさらに、前記複数のスレーブのおのおのに既に割り当てられたコマンドの数に基づいて割り当てるように動作する請求項３９に記載のマスタ装置。
【請求項４５】
前記分配サービスはさらに、前記複数のスレーブのおのおのの利用度に基づいて割り当てるように動作する請求項３９に記載のマスタ装置。
【請求項４６】
前記データベース・サービスはさらに、前記複数のスレーブのおのおのから受信した通信メッセージを用いることによってスレーブ識別テーブルを構築するように動作し、前記スレーブ識別テーブルは、おのおののスレーブのネットワーク識別情報を含む請求項３９に記載のマスタ装置。
【請求項４７】
前記ヘルス・メンテナンス・サービスはさらに、既存のマスタのヘルスを判定するために、前記共通の予め定められたヘルス・メンテナンス・アルゴリズムを、マスタになる前に実行するように動作し、
前記ヘルス・メンテナンス・サービスは、前記マスタになるために、前記既存のマスタが機能していないとの判定に基づいて、前記共通の予め定められたロール・トランジション・アルゴリズムを実行するようにトリガされる請求項３９に記載のマスタ装置。
【請求項４８】
実際のパフォーマンス測定値とマスタ・パフォーマンス要件とを有するメモリをさらに備え、
前記ヘルス・メンテナンス・サービスはさらに、前記実際のパフォーマンス測定値が前記マスタ・パフォーマンス要件を満足する場合、前記マスタ装置が前記マスタとして動作できるように動作する請求項４７に記載のマスタ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
記述された局面は、分散処理システムに関連し、さらに詳しくは、ゼロ単一障害点ロード・バランサ（a zero single point of failure load balancer）の装置および方法に関する。
【背景技術】
【０００２】
コンピュータ処理においては、コマンドのグループが、しばしば、個々のコマンドに分割される。これらコマンドは並列して実行され、それらの結果が統合される。さらに、単一のコンピュータ装置は、有限の処理能力しかないので、これらのコマンドを実行するために複数のコンピュータ装置が使用される。しかしながら、複数のコンピュータ・デバイスを用いることによって、これらコンピュータ・デバイス間でコマンドを分配および統合する際に問題が生じうる。複数のコンピュータ・デバイスが使用される場合、コンピュータ装置のグループは、処理ファーム（processing farm）と称されうる。
【０００３】
複数の装置へコマンドを分配する方法は、多くのスレーブにコマンドを分配し、これらコマンドの実行結果を統合するマスタを用いる。これらの方法では、マスタがスレーブにコマンドを分配し、これらコマンドをスレーブが実行し、その後、実行された結果をマスタが統合する。スレーブとマスタのおのおのは、個別のコンピュータ・デバイスでありうる。これらコンピュータ・デバイス間でコマンドを分割するための方法および装置はしばしば、ロード・バランサと称される。ロード・バランサは、マスタ・コンピュータ・デバイス上で実行されるか、および／または、マスタ・コンピュータ・デバイス上に存在する。
【０００４】
このように処理を分散する方法に伴う１つの問題は、マスタが誤動作すれば、ワークが失われることである。さらに、マスタは、特別なハードウェアおよび／またはソフトウェアを必要とするので、マスタを交換することは困難でありうる。それゆえ、しばしば、より信頼性が高く高価なコンピュータ装置が、マスタとして使用される。全てのコンピュータ装置の使用を停めることなく、マスタをアップグレードすることも難しい。
【０００５】
別の問題は、マスタが、システムをリセットする必要なくスレーブを使用することができるように、システムにスレーブを動的に追加することも困難であるということである。例えば、ソフトウェア・コマンドが分割された後、スレーブを追加することは困難でありうる。
【０００６】
別の問題は、スレーブが誤動作し、コマンドの実行結果を失った場合、復旧が困難であるということである。
【０００７】
また、マスタと複数のスレーブとを用いることに伴うさらに別の問題は、新たなマスタを選択する処理は複雑でありうるということである。例えば、マスタに障害が発生したか、あるいは、動作不能になった場合、前のマスタが中断したところで再開することができる新たなマスタを指定するための手順が確立されねばならない。そのような手順は、多くの場合、煩わしい。
【０００８】
したがって、ロード・バランサ・システムの改良が望まれる。
【優先権主張】
【０００９】
本特許出願は、２００６年１２月５日に出願され、本願の譲受人に譲渡され、本明細書によって参照によって明確に組み込まれている"METHOD AND APPARATUS FOR SUPPORTING ZERO SINGLE POINT OF FAILURE LOAD BALANCER"と題された米国仮出願６０／８６８，６８９号の優先権を主張する。
【発明の概要】
【００１０】
以下は、そのような局面の基本的な理解を提供するために、１または複数の局面の簡略化された概要を示す。この概要は、考慮される全ての局面の広範囲な概観ではなく、全ての局面の重要要素または決定的要素を特定することも、これら局面の全てまたは任意のスコープを線引きすることも意図されていない。その唯一の目的は、後述されるより詳細な説明に対する前置きとして、１または複数の局面のいくつかの概念をより簡単な形式で表すことである。
【００１１】
局面では、ロード・バランサのスレーブ・コンピュータ装置のコンピュータによって実現される方法は、ロード・バランサにおいて複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたヘルス・メンテナンス・アルゴリズムにしたがって、ロード・バランサのマスタが機能しているかを判定することを備える。もしもマスタが機能していなければ、この方法は、ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたロール・トランジション・アルゴリズムにしたがってマスタになることを試みることを含む。ここで、予め定められたロール・トランジション・アルゴリズムは、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を、自己のネットワーク識別情報に設定することを含む。
【００１２】
他の局面では、ロード・バランサのスレーブとして動作するように構成された少なくとも１つのプロセッサは、ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたヘルス・メンテナンス・アルゴリズムにしたがって、ロード・バランサのマスタが機能しているかを判定するための第１のモジュールを備える。さらに、少なくとも１つのプロセッサはまた、もしもマスタが機能していない場合、ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたロール・トランジション・アルゴリズムにしたがって、マスタになることを試みる第２のモジュールを含む。予め定められたロール・トランジション・アルゴリズムは、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を自己のネットワーク識別情報に設定することを含む。
【００１３】
また別の局面では、ロード・バランサのスレーブのためのコンピュータ・プログラム製品は、コンピュータに動作を行わせるためのコードを有するコンピュータ読取可能媒体を備える。このコンピュータ読取可能媒体は、ロード・バランサ内の複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたヘルス・メンテナンス・アルゴリズムにしたがって、ロード・バランサのマスタが機能しているかをコンピュータに判定させるための第１のコードのセットを含む。さらに、このコンピュータ読取可能媒体は、マスタが機能していない場合、ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたロール・トランジション・アルゴリズムにしたがって、コンピュータに、マスタになることを試みさせるための第２のコードのセットを含む。予め定められたロール・トランジション・アルゴリズムは、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を、自己のネットワーク識別情報に設定することを含む。
【００１４】
さらなる局面では、ロード・バランサのスレーブ装置は、ロード・バランサの複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたヘルス・メンテナンス・アルゴリズムにしたがって、ロード・バランサのマスタが機能しているかを判定する手段と、もしもマスタが機能していない場合、ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたロール・トランジション・アルゴリズムにしたがってマスタになることを試みる手段とを備える。予め定められたロール・トランジション・アルゴリズムは、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を自己のネットワーク識別情報に設定することを含む。
【００１５】
他の局面では、ロード・バランサのスレーブ装置は、ロード・バランサ内における複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたヘルス・メンテナンス・アルゴリズムにしたがって、マスタが機能しているかを判定するように動作可能であり、さらに、もしもマスタが機能していないのであれば、ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能な共通の予め定められたロール・トランジション・アルゴリズムにしがたってマスタになることを試みるヘルス・マネジメント・サービスを備える。予め定められたロール・トランジション・アルゴリズムは、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を、自己のネットワーク識別情報に設定することを含む。さらに、スレーブ装置は、ヘルス・マネジメント・サービスと通信しており、ヘルス・マネジメント・サービスに応答して、マスタ・データベース・テーブルとの読み書きを行うように動作可能なデータベース・サービスを備える。
【００１６】
また別の局面では、ロード・バランサのマスタ・コンピュータ装置のためのコンピュータによって実現される方法は、マスタになるために、共通の予め定められたロール・トランジション・アルゴリズムを実行することを備える。この共通の予め定められたロール・トランジション・アルゴリズムは、ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能であり、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を、自己のネットワーク識別情報に設定することを含む。さらに、この方法は、複数のスレーブのおのおののヘルスを判定するために、共通の予め定められたヘルス・メンテナンス・アルゴリズムを実行することを含む。この共通の予め定められたヘルス・メンテナンス・アルゴリズムは、ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能である。また、この方法は、予め定められたヘルス・メンテナンス・アルゴリズムの実行に基づいて、コマンドのグループのおのおのを、機能していると判定された複数のスレーブのうちの少なくとも１つへ割り当てることを含む。この方法はさらに、コマンドおよび対応する割当を、データベース・テーブルに格納することを含む。ここで、おのおのの割当は、それぞれのコマンドに割り当てられた複数のスレーブのうちの１つのためのネットワーク識別情報を備える。さらに、この方法は、コマンドのグループのおのおのについて、データベース・テーブル内のコマンド・ステータスをチェックすることを含む。コマンド・ステータスは、それぞれのコマンドが実行されたか否かを示している。さらに、この方法は、コマンド・ステータスに基づいて、全てのコマンドが実行されたと判定されたとき、コールバック機能を実行することを含む。
【００１７】
さらなる局面では、ロード・バランサのマスタとして動作するように構成された少なくとも１つのプロセッサは、マスタになるために、共通の予め定められたロール・トランジション・アルゴリズムを実行する第１のモジュールを備える。この共通の予め定められたロール・トランジション・アルゴリズムは、ロード・バランサの複数のスレーブのおのおのによって独立して動作可能であり、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を、自己のネットワーク識別情報に設定することを含む。さらに、少なくとも１つのプロセッサは、複数のスレーブのおのおののヘルスを判定するために、共通の予め定められたヘルス・メンテナンス・アルゴリズムを実行する第２のモジュールを含む。この共通の予め定められたヘルス・メンテナンス・アルゴリズムは、ロード・バランサの複数のスレーブのおのおのによって独立して動作可能である。また、少なくとも１つのプロセッサは、予め定められたヘルス・メンテナンス・アルゴリズムの実行に基づいて、機能していると判定された複数のスレーブのうちの少なくとも１つに、コマンドのグループのおのおのを割り当てる第３のモジュールを含む。さらに、少なくとも１つのプロセッサは、コマンドおよび対応する割当を、データベース・テーブルに格納する第４のモジュールを含む。ここで、おのおのの割当は、それぞれのコマンドに割り当てられた複数のスレーブのうちの１つに対するネットワーク識別情報を備える。少なくとも１つのプロセッサはさらに、コマンドのグループのおのおのについて、データベース・テーブル内のコマンド・ステータスをチェックする第５のモジュールを含む。ここで、コマンド・ステータスは、それぞれのコマンドが実行された否かを示す。このプロセッサはさらに、コマンド・ステータスに基づいて、全てのコマンドが実行されたと判定された場合、コールバック機能を実行する第６のモジュールを含む。
【００１８】
他の局面では、コンピュータ・プログラム製品は、動作を実行するためのコードを有するコンピュータ読取可能媒体を備える。このコンピュータ読取可能媒体は、コンピュータに対して、マスタになるために共通の予め定められたロール・トランジション・アルゴリズムを実行させる第１のコードのセットを含む。この共通の予め定められたロール・トランジション・アルゴリズムは、ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能であり、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を、自己のネットワーク識別情報として設定することを含む。さらに、コンピュータ読取可能媒体は、コンピュータに対して、複数のスレーブのおのおののヘルスを判定するために、共通の予め定められたヘルス・メンテナンス・アルゴリズムを実行させる第２のコードのセットを含む。この共通の予め定められたヘルス・メンテナンス・アルゴリズムは、ロード・バランサの複数のスレーブのおのおのによって独立して動作可能である。さらに、コンピュータ読取可能媒体は、コンピュータに対して、予め定められたヘルス・メンテナンス・アルゴリズムの実行に基づいて、コマンドのグループのおのおのを、機能していると判定された複数のスレーブのうちの少なくとも１つに割り当てさせる第３のコードのセットを含む。さらに、コンピュータ読取可能媒体は、コンピュータに対して、コマンドと、対応する割当とをデータベースに格納させる第４のコードのセットを含む。ここで、おのおのの割当は、それぞれのコマンドに割り当てられた複数のスレーブのうちの１つのネットワーク識別情報を備える。コンピュータ読取可能媒体はさらに、コンピュータに対して、コマンドのグループのおのおのについて、データベース・テーブル内のコマンド・ステータスをチェックさせる第５のコードのセットを含む。ここで、コマンド・ステータスは、それぞれのコマンドが実行されたか否かを示している。さらに、コンピュータ読取可能媒体は、コマンド・ステータスに基づいて、全てのコマンドが実行されたと判定された場合、コンピュータに対して、コールバック機能を実行させる第６のコードのセットを含む。
【００１９】
さらなる局面では、ロード・バランサのマスタ装置は、マスタになるために、共通の予め定められたロール・トランジション・アルゴリズムを実行する手段を備える。この共通の予め定められたロール・トランジション・アルゴリズムは、ロード・バランサにおける複数のスレーブのおのおのによって独立して動作可能であり、少なくとも1つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を自己のネットワーク識別情報に設定することを含む。さらに、マスタ装置は、複数のスレーブのおのおののヘルスを判定するために、共通の予め定められたヘルス・メンテナンス・アルゴリズムを実行する手段を含む。この共通の予め定められたヘルス・メンテナンス・アルゴリズムは、ロード・バランサの複数のスレーブのおのおのによって独立して動作可能である。さらに、マスタ装置は、予め定められたヘルス・メンテナンス・アルゴリズムの実行に基づいて、機能していると判定された複数のスレーブのうちの少なくとも１つに、コマンドのグループのおのおのを割り当てる手段を含む。さらに、マスタ装置は、コマンドおよび対応する割当をデータベース・テーブル内に格納する手段を含む。おのおのの割当は、それぞれのコマンドに割り当てられた複数のスレーブのうちの１つのネットワーク識別情報を備える。さらに、マスタ装置は、コマンドのグループのおのおのについて、データベース・テーブル内のコマンド・ステータスをチェックする手段を備える。ここで、コマンド・ステータスは、それぞれのコマンドが実行されたか否かを示す。さらに、マスタ装置は、コマンド・ステータスに基づいて全てのコマンドが実行されたと判定された場合、コールバック機能を実行する手段を備える。
【００２０】
また別の局面では、ロード・バランサのマスタ装置は、マスタになるために、共通の予め定められたロール・トランジション・アルゴリズムを実行するように動作可能なヘルス・メンテナンス・サービスを備える。この共通の予め定められたロール・トランジション・アルゴリズムは、ロード・バランサの複数のスレーブのおのおのによって独立して動作可能であり、少なくとも１つの他のスレーブが、対応するスレーブ・ネットワーク識別情報を、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報として設定する前に、マスタ・データベース・テーブル内のマスタ・ネットワーク識別情報を自己のネットワーク識別情報に設定することを含む。さらに、ヘルス・メンテナンス・サービスは、複数のスレーブのおのおののヘルスを判定するために、共通の予め定められたヘルス・メンテナンス・アルゴリズムを実行するように動作可能である。この共通の予め定められたヘルス・メンテナンス・アルゴリズムは、ロード・バランサ内の複数のスレーブのおのおのによって独立して動作可能である。マスタ装置はまた、予め定められたヘルス・メンテナンス・アルゴリズムの実行に基づいて、機能していると判定された複数のスレーブのうちの少なくとも１つに、コマンドのグループのおのおのを分配するように動作可能な分配サービスを含む。さらに、マスタ装置は、この分配サービスと通信しており、コマンドおよび対応する割当をデータベース・テーブル内に格納するように動作可能なデータベース・サービスを備える。ここで、おのおのの割当は、それぞれのコマンドに割り当てられた複数のスレーブのうちの１つについてのネットワーク識別情報を備える。さらに、分配サービスはさらに、コマンドのグループのおのおのについて、データベース・テーブル内のコマンド・ステータスをチェックするように動作可能である。ここで、コマンド・ステータスは、それぞれのコマンドが実行されたか否かを示す。さらに、マスタ装置は、コマンド・ステータスに基づいて、全てのコマンドが実行されたと判定された場合、コールバック機能を実行するように動作可能なユーザ・コマンド実行部を備える。
【００２１】
前述の目的および関連する目的を達成するために、１または複数の局面は、後に十分に説明され、特に特許請求の範囲で指摘されている機能を備える。以下の記述および添付図面は、１または複数の局面のある例示的な特徴を詳細に述べている。しかしながら、これらの特徴は、様々な局面の原理が適用される様々な方式のうちのほんの幾つかを示しているにすぎず、本記載は、そのような全ての局面とそれらの等価物を含むことが意図されている。
【図面の簡単な説明】
【００２２】
【図１】図１は、ゼロ単一障害点ロード・バランサ・システムの１つの局面の概略図である。
【図２】図２は、図１のシステムの通信デバイスの構成要素の１つの局面の概略図である。
【図３】図３は、図１に示すゼロ単一障害点ロード・バランサ・システムのデータベース・テーブルの構成要素の１つの局面の概略図である。
【図４】図４は、図１に示すゼロ単一障害点ロード・バランサ・システムのデータベース・テーブルの構成要素の１つの局面の概略図である。
【図５】図５は、図１に示すゼロ単一障害点ロード・バランサ・システムのデータベース・テーブルの構成要素の１つの局面の概略図である。
【図６】図６は、図１に示すシステムのコンピュータ・デバイスの構成要素の１つの局面の概略図である。
【図７】図７は、図１に示すシステムのロード・バランサの追加構成要素の１つの局面の概略図である。
【図８】図８は、図１に示すゼロ単一障害点ロード・バランサ・システムのヘルス・メンテナンスのための方法の１つの局面のフローチャートである。
【図９】図９は、ゼロ単一障害点ロード・バランサ・システムのスレーブの方法の１つの局面のフローチャートである。
【図１０】図１０は、ゼロ単一障害点ロード・バランサ・システムのマスタのための方法の１つの局面のフローチャートである。
【発明を実施するための形態】
【００２３】
本明細書に記載の装置および方法は、コマンドのグループを、個々のコマンドに分割し、これらコマンドを複数のコンピュータ・デバイスへ分配し、実行されたコマンドの結果を統合する。このコンピュータ・デバイスを備えるシステムは、処理ファームと称されうる。いくつかの局面では、コンピュータ・デバイスのおのおのは、同じ方法を用いる。この方法は、マスタになることを試みているコンピュータ・デバイスのおのおのによって開始される。これらコンピュータ・デバイスの１つは、マスタを引き継いでマスタになり、残りのコンピュータ・デバイスのおのおのは、スレーブになる。有利なことに、この方法は、マスタを特定するために、個別のコントローラを必要とすることなく、おのおののコンピュータ・デバイスによって独立して実現されうる。コマンドは、実行するためマスタに発行される。マスタは、複数のコマンドを、個々のコマンドに分割する。例えば、複数のコマンドは、たとえばスクリプトによってともに受信され、マスタ・コンピュータ・デバイスのロード・バランサ構成要素は、このスクリプトを、スクリプトのおのおののライン毎に１つのコマンドに分割し、これらコマンドをスレーブに分配する。いくつかの局面では、スレーブは、マスタからの分配されたコマンドを受け取り、それぞれのコマンドを実行して、それぞれの結果をマスタへ返す。マスタは、分配されたコマンドを追跡し、結果をコンパイルし、関連する全ての分配されたコマンドの結果が利用可能になると、この結果を返す。
【００２４】
さらに、マスタは、スレーブのおのおのが機能していることを保証するために、定期的なチェックを行う。スレーブが機能していなければ、機能していないスレーブに割り当てられた分配されたコマンドが、他のスレーブに再び割り当てられるか、および／または、マスタが、分配されたそれぞれのコマンドを実行する。
【００２５】
さらに、スレーブのうちの少なくとも１つは、マスタが未だに機能していることを保証するために、規則的にチェックする。マスタがもう機能していないとスレーブが判定すると、スレーブは、独立して実行できる方法にしたがって、マスタになることを試みるだろう。いくつかの局面では、スレーブのおのおのは、スレーブのうちの１つが引き継いで、新たなマスタになるまで、マスタになることを試みる。マスタにならなかったスレーブは、スレーブとして動作し続ける。スレーブは、どのスレーブがマスタになるかを決定するためにデータベースを使用することができる。いくつかの局面では、１つのスレーブだけがマスタになることができるように、定数値のようなマスタ符号が、データベース内のマスタ・データベース・テーブルにおける主要鍵として使用されうる。
【００２６】
さらに、いくつかの局面では、マスタは、割当記録と、分配されたおのおののコマンドのステータスとを保持するためにデータベースを用いることができる。
【００２７】
したがって、ゼロ単一障害点バランサのためのシステムは、マスタが機能していない場合、マスタになることを試みるスレーブのうちの少なくとも１つによって、どのスレーブが新たなマスタになるのかを決定するためにデータベースを用いるスレーブによって、スレーブのおのおののステータスを規則的にチェックするマスタによって、タスクを維持するためにデータベースを用いるマスタによって、マスタのステータスを規則的にチェックするスレーブのおのおののうちの１または複数によって実現される。さらに、同じ方法を用いたコンピュータ・デバイスのおのおのによって、唯一の方法のみが開発され維持される必要がある。
【００２８】
図１に示すように、ゼロ単一障害点ロード・バランサ・システム２０の局面は、コンピュータ・デバイス２２、２４、２６および通信デバイス２８を備える。図１では、コンピュータ・デバイス２２のうちの１つがマスタ２１であり、他のコンピュータ・デバイス２２のうちの少なくとも１つがスレーブ２３である。コンピュータ・デバイス２２のおのおのは、ゼロ単一障害点ロード・バランサ・システム２０を提供する方法を実行している。この方法は、おのおののコンピュータ・デバイス２２に少なくとも２つの役割を与える。１つの役割は、スレーブ２３として動作することであり、他の役割は、マスタ２１として動作することである。
【００２９】
システム２０では、コンピュータ・デバイス２２のうち、指定されたマスタ２１は、例えば通信ネットワーク４４を経由して、コンピュータ・デバイス２４のキュー入力モジュール３８から１または複数のコマンド４０を受け取る。例えば、おのおののコマンド４０は、１または複数の通信デバイス２８から収集され、データベース３０に格納された通信デバイス関連データ２９の処理に関連しうる。例えば、通信デバイス関連データ２９は、対応する１または複数の無線通信ネットワークにおける１または複数の通信デバイスの動作のうちの１または複数に関連する情報や、例えばハードウェアおよび／またはソフトウェア、あるいは、これらの組み合わせおよび／またはいくつかの相関のような１または複数の通信デバイス構成要素のステータスを含みうる。それゆえ、コマンド４０は、１または複数の通信デバイス２８、通信デバイス２８が動作する無線ネットワーク、あるいはこれら両方のある組み合わせに関連する統計量および／またはその他の特性を判定することに関連する。
【００３０】
いずれにせよ、１または複数のコマンド４０を処理する効率を高めるために、マスタ２１は、分配サービス４８によって動作可能なロード・バランサ・モジュール４２を実行し、処理のために、マスタ２１のみならずスレーブ２３を含むコンピュータ・デバイス２２のうちの１または複数へ、コマンド４０のうちの１または複数を分配する。例えば、おのおののコマンド４０は、１より多いサブ・コマンドに分割され、分配されうる。特に、おのおののコンピュータ・デバイス２２は、コマンド４０のうちの１または複数を処理し、その結果をマスタ２１に返すように動作可能なユーザ・コマンド実行部４６を含む。マスタ２１のロード・バランサ４２は、結果をさらに処理するオプション局面において、結果の全てを再集合し、それぞれのコマンド４０に対応する最終結果４１を返すように動作可能である。例えば、最終結果４１は、対応するコマンド４０を参照してデータベース３０に格納され、例えばコンピュータ・デバイス２４のユーザのような許可されたユーザが、最終結果４１を検索および閲覧できるようになる。上述したように、最終結果４１は、１または複数の通信デバイス２８から収集されたデータ２９に少なくとも部分的に基づいて、１または複数の通信デバイス２８、あるいは、１または複数の無線ネットワークに関連するある種の特性でありうる。さらに、ゼロ単一障害点局面では、例えばスレーブ２３のようなおのおののコンピュータ・デバイス２２はまた、マスタ２１のロード・バランサ・モジュール４２と通信するか、あるいは、それぞれのコンピュータ・デバイス２２がマスタになる場合、マスタ・ロード・バランス機能を実行する類似のロード・バランサ・モジュール４２をも含む。
【００３１】
さらに、マスタ２１は、マスタ２１およびスレーブ２３を確立するための方法に関する情報のみならず、割り当てられた処理タスクおよび最終結果４１に関する情報を格納するために、データベース３０との通信インタフェースを提供するように動作可能なデータベース・サービス５２を含む。ゼロ単一障害点局面では、データベース３０は、高信頼性の組込式冗長システムを有するストレージ・メカニズムを備えている。例えば、データベース３０は、マスタ２１によって受信されたおのおののコマンド４０に対する参照を格納するコマンド・インデクス・テーブル３２を含みうる。さらに、データベース３０は、それぞれのコマンド４０の処理に対応して、マスタ２１によってコンピュータ・デバイス２２へ分配された様々なコマンドに対する参照と、分配されたコマンドのステータスとを格納するサブ・コマンド・インデクス・テーブル３４を含みうる。さらに、単一障害点局面では、データベース３０は、マスタ２１に関連しており、新たなマスタを確立するために使用される情報を格納する。さらに、単一障害点局面では、例えばスレーブ２３のようなおのおののコンピュータ・デバイス２２は、データベース３０および／またはマスタ２１のデータベース・サービス５２とインタフェースするために、類似のデータベース・サービス５２を含んでいる。
【００３２】
さらに、単一障害点局面では、マスタ２１は、通信ネットワーク４４を介してスレーブ２３のおのおのとのコンタクトを規則的に試みるように動作可能なヘルス・マネジメント・サービス５０を含む。スレーブ２３が通信可能ではないのであれば、マスタ２１は、それぞれのスレーブ２３は機能していないと考え、処理のためにそれぞれのスレーブ２３に割り当てられた任意のコマンド４０を再分配するように動作する。例えば、マスタ２１の再分配サービス・モジュール４８は、サブ・コマンド・インデクス・テーブル３４を更新し、通信可能ではないそれぞれのスレーブ２３から、通信可能である別のスレーブ２３へとコマンド４０を再分配することができる。
【００３３】
同様に、おのおののスレーブ２３のヘルス・マネジメント・サービス５０は、マスタ２１とのコンタクトを規則的に試みることができる。例えばマスタ２１からの応答がないなど、マスタ２１が適切に機能していないとスレーブ２３のヘルス・マネジメント・サービス５０が判定すると、スレーブ２３のヘルス・マネジメント・サービス５０は、それぞれのスレーブ２３の役割を、マスタ２１の役割に変更することを試みるであろう。スレーブ２３のヘルス・マネジメント・サービス５０は、スレーブ２３間の通信を管理するために、データベース３０のマスタ・テーブル３６を用いることによって、マスタ２１になることを試みることができる。いくつかの局面では、マスタ・テーブル３６は、単一のスレーブ２３のみがマスタ・テーブル３６に正しく書きこむことができるように、マスタ・テーブル３６の主要鍵である、定数でありうるマスタ符号を用いる。いくつかの局面では、どのスレーブ２３がマスタ２１になるのかを決定する際におけるスレーブ２３間の通信は、データベース３０のマスタ・テーブル３６における行を用いてセマフォー（semaphore）を実現または模擬することによって管理される。いくつかの局面では、スレーブ２３およびマスタ２１は、通信メッセーイ５４を用いて互いにおよびデータベース３０と通信し、互いを識別するネットワーク識別子（ＩＤ）５６を用いる。
【００３４】
したがって、システム２０は、スレーブ２３へのコマンド４０の分配を管理するためにマスタ２１にデータベース３０を提供することによって、および、スレーブ２３が、マスタ２１のステータスを規則的にチェックし、もしもマスタ２１が適切に機能していないのであればマスタ２１になることを試みることによって、ゼロ単一障害点ロード・バランサのための装置および方法を提供する。さらに、マスタ２１は、スレーブ２３のおのおののステータスを規則的にチェックし、もしもスレーブ２３が応答しないのであれば、マスタ２１は、通信可能ではないスレーブ２３に割り当てられたコマンド４０を、通信可能なスレーブ２３および／またはマスタ２１へ再割当する。いくつかの局面では、コマンド４０およびそれらのステータスは、データベース３０に格納される。したがって、システム２０は有利なことに、コンピュータ・デバイス２２の間にコマンドを分配し、コマンド関連情報をデータベース３０内に格納することによってコマンド分配を管理し、ヘルス・マネジメント・サービス５０間の通信によってシステムの健全性を維持し、データベース３０を用いて、ロード・バランスのためのマスタ２１の決定を管理するゼロ単一障害点システムを提供する。
【００３５】
図１および図２に示すように、通信デバイス２８は、通信ネットワーク４４とメッセージを交換するように動作可能な任意のタイプのデバイスを備えうる。例えば、通信デバイス２８は、例えば無線電話および／またはセルラ・電話のようなモバイル通信デバイスを備える。通信デバイス２８は例示したデバイスには限定されず、さらに、パーソナル・デジタル・アシスタント（ＰＤＡ）、２ウェイ・テキスト・ページャ、有線または無線通信ポータルを有するポータブル・コンピュータ、および、有線および／または無線通信ポータルを有する任意のタイプのコンピュータ・プラットフォームを含みうることが理解されるべきである。さらに、通信デバイス２８は、遠隔スレーブ、あるいは、エンド・ユーザは持たない、例えば遠隔センサ、遠隔サーバ、診断ツール、データ・リレイ等のようなその他の類似デバイスであり、無線ネットワークまたは有線ネットワークを介してデータを通信する。さらに、システム２０では、任意の数の通信デバイス２８からなる任意の組み合わせが利用されうる。さらに、通信デバイス２８と、コンピュータ・デバイス２２、２４、２６との区別がなされたが、いくつかのデバイスは、通信デバイス２８およびコンピュータ・デバイス２２、２４、２６の両方となりうることが注目されるべきである。
【００３６】
特に、システム２０は、１または複数の通信デバイス２８からデータを収集し、次に、マスタ・コンピュータ・デバイス２１およびスレーブ・コンピュータ・デバイス２３を用いて、収集したデータを処理し、分析するように動作する。特に、例えば遠隔コンピュータのようなコンピュータ・デバイス２４のユーザは、１または複数のコマンド４０を、キュー入力モジュール３８に入力する。このモジュールは、コマンド４０をマスタ・コンピュータ・デバイス２１へ転送する。１または複数のコマンド４０は一般に、収集するデータの識別情報、および／または、収集されたデータについてなされる分析の識別情報に関連する。その後、マスタ・コンピュータ・デバイス２１は、１または複数のコマンド４０を処理しその結果をコンピュータ・デバイス２４へ返すためにロード・バランサ・モジュール４２を実行する。
【００３７】
それゆえ、通信デバイス２８は、通信デバイス、通信ネットワーク、またはそれらのいくつかの組み合わせに関する要求されたデータを収集するため、少なくともデータ収集モジュール３３を格納するメモリ３１を有するコンピュータ・プラットフォーム２９を含む。データ収集モジュール３３は、ハードウェア、ソフトウェア、およびファームウェアの任意の組み合わせを含み、任意の所望データを収集するように動的に構成されるように動作することができる。コンピュータ・プラットフォーム２９はさらに、データ収集モジュール３３を実行するためのプロセッサ３５を含む。さらに、コンピュータ・プラットフォーム２９は、データ収集モジュール３３とプロセッサ３５との間の通信を可能にするアプリケーション・プログラミング・インタフェース（ＡＰＩ）３７を含みうる。
【００３８】
ＡＰＩ３７は、それぞれの通信デバイス上で実行するランタイム環境でありうる。１つのそのようなランタイム環境は、カリフォルニア州サンディエゴのＱｕａｌｃｏｍｍ社によって開発されたＢｉｎａｒｙ  Ｒｕｎｔｉｍｅ  Ｅｎｖｉｒｏｎｍｅｎｔ  ｆｏｒ  Ｗｉｒｅｌｅｓｓ（登録商標）（ＢＲＥＷ（登録商標））ソフトウェアである。例えば、無線コンピュータ・デバイス上でのアプリケーションの実行を制御するように動作するその他のランタイム環境も利用されうる。他の局面では、ＡＰＩ３７は、例えばマイクロソフト社のＷｉｎｄｏｗｓ（登録商標）、ＬＩＮＵＳ、およびＭＡＣ  ＯＳのようなオペレーティング・システムでありうる。オペレーティング・システムは、複数のプロセッサの実行を可能にする複数のプロセッサおよび／または実行スレッドのために提供される。
【００３９】
さらに、いくつかの局面では、プロセッサ３５は、ハードウェア、ファームウェア、ソフトウェア、およびこれらの組み合わせで具体化され、通信デバイス２８の機能、および、通信ネットワーク４４上の通信デバイス２８の操作性を可能にする様々な処理サブシステムを含む（図１）。例えば、処理サブシステムは、通信の開始および維持、ならびに通信デバイス２８内および／または通信デバイス２８の構成要素間のみならず、他のネットワーク・デバイスとのデータの交換を考慮している。１つの局面では、例えばセルラ電話におけるように、プロセッサ３５は、例えば、音、不揮発性メモリ、ファイル・システム、送信、受信、サーチャ、レイヤ１、レイヤ２、レイヤ３、主制御、遠隔手続、ハンドセット、電力管理、診断、デジタル信号プロセッサ、ボコーダ、メッセージング、コール・マネジャ、Ｂｌｕｅｔｏｏｔｈ（登録商標）システム、Ｂｌｕｅｔｏｏｔｈ（登録商標）ＬＰＯＳ、位置決め、位置決めエンジン、ユーザ・インタフェース、スリープ、データ・サービス、セキュリティ、認証、ＵＳＩＭ／ＳＩＭ（universal subscriber identity module/subscriber identity module）、音声サービス、グラフィックス、ＵＳＢ（universal serial bus）、ＭＰＥＧ（Moving Picture Experts Group）プロトコル・マルチメディアのようなマルチメディア、ＧＰＲＳ（General Packet Radio Service）、ショート・メッセージ・サービス（ＳＭＳ）、ショート音声サービス（ＳＶＳ（登録商標））、ウェブ・ブラウザ等のような処理サブシステムの１または組み合わせを含みうる。いくつかの局面では、データ収集モジュール３３は、１または複数の処理サブシステムからデータを収集する。このデータは、ログ・コード、例えば通信デバイス２８によって使用される通信プロトコルに対応するデータ・パケットのようなオーバ・ザ・エア・イベント、通信デバイス２８の１または複数のハードウェア構成要素および／またはソフトウェア構成要素を記述する例えば現在状態、利用量等のようなデータ、あるいはこれらの組み合わせを備えうる。
【００４０】
コンピュータ・デバイスはデータベース３０を取り扱い、本明細書に記載のロード・バランシングおよびデータ処理の局面の一部を実行する。データベース３０はさらに、１または複数の通信デバイス２８から収集したデータを格納しうる。
【００４１】
データベース３０は、構造化されたデータデータを集めたものでありうる。１つの局面では、データベース３０は、コンピュータ・デバイス２６上で動作する例えばＯＲＡＣＬＥ、ＭＹＳＱＬ、あるいは、マイクロソフト社のＡＣＣＥＳＳのようなデータベース管理システム（ＤＢＭＳ）によってイネーブルされうる。データベース３０は、例えばクラスタや冗長データベースのように、高い信頼性を与え、障害の可能性を低減する組込式冗長システムを含む。ＤＢＭＳは、データベース３０の行（しばしば、タプル（tuple）と称される）との読み書きや、例えばテーブル３２、３４、３６のようなデータベースの生成および削除を可能にする。図１は、データベース３０を、単一のコンピュータ・デバイス２６によって実現されるものと示しているが、データベース３０は、複数の冗長性を持つ多くのコンピュータ・デバイスによって実現されうる。さらに、データベース３０は、１より多いストレージ・メカニズム内に実装されうる。
【００４２】
データベース３０は、例えば図３乃至図５に示すようなテーブルから構成されうる。これらのテーブルは、列がデータの名前を示すデータ行を備えており、データ値が、テーブルの行にある。データベース３０のテーブルは、主要鍵を有しうる。データベース３０が主要鍵を有している場合、特定値を持つ１つの行のみが、テーブルのメンバとなりうる。一般に、ＤＢＭＳによって、コンピュータ・デバイス２２、２４、２６は、データベース３０内のテーブルから、行の読み書きが可能となる。一般に、行の値は、マスタ２１によってスレーブ２３へ送られたコマンド４０を含み、コンピュータ・メモリへの読み書きが可能な任意のタイプのデータでありうる。
【００４３】
図１、図３、および図４に示すように、局面では、データベース３０の２つのテーブル３２、３４が、１または複数のコマンド４０のステータスを保持するために使用される。コマンド・インデクス・テーブル３２は、おのおののコマンド４０と、処理のために分配された対応するサブ・コマンドとを追跡するために利用される。一方、サブ・コマンド・インデクス・テーブル３４は、おのおののサブ・コマンドのステータスと、コマンド４０に対するその関係とを追跡するために利用される。
【００４４】
１つの局面では、コマンド・インデクス・テーブル３２は、以下のフィールドを含んでいる。コマンド・セット識別子（ＣＭＤ  ＳＥＴ  ＩＤ）２６６は、コマンド・インデクス・テーブル３２のための主要鍵であり、それぞれのコマンド４０のためのユニークな識別子を備えている。コマンドの数２６８は、対応するコマンド４０を処理するために分配されたサブ・コマンドの合計数でありうる。コールバック機能２７０は、コマンド４０のグループが正しく実行された場合にコールされるべき、例えばスクリプトのようなメカニズムを備える。例えば、コールバック機能２７０は、コマンド４０のグループの結果を単一結果に集める動作と、コマンド４０のグループの新たな結果を生成するために、コマンド４０のグループの結果のうちの少なくとも１つについて実行する動作または機能等を備えうる。さらに、例えば、ユーザ・コマンド実行部４６や、例えば分配サービス４８のようなロード・バランサ４２のある部分が、コールバック機能２７０を実行または開始することができる。
【００４５】
サブ・コマンド・インデクス・テーブル３４は、実際のサブ・コマンドを格納し、そのサブ・コマンドのステータスを保持するために使用されうる。サブ・コマンド・インデクス・テーブル３４は、以下のフィールドを備えることができる。サブ・コマンド識別子（ＳＵＢ−ＣＭＤ  ＩＤ）２５０は、サブ・コマンド・インデクス・テーブル３４のおのおのの行のための主要鍵であり、ロード・バランサ４２によって分配される全てのサブ・コマンドについて生成されるユニークな識別子を含む。コマンド（ＣＭＤ）２５２は、割り当てられたコンピュータ・デバイスそれぞれのユーザ・コマンド実行部４６による処理のための、コマンド４０に対応する１つの単一サブ・コマンドでありうる。コールバック機能２５４は、コマンドのグループが正しく実行された場合にコールされるべき、例えばスクリプトのようなメカニズムを備える。コールバック機能ステータス２５６は、コールバック機能のステータスであって、例えば、１つの限定しない場合では、投入＝０、実行中＝１、実行済＝２である。コマンド（ＣＭＤ）状態２５８は、例えば、投入＝０、実行中＝１、実行済＝２のように、サブ・コマンドの状態に対応する値を備える。開始時刻２６０は、それぞれのサブ・コマンドが、実行のために、それぞれのユーザ・コマンド実行部４６へ送られる時刻を備える。コマンド（ＣＭＤ）セットＩＤ２６６は、それぞれのコマンド４０を参照するサブ・コマンドのおのおののグループに関連する識別子であり、ＣＭＤセットＩＤ２６６は、コマンド・インデクス・テーブル３２において確立されたそれぞれのコマンド４０の値に対応し、いくつかの局面では、ＣＭＤセットＩＤ２６６は、コールバック機能ｉｄとして使用される。アドレス２６４は、実行のためにそれぞれのサブ・コマンド４０が割り当てられるコンピュータ・デバイス２２の、例えばインターネット・プロトコル（ＩＰ）アドレスまたはネットワークＩＤ５６のような識別子でありうる。
【００４６】
したがって、コマンド・インデクス・テーブル３２およびサブ・コマンド・テーブル３４は、おのおののコマンド４０の分配された処理の管理および追跡を考慮しており、マスタ２１役に変わったデバイスが、システム２０の現在のステータスを判定可能とするメカニズムを提供する。
【００４７】
さらに、図１および図５に示すように、局面では、マスタ・テーブル３６は、マスタ２１の識別情報を保持し、どのコンピュータ・デバイス２２がマスタ２１になるのかを管理するために利用される。マスタ・テーブル３６は、以下のフィールドを備える。マスタ・テーブル３６のための主要鍵を備え、マスタが確立されたことを特定するマスタ・コード２８０。生成時刻２７６は、それぞれのマスタ・コード２８０が挿入された時刻であり、マスタ・アドレス２７８は、自分自身をマスタとして設定したコンピュータ・デバイス２２の、例えばＩＰアドレスやネットワークＩＤ５６のような識別子でありうる。マスタ・コード２８０が、マスタ２１を特定するそれぞれの行を示す予め定めた値を備えているのであれば、マスタ・アドレス２７８は、現在のマスタ２１であるコンピュータ・デバイスを識別するだろう。一般に、マスタ・テーブル３６は、どのコンピュータ・デバイスがマスタであるかを判定するために、マスタ２１とスレーブ２３との間のコードのセクションを解決するために使用されうる。複数のコンピュータ・デバイス２２があり。それらのおのおのは、ほとんど同時にマスタ２１になることを試みるので、コンピュータ・デバイスがマスタを決定できるように、ある通信手段が使用されねばならない。それゆえ、例えばＤｉｊｋｓｔｒａアルゴリズムのようなソフトウェア・セマフォー・ソリューションを実現または模擬するためにマスタ・テーブル３６が使用される。したがって、マスタ・コード２８０が、マスタ・テーブル３６の主要鍵として使用される場合、１つのコンピュータ・デバイスのみが、マスタ・テーブル３６にその識別情報を書き込み、マスタになることができる。したがって、どのコンピュータ・デバイス２２がマスタ２１になるのかを判定するために、スレーブ２３とマスタ２１のデータベース３０を使用することによって、および、マスタ２１のネットワークＩＤ５４を提供するためにデータベース３０を使用することによって、ゼロ単一障害点ロード・バランサのシステム２０の局面が実現される。
【００４８】
図１に戻って示すように、上述したように、コンピュータ・デバイス２４は、データを収集し収集したデータを分析するコマンド４０をユーザが発行するように動作するキュー入力モジュール３８を含む。特に、キュー入力モジュール３８は、ハードウェア、ソフトウェア、ファームウェア、データ、および、コンピュータ・デバイス２４に対してマスタ２１のロード・バランサ４２にコマンド４０を入力する機能を与えるように動作可能な命令群のうちの１つまたは任意の組み合わせを備えうる。いくつかの局面では、キュー入力モジュール３８は、テキスト・ベースであり、ユーザが、例えばコマンド・スクリプトのように、マスタ２１のロード・バランサ４２に送られるテキスト・コマンド４０を入力できるようにする。したがって、キュー入力モジュール３８は、コマンド４０が受信され、マスタ２１のロード・バランサ４２へ送られるようにすることによって、コマンド４０がシステム２０に入力されるようにする。
【００４９】
さらに、図１に示すように、コンピュータ・デバイス２２、２４、２６は、任意のタイプのコンピュータ・デバイスを備えうる。例えば、図１に例示するように、コンピュータ・デバイス２２、２４、２６は、例えばネットワーク・デバイス、サーバ、コンピュータ・ワークステーション等のような固定式のコンピュータ・デバイスを備えうる。コンピュータ・デバイス２２、２４、２６は、例示されたデバイスには限定されないが、さらに、有線通信ポータルまたは無線通信ポータルを有するポータブル・コンピュータと、有線通信ポータルおよび／または無線通信ポータルを有する任意のタイプのコンピュータ・デバイスとをさらに含みうることが理解されるべきである。さらに、コンピュータ・デバイス２２は、同様の方式で例示されているが、コンピュータ・デバイス２２のおのおのは、異なるタイプのコンピュータ・デバイスでありうることが注目されるべきである。さらに、コンピュータ・デバイス２２、２４、２６は、例えば遠隔スレーブであるか、あるいは、例えば遠隔サーバのように、エンド・ユーザを持たないが無線ネットワークまたは有線ネットワーク４４を介して単にデータを通信するその他の類似のコンピュータ・デバイスでありうる。代替局面では、コンピュータ・デバイス２２、２４、２６のおのおのは、マルチ・プロセッサ・システムでありうる。さらに、任意の数のコンピュータ・デバイス２２、２４、２６からなる任意の組み合わせが、システム２０において利用されうることが注目されるべきである。したがって、本装置および方法は、有線または無線通信ネットワーク４４に接続された任意の形式のコンピュータ・デバイス上で実行されうる。
【００５０】
さらに、（簡単のために、コンピュータ・デバイス２２を参照している）図６に示すように、コンピュータ・デバイス２２、２４、２６は、プロセッサ６６によって実行可能な命令群を有するメモリ６４と、それぞれのコンピュータ・デバイスとの通信を可能にする通信モジュール７４とを含むコンピュータ・プラットフォーム６２と通信するユーザ・インタフェース５７を含みうる。
【００５１】
ユーザ・インタフェース５７は、デバイス２２への入力を生成または受信するように動作可能な入力メカニズム５８と、デバイス２２のユーザによって使用される情報を生成および／または表示するように動作可能な出力メカニズム６０とを含む。例えば、入力メカニズム５８は、例えばキーバッドおよび／またはキーボード、マウス、タッチ・スクリーン・ディスプレイ、音声認識モジュールと関連するマクロフォン等のような少なくとも１つのメカニズムを含みうる。ある局面では、入力メカニズム５８は、コマンド４０の少なくとも一部からなるユーザ入力を与える。さらに、例えば、出力メカニズム６０は、ディスプレイ、オーディオ・スピーカ、触覚式フィードバック・メカニズム等を含むことができる。出力メカニズム６０は、グラフィック・ユーザ・インタフェース、音、例えば振動のような感覚等を生成しうる。
【００５２】
さらに、メモリ６４は、揮発性メモリや、たとえば読取専用メモリおよび／またはランダム・アクセス・メモリ（ＲＡＭおよびＲＯＭ）のような不揮発性メモリ、消去可能なプログラマブル読取専用メモリ（ＥＰＲＯＭ）、電子的消去可能なプログラマブル読取専用メモリ（ＥＥＰＲＯＭ）、フラッシュ・メモリ、および／または、コンピュータ・プラットフォームに一般的な任意のメモリを備えうる。さらに、メモリ６４は、アクティブ・メモリおよびストレージ・メモリを含みうる。これらは、電子ファイル・システムや、例えば、磁気媒体、光学媒体、テープ、ソフト、および／またはハード・ディスク、およびリムーバブル・メモリ要素のような２次および／または３次記憶デバイスを含む。
【００５３】
さらに、コンピュータ・プラットフォーム６２は、特定用途向けＩＣ（ＡＳＩＣ）でありうる少なくとも１つのプロセッサ６６、あるいは他のチップセット、論理回路、またはその他のデータ処理デバイスを含む。いくつかのオプションの局面では、破線で示すように、プロセッサ６６は、例えばメモリ６４内の任意のアプリケーションまたはモジュールのような常駐ソフトウェア構成要素７０をインタフェースするアプリケーション・プログラミング・インタフェース（ＡＰＩ）レイヤ６８を実行させることができる。
【００５４】
さらに、通信モジュール７４は、通信デバイス２２と通信ネットワーク４４（図１）との間で通信メッセージ５４（図１）を交換するように動作可能であることに加えて、それぞれの通信デバイス２２の様々な構成要素間での通信を可能にする。通信モジュール７４は、ハードウェア、ファームウェア、ソフトウェア、および／またはそれらの組み合わせで実現されることができ、さらに、デバイス内通信およびデバイス間通信で使用される全てのプロトコルを含む。さらに、通信モジュール７４は、本明細書に記載の装置および方法にしたがって、例えば通信メッセージ５４のような情報を送信および／または受信するように動作することが可能である。
【００５５】
図１に戻って示すように、いくつかの局面では、通信メッセージ５４は、要求したコンピュータ・デバイス２２が応答するよう要求するハートビート要求を表すか、あるいは、ハートビート要求または他のタイプの通信メッセージ５４の受信を示すアクノレッジメントを表すことができる。他の局面では、通信メッセージ５４は、スレーブ２３に送られるコマンド４０、または、マスタ２１へ送られるコマンド４０の実行結果を備えうる。さらに別の局面では、通信メッセージ５４は、データベース・テーブル３２、３４、３６の全てまたは一部の読取または書込のためのコマンドでありうる。さらに、別の局面では、通信メッセージ５４は、通信デバイス２８の動作に対応するデータを収集するために、通信デバイス２８へ送られるコマンドであることができ、通信メッセージ５４は、通信デバイス２８が収集したデータでありうる。一般に、通信メッセージ５４によって、通信デバイス２８および／またはコンピュータ・デバイス２２、２４、２６が、通信ネットワーク４４を介して通信できるようになる。通信メッセージ５４は、通信ネットワーク４４によって、１つのフォーマットから他のフォーマットへ変換されうることが注目されるべきである。例えば、通信メッセージ５４は、コンピュータ・デバイス２２からのＴＣＰ／ＩＰパケットとして始まり、通信パケット５４が通信デバイス２８へ送信されるために、無線フォーマットへ変換される。
【００５６】
さらに、図１に示すように、おのおののコンピュータ・デバイス２２のメモリは、全てあるいは少なくとも一部のネットワーク識別子（ＩＤ）５６を格納するように動作することができる。ネットワークＩＤ５６は、コンピュータ・デバイス２２、２４、２６および／または通信デバイス２８のための任意のタイプの識別子でありうる。いくつかの局面では、ネットワークＩＤ５６は、コンピュータ・デバイス２２、２４、２６のＩＰアドレスであるか、あるいは、例えばセルラ電話番号のような無線通信デバイス２８を識別するためのＩＤでありうる。いくつかの局面では、ネットワークＩＤ５６は、コンピュータ・デバイス２２、２４，２６または通信デバイス２８のネットワーク位置を直接的に識別できないかもしれないが、コンピュータ・デバイス２２、２４、２６または通信デバイス２８を位置決めするためにロード・バランサ４２によって使用される情報を提供することができる。
【００５７】
さらに、おのおののコンピュータ・デバイス２２のメモリは、コマンド４０の全てまたは少なくとも一部を格納するように動作可能でありうる。コマンド４０は、システム２０を実行するための任意のタイプのコマンドでありうる。コマンド４０は、単一のコマンド４０であるか、あるいは、コマンドのグループ、または例えばコマンド・スクリプトのようなサブ・コマンドでありうる。コマンド４０は、テキスト・コマンド、バイナリ実行形式を含むことができ、一般に、メモリ６４に格納され、システム２０の動作を指示する任意の形式の表現を含む。いくつかの局面では、コマンド４０は、無線デバイス管理システムのユーザ・マネジャのための一連のコマンド４０を含む。コマンド４０は、マスタ２１に対して、コマンド４０の実行結果をどこに送るかを指示するコマンドを含む。コマンド４０はさらに、他のデバイスによる実行のために意図された命令群を含みうる。例えば、１つの局面では、コマンド４０は、無線通信デバイス２８の動作に関する統計量を収集するように無線通信デバイス２８へ指示する無線通信デバイス２８のための命令群を含みうる。コマンド４０は、無線通信デバイス２８の動作に関する統計量の収集結果を、無線通信デバイス２８が送る場所、例えばデータベース３０、に関する命令群を含みうる。コマンド４０は、完了するのに何日も要しうるか、あるいは、直ちに実行可能なコマンド４０であるかもしれない。さらに、コマンド４０は、それぞれのコマンド４０に関連するサブ・コマンドを実行しているスレーブ２３から戻された結果データに更なる処理をするように指示する、マスタ２１のそれぞれのロード・バランサ４２のための命令を含みうる。さらに、マスタ２１は、コマンド４０の結果の分配、実行、および返信を容易にするために、コマンド４０に含まれていない追加情報を追加することができる。さらに、コマンド４０を実行することによって、それぞれのコンピュータ・デバイス２２上に格納され、マスタ２１またはデータベース３０またはその両方のように、ネットワーク上の予め定めた場所に戻されるデータを生成することができる。
【００５８】
図１および図７に示すように、ロード・バランサ４２は、それぞれのコンピュータ・デバイス２２内に格納され、それぞれのコンピュータ・デバイス２２によって実行されうる。ロード・バランサ４２は、ハードウェア、ソフトウェア、ファームウェア、データ、および、例えば、他のコンピュータ・デバイス２２へコマンドを配信する機能、あるいは他のコンピュータ・デバイス２２からコマンドを受信する機能をそれぞれのコンピュータ・デバイス２２に提供し、システム２０を管理するように動作可能な実行可能命令群のうちの１つまたは任意の組み合わせを備える。特に、おのおののコンピュータ２２のロード・バランサ４２は、３つの状態を持つことができる。これらのうちの第１の状態はマスタ状態であり、ここでは、マスタ２１（図１）が、コマンド４０を受信して、受信したコマンド４０を分配する。第２の状態は、スレーブ状態であり、ここでは、ロード・バランサ４２が、コマンド４０を受け取り、このコマンド４０を実行し、実行結果をマスタ２１に返すことによってスレーブ２３として動作する（図１）。第３の状態は、ロール・トランジション状態であり、ここでは、ロード・バランサ４２が、マスタ２１としてもスレーブ２３としても動作しないが、マスタ２１とスレーブ２３とのロール・トランジションを開始している。ロード・バランサ４２についてこれら３つの状態を用いることによって、スレーブ２３とマスタ２１との両方のために単一の方法を用いることが可能となり、スレーブ２３は、マスタ２１へロール・トランジションし、マスタ２１は、スレーブ２３にロール・トランジションし、もって、コントローラがそれぞれ、そのようなトランジションを管理する必要性を回避することが注目されるべきである。
【００５９】
上述したように、ロード・バランサ４２は、分配サービス・モジュール４８、ヘルス・マネジメント・サービス５０、およびデータベース・サービス・モジュール５２の３つのモジュールに分割される。しかしながら、ロード・バランサ４２によって提供される機能は、その他のモジュールに分割されうるし、あるいは、単一のモジュールに組み入れられうる。それゆえ、幾つかの局面では、ロード・バランサ４２は、コンピュータ・デバイス２２に、少なくとも、他のコンピュータ・デバイス２２の対応するロード・バランサ４２と通信する機能、他のコンピュータ・デバイス２２にコマンドを分配するか、あるいは他のコンピュータ・デバイスからコマンドを受信する機能、システム２０のヘルス状態を管理する機能、および、データベース３０の読み書きをする機能を提供する。
【００６０】
ヘルス・メンテナンス・サービス５０は、それぞれのコンピュータ・デバイス２２のメモリに格納されるか、あるいはメモリから実行されうる。ヘルス・メンテナンス・サービス５０はそれぞれ、それぞれのコンピュータ・デバイス２２に、システム２０のヘルスを維持するための機能を提供するように動作可能なハードウェア、ソフトウェア、ファームウェア、データ、および実行可能命令群のうちの１つまたは任意の組み合わせを備える。一般に、ヘルス・メンテナンス・サービス５０は、マスタ２１が適切に機能していることを保証するために、コンピュータ・デバイス２２がスレーブ２３として動作する機能を提供する。さらに、マスタが適切に機能していない場合、ヘルス・メンテナンス・サービス５０は、コンピュータ・デバイスが、マスタ２１になることを試みるスレーブ２３として動作する機能を提供する。さらに、ヘルス・メンテナンス・サービス５０は、スレーブ２３が適切に機能していることを保証するために、コンピュータ・デバイス２２がマスタ２１として動作する機能を提供する。スレーブ２３が適切に機能していない場合、ヘルス・メンテナンス・サービス５０は、コンピュータ・デバイス２２が、正しく機能していないスレーブ２３に割り当てられたコマンドを再分配するマスタ２１として動作する機能を提供する。
【００６１】
１つの局面では、ヘルス・メンテナンス・サービス５０は、スレーブ２３とマスタ２１とが、システム２０のヘルスを判定するために通信できるように、通信メッセージ５４を用いる。スレーブ２３は、マスタ２１に通信メッセージ５４を規則的に送信し、マスタ２１に対して、この要求をアクノレッジした通信メッセージ５４を戻すように求める。以下に説明する図８は、ヘルス・メンテナンス・アルゴリズムによってシステム２０のヘルスを維持し、ロール・トランジション・アルゴリズムによって、ロード・バランサ４２をスレーブ２３とマスタ２１との間で遷移させるヘルス・メンテナンス・サービス５０の幾つかの局面を例示する。ヘルス・メンテナンス・アルゴリズムとロール・トランジション・アルゴリズムとの両方は、ロード・バランサの全てのコンピュータ・デバイスに共通であり、これによって、コンピュータ・デバイスは、外部コントローラからの助けを必要とすることなく、ロード・バランサを管理できるようになることが着目されるべきである。いくつかの局面では、ヘルス・メンテナンス・サービス５０あるいはロード・バランサ４２は、コンピュータ・デバイス２２がいつ通信可能であるか、および、コンピュータ・デバイス２２がいつ通信不能であると判定されるかを判定するために使用される予め定めた時間７６を備えうる。予め定めた時間７６は、例えば通信ネットワーク４４の負荷のような１または複数の要因に基づいて、ハートビートとも称される、通信メッセージ５４を待つ時間を変える実行可能な手続きでありうる。さらに、幾つかの局面では、ヘルス・メンテナンス・サービス５０は、スレーブ２３がマスタ２１へのロール・トランジションが可能となる前に、スレーブ２３のための実際のパフォーマンス測定値７８が、マスタ・パフォーマンス要件８２で定義された１または複数の基準を満足するかをチェックするだろう。
【００６２】
例えば、パフォーマンス測定値７８は、メモリの実際の量であるか、あるいは、実際の同時処理数であることができ、それぞれのコンピュータ・デバイス２２は、直ちに実行可能である。一方、マスタ・パフォーマンス要件８２は、デバイス２２がマスタ２１になれるために必要とされるメモリの最低量であるか、あるいは、スレーブ２３がマスタ２１になることが許可される前にスレーブ上で実行されうる同時処理の最低数でありうる。
【００６３】
図８に示すように、システム２０のヘルスを維持するための方法２００の１つの限定しない例は、（ｉ）マスタとスレーブとの間をロール・トランジションすること、（ｉｉ）マスタとして動作すること、（ｉｉｉ）スレーブとして動作することを可能にするために、ロード・バランサ・モジュール４２のヘルス・メンテナンス・サービス５０によっておのおののコンピュータ・デバイス２２によってなされる動作を含む。（ｉｉ）と（ｉｉｉ）とはともに、スレーブのヘルスを検証することと、マスタのヘルスを確認することとを含む。ブロック２０２、２０４、２０６、２０８、２１０および２１２に示すように、ロール・トランジション動作は、おのおののコンピュータ・デバイス２２がマスタになることを試みること、または、マスタへの接続が確立されない場合にはマスタになることを試みることを可能にする共通のロール・トランジション・アルゴリズムに組み込まれる。さらに、ブロック２２０、２２２、２２４および２２６に示すように、マスタとして動作するヘルス関連動作は、検証マスタ・ヘルスを含み、スレーブのヘルスをチェックし、健全ではないかあるいは応答しないと判定されたスレーブに送られる任意のコマンドを再配分する。さらに、ブロック２１４、２１６および２１８に示すように、スレーブとして動作するヘルス関連動作は、検証スレーブ・ヘルスを含み、マスタのヘルスをチェックし、マスタのヘルスが検証されない場合、ロール・トランジション状態に入ってマスタになることを試みることによってマスタの潜在的な障害から回復することを試みる。ブロック２２０、２２２、２２４および２２６においてマスタとして動作するヘルス関連動作と、ブロック２１４、２１６および２１８においてスレーブとして動作するヘルス関連動作とは、ロード・バランサのコンピュータ・デバイスに共通の、そしてこれらコンピュータ・デバイスによって実行可能なヘルス・メンテナンス・アルゴリズムに組み込まれうることが着目されるべきである。したがって、方法２００によって、システム２０は、正しく機能しておらず応答しないコンピュータ・デバイスへ応答することを可能とし、システム２０に追加される新たなコンピュータ・デバイスを考慮し、システム２０を起動する方法を提供する。
【００６４】
ブロック２００は、開始ブロックであり、ロード・バランサ４２は、ロール・トランジションを初期化する状態で始まる。システム２０の一部であるコンピュータ・デバイス２２のおのおのは、ロード・バランサ４２を実行することによって、ロード・バランサ４２の多くのコピーが、異なるコンピュータ・デバイス２２、２４、２６上で同時に実行できるが、ロード・バランサ４２のおのおのは、独立しており、潜在的に異なる状態でありうることが理解されるべきである。
【００６５】
ブロック２０２において、ロード・バランサ４２は、マスタ２１になろうとするだろう。１つの限定しないケースでは、ロード・バランサ４２は、マスタ・テーブル３６（図１および図５）内に、例えば定数値であるマスタ・コード２８０（図５）、および、それぞれのロード・バランサ４２を実行しているコンピュータ・デバイス２２のネットワークＩＤ５６を持つ行を挿入することを試みることによって、マスタ２１になることを試みるだろう。この場合、ロード・バランサ４２のうちの１つのみが、マスタ・テーブル３６への書き込みを成功できるように、マスタ・コード２８０が、データベースの主要鍵となる。マスタ・テーブル３６の主要鍵の定数値を有するマスタ・コード２８０およびマスタ・テーブル３６を用いることは、マスタ２１の識別情報の共有リソースを管理するために使用されうるデータベース・テーブルが使用される唯一の方法であることが着目されるべきである。他の方法は以下の通りである。
【００６６】
ブロック２０４において、ロード・バランサ４２は、マスタ２１のネットワークＩＤ５６を読み取るために、マスタ・テーブル３６を読み取る。１つの局面では、これは、マスタ２１のＩＰアドレスでありうる。
【００６７】
ブロック２０６において、ロード・バランサ４２は、ロード・バランサ４２を実行しているコンピュータ・デバイス２２のネットワークＩＤ５６を、マスタ２１のネットワークＩＤ５６と比較する。ネットワークＩＤ５６が同じである場合、ロード・バランサ４２は、マスタ２１になることに成功し、ロード・バランサ４２は、マスタ状態に入る（ブロック２２０）。ネットワークＩＤ５６が同じではない場合、ロード・バランサ４２は、マスタ２１にはならず、スレーブ状態に移行する前に、さらなる動作がある。
【００６８】
ブロック２０８において、ロード・バランサ４２は、マスタ・テーブル３６から読み取られたネットワークＩＤ５６を用いて、マスタ２１に接続することを試みる。
【００６９】
ブロック２１０において、ロード・バランサ４２は、マスタ２１への接続が成功したかを判定する。１つの局面では、ロード・バランサ４２は、予め定めた待機時間に基づいて、マスタ２１への接続が成功したかを判定する。
【００７０】
マスタ２１への接続が成功しなければ、ブロック２１２において、ロード・バランサ４２は、マスタ・テーブル３６から読み取られたマスタ２１のネットワークＩＤ５６とマスタ・コード２８０とを用いて、マスタ・テーブル３６からマスタ２１を削除することを試みるだろう。１つの局面では、ロード・バランサ４２は、マスタ２１が通信可能ではないのであれば、適切に機能しないと仮定し、マスタ２１を削除することを試みる。
【００７１】
ブロック２１０においてマスタへの接続が成功すれば、ブロック２１４において、ロード・バランサ４２は、スレーブ２３として動作する。一般に、スレーブとして動作することは、マスタ２１からコマンドを受け取って実行し、次に、その結果をマスタ２１に返すか、例えばデータベースのように結果が格納される場所へ参照を返すことを備える。いくつかの局面では、コマンド４０を受け取り、コマンド４０の実行結果を返すことは、ＴＣＰ／ＩＰによる通信メッセージ５４を用いてなされる。
【００７２】
ブロック２１６において、スレーブ２３として動作するロード・バランサ４２は、マスタ・テーブル３６から読み取られたマスタ２１のネットワークＩＤ５６を用いて、ハートビートを備える通信メッセージ５４をマスタ２１へ送る。いくつかの局面では、マスタ２１のロード・バランサ４２は、スレーブから受信したハートビートに基づいて、スレーブＩＤテーブル８４（図２）を構築することができる。
【００７３】
ブロック２１８において、スレーブ２３として動作するロード・バランサ４２は、アクノレッジメントを備える通信メッセージ５４がマスタ２１から受信されたかを判定する。アクノレッジメントがマスタ２１から受信されない場合、スレーブ２３として動作するロード・バランサ４２は、マスタ２１が適切に機能していないと仮定し、ブロック２１２に進み、マスタ２１を削除することを試みる。マスタ２１からのアクノレッジメントが受信されると、スレーブ２３として動作するロード・バランサ４２は、ブロック２１４へ戻る。１つの局面では、マスタ２１が通信可能ではないと判定し、そのマスタ２１が適切に機能していないと仮定するまで、ロード・バランサ４２は、アクノレッジメントを待つために、予め定めた時間を用いる。
【００７４】
ブロック２０６に戻って、それがマスタ２１であるとロード・バランサ４２が判定した場合、ロード・バランサ４２は、ブロック２２０において、マスタ２１として動作する。一般に、マスタ２１として動作することは、システム２０のヘルスを維持することと、スレーブ２３が実行するコマンドを送ることと、コマンドを実行するスレーブ２３の結果を受信することと、サブ・コマンドのグループ内の全てのコマンドが実行されたかを確認することと、スレーブ２３のおのおのが適切に機能しているかを判定することとに関連するタスクを含む。
【００７５】
ブロック２２２において、ロード・バランサ４２は、スレーブ２３から受信したおのおののハートビート５４に応答して、アクノレッジメントを備える通信メッセージ５４を送る。さらに、ロード・バランサ４２は、スレーブ２３のおのおのにハートビート５４を送る。いくつかの局面では、ハートビートとアクノレッジメントは、ＴＣＰ／ＩＰを用いて送られる。マスタ２１は、例えばスレーブＩＤテーブル８４のようなスレーブ２３のネットワークＩＤ５６のリストを保持し、このリストを、スレーブ２３から受信したハートビートに基づいて更新する。
【００７６】
ブロック２２４において、ロード・バランサ４２は、スレーブ２３のおのおのがハートビート・メッセージにアクノレッジメントを送ったか否かを判定する。ロード・バランサ４２は、おのおののスレーブ２３からのアクノレッジメントのために予め定めた時間待機することに基づいてこの判定を行う。
【００７７】
ブロック２２６では、ロード・バランサ４２は、通信可能ではないことに基づいて、適切に機能していないと判定されたスレーブ２３のおのおのに割り当てられたコマンドを再分配する。いくつかの局面では、ロード・バランサ４２は、スレーブのパフォーマンス測定値またはその他幾つかの予め定めた判定基準に基づいて、スレーブ２３が適切に機能しているかを判定することができる。その後、ロード・バランサ４２はブロック２２０に戻る。
【００７８】
したがって、ロード・バランサ４２は、コンピュータ・デバイス２２のおのおのがスレーブ２３またはマスタ２１の何れかになることを許可することによって、および、スレーブ２３とマスタ２１とのおのおのが適切に機能しているかを規則的に判定することによって、システム２０のヘルスを維持するように動作することが可能である。
【００７９】
さらに、図１および図７に示すように、分配サービス・モジュール４８が、コンピュータ・デバイス２２のメモリに格納され、そこから実行されうる。分配サービス・モジュール４８は、ハードウェア、ソフトウェア、ファームウェア、データ、および、サブ・コマンドのリストでありうるコマンド４０を、スレーブ２３の各ユーザ・コマンド実行部４６へ、および／または、マスタ２１のユーザ・コマンド実行部４６へ分配する機能を、それぞれのコンピュータ・デバイス２２に提供し、次に、実行されたコマンドを統合し、いくつかの局面では、キュー入力モジュール３８に応答して結果を戻すように動作可能な実行可能命令群のうちの１または任意を備えうる。さらに、分配サービス・モジュール４８は、コンピュータ・デバイス２２が、適切に機能しなくなったスレーブ２３へ分配されたコマンドを再分配することを可能にする。さらに、分配サービス・モジュール４８は、キュー入力モジュール３８が、システム２０の実行のためにコマンド４０を追加することを可能にする。いくつかの局面では、分配サービス・モジュール４８は、どのコンピュータ・デバイス２２がコマンド４０を分配するかを判定することによって、システム２０の垂直負荷平準のみならず水平負荷平準を保つ。水平平準は、スレーブ２３および／マスタ２１にわたってコマンド４０を平準化することを称する。垂直平準は、単一のコンピュータ・デバイス２２に割り当てられる負荷の量を平準化することを称する。１つの限定しないケースでは、例えば、分配サービス・モジュール４８は、スレーブ２３と通信して、スレーブ２３の負荷を示す利用度を、スレーブ２３から受信する。その後、分配サービス・モジュール４８は、受信した利用度に基づいて、どのスレーブ２３にコマンドを分配するのかを決定する。さらに、あるいは、その代わりに、分配サービス・モジュール４８は、例えば、スレーブ２３のおのおのが取り扱うことができる処理の最大数のような、スレーブ２３から受信した他の情報に基づいて、分配決定を行う。いくつかの局面では、分配サービス４４は、マスタ２１にコマンド３６を分配することができる。
【００８０】
いくつかの局面では、分配サービス・モジュール４８は、データベース３０を用いることにより、コマンド４０のステータスを保持することができる。１つの限定しない例では、図１、図３、および図４に示すように、データベース３０の２つのテーブル３２、３４が使用されうる。いくつかの局面では、分配サービス・モジュール４８は、サブ・コマンド・インデクス・テーブル３４を規則的に更新し、マスタ２１がうまく機能しない場合、新たなマスタ２１が、このサブ・コマンド・インデクス・テーブル３４を用いて、完了するワークを失うことなく、コマンドの分配を続けることができる。さらに、分配サービス・モジュール４８は、おのおののコマンド４０の処理の分配を追跡するために、コマンド・インデクス・テーブル３２を使用することができる。
【００８１】
したがって、コマンド４０を維持するためにデータベース３０を用いる分配サービス・モジュール４８によって、および、サブ・コマンド・インデクス・テーブル３４およびコマンド・インデクス・テーブル３２を規則的に更新することによって、マスタ２１が、適切に機能することを停止した場合、新たなマスタ２１が、スレーブ２３のワークを失うことなくコマンド４０を分配し続け、これによって、ゼロ単一障害点ロード・バランサのシステム２０に寄与することができる。
【００８２】
さらに、１つの限定しないケースでは、分配サービス・モジュール４８は、スレーブ２３にコマンド４０を分配するために通信メッセージ５４を使用することができる。さらに、スレーブ２３は、結果をマスタ２１に返すためにも通信メッセージ５４を用いることができる。
【００８３】
さらに、図１および図７に示すように、データベース・サービス・モジュール５２は、メモリ６４に格納されるか、メモリ６４から実行されうる。データベース・サービス・モジュール５２は、ハードウェア、ソフトウェア、ファームウェア、データ、および、それぞれのコンピュータ・デバイス２２へ、データベース３０への読み書き機能を提供するように動作可能な実行可能な命令群のうちの１または任意の組み合わせを備えうる。いくつかの局面では、データベース・サービス・モジュール５２は、コンピュータ・デバイス２２がデータベース３０へ読み書きするための便利な手段を提供するために、例えばＯＲＡＣＬＥのようなデータベース管理システムのためのアプリケーション・プログラム・インタフェースを使用することができる。したがって、コンピュータ・デバイス２２は、コンピュータ・デバイス２２が、データベース３０のテーブル３２、３４、３６の行またはタプルへ読み書きすることを可能にする。
【００８４】
さらに、図１に示すように、ユーザ・コマンド実行部４６が、それぞれのコンピュータ・デバイス２２のメモリに格納されるか、そこから実行されうる。ユーザ・コマンド実行部４６は、ハードウェア、ソフトウェア、ファームウェア、データ、および、それぞれのコンピュータ・デバイス２２へ、コマンド４０を実行する機能を提供するように動作可能な実行可能な命令群のうちの１または任意の組み合わせを備えうる。いくつかの局面では、ユーザ・コマンド実行部４６は、コマンド４０を実行するためにスレッドを分岐させることができる。他の局面では、ユーザ・コマンド実行部４６は、コマンド４０を直接的に実行するアプリケーション・プログラムでありうる。一般に、ユーザ・コマンド実行部４６は、コンピュータ・デバイス２２が、コンピュータ・デバイス２２において任意のコマンド４０を実行することを可能にし、さらに、例えば通信デバイス２８のような遠隔デバイスと通信するための機能を提供することができる。一般に、ユーザ・コマンド実行部４６は、コマンドを取り出して実行し、その結果を、通信ネットワーク４４を介してマスタ２１へ送る。代替例において、あるいはそれに加えて、ユーザ・コマンド実行部４６は、その結果を、データベース３０および／またはスレーブ２３および／またはマスタ２１内のメモリまたはストレージの幾つかの形態で格納することができる。したがって、ユーザ・コマンド実行部４６は、コンピュータ・デバイス２２がコマンドを実行することを可能にする。
【００８５】
図１に示すように、それに加えて、および／または、その代わりに、ロード・バランサ４２は、オペレーティング・システムのスレッドを用いて、システム２０の機能をイネーブルすることができる。便宜上、スレッドの機能は、ロード・バランサ４２のサブ・モジュールの機能にリンクすることなく説明されていることに注意されたい。１つの限定しない例では、マスタ２１のためコンピュータ・デバイス２２で生成されたスレッドは、そのタスクが、データベース・ハンドル・スレッドを生成することと、スレーブ２３との通信のためにユーザ定義されたポート番号でＴＣＰ／ＩＰサーバを実行することと、マスタ２１と通信するおのおののスレーブ２３のために個別のスレーブ・ハンドル・スレッドを生成することとを含むマスタ・スレッドを備える。データベース・ハンドル・スレッドのタスクは、データベース・テーブル３２、３４、３６を読み書きすることを含む。スレーブ・ハンドル・スレッドのタスクは、スレーブ２３が未だに機能していることを確認するためにスレーブ２３にメッセージを送ることと、スレーブ２３にコマンドを送ることと、コマンド４０を実行したスレーブ２３の結果を受信することとを含む。スレーブ２３のためコンピュータ・デバイス２２で生成されたスレッドは、そのタスクが、マスタ２１とのＴＣＰ／ＩＰ接続を行うことと、パフォーマンスに関する情報（例えば、スレーブ２３上で動作可能な同時プロセスの最大数）をマスタ２１に送ることと、マスタ２１にハートビートを送ることと、マスタからハートビートを受信することと、マスタ２１へアクノレッジメントを送り、マスタ２１からアクノレッジメントを受信することとを含むスレーブ・スレッドを備える。スレーブ２３およびマスタ２１は、そのタスクが、マスタ２１から受信したコマンドを実行することを含む次の分岐プロセスを備えうる。したがって、マスタ２１およびスレーブ２３の機能は、スレッド・オペレーティング・システムを用いてイネーブルされうる。
【００８６】
さらに、図１に再び示すように、通信ネットワーク４４は、任意のデータおよび／または音声通信ネットワークを備えうる。例えば、通信ネットワーク４４は、以下のうちの何れか１つまたは任意の組み合わせの全てまたは一部を備えうる。有線電話ネットワークまたは無線電話ネットワーク、地上電話ネットワーク、衛星電話ネットワーク、例えば赤外線通信協会（ＩｒＤＡ）のような赤外線ネットワーク・ベースのネットワーク、短距離無線ネットワーク、Ｂｌｕｅｔｏｏｔｈ（登録商標）技術ネットワーク、ＺｉｇＢｅｅ（登録商標）プロトコル・ネットワーク、超広帯域（ＵＷＢ）プロトコル・ネットワーク、ホーム無線周波数（ＨｏｍｅＲＦ）ネットワーク、シェアド無線アクセス・プロトコル（ＳＷＡＰ）ネットワーク、例えば無線イーサネット（登録商標）互換性アライアンス（ＷＥＣＡ）ネットワークや無線フィディリティ・アライアンス（Ｗｉ−Ｆｉアライアンス）ネットワークや８０２．ｘｘネットワークのような広帯域ネットワーク、パケット・データネットワーク、データ・ネットワーク、インターネット・プロトコル（ＩＰ）マルチメディア・サブシステム（ＩＭＳ）ネットワーク、公衆交換ネットワーク、例えばインターネットのような公衆異種混合ネットワーク、プライベート通信ネットワーク、カリフォルニア州サンディエゴのＱｕａｌｃｏｍｍ社から利用可能なＭｅｄｉａＦＬＯ（登録商標）システムを含むフォワード・リンク・オンリー（ＦＬＯ）ネットワークのようなマルチキャスト・ネットワーク、例えば、衛星用ＤＶＢ−Ｓ、ケーブル用ＤＶＢ−Ｃ、地上テレビ用のＤＶＢ−Ｔ、携帯用地上テレビ用のＤＶＢ−Ｈのようなデジタル・ビデオ・ブロードキャスト（ＤＶＢ）ネットワーク、および、陸上バイル無線ネットワーク。
【００８７】
さらに、通信ネットワーク４４の幾つかの局面に含まれる電話ネットワークの例は、例えば、符号分割多元接続（ＣＤＭＡ）、広帯域符号分割多元接続（ＷＣＤＭＡ）、ユニバーサル・モバイル通信システム（ＵＭＴＳ）、アドバンスト・モバイル電話サービス（ＡＭＰＳ）、時分割多元接続（ＴＤＭＡ）、周波数分割多元接続（ＦＤＭＡ）、直交周波数分割多元接続（ＯＦＤＭＡ）、グローバル移動体通信システム（ＧＳＭ）、単一キャリア（１Ｘ）ラジオ放送技術（ＲＴＴ）、エボリューション・データ・オンリー（ＥＶ−ＤＯ）技術、
汎用パケット無線サービス（ＧＰＲＳ）、エンハンスト・データＧＳＭ環境（ＥＤＧＥ）、高速ダウンリンク・データ・パケット・アクセス（ＨＳＰＤＡ）、アナログおよびデジタル衛星システム、および、無線通信ネットワークおよびデータ通信ネットワークのうちの少なくとも１つで使用されうるその他の技術／プロトコル、のようなアナログおよびデジタルのネットワーク／技術のうちの１つまたは任意の組み合わせのうちの少なくとも一部を含む。
【００８８】
図９に示すように、動作中、スレーブ・デバイスにおけるゼロ単一障害点ロード・バランサ・システムの方法の１つの限定しない場合は、マスタが機能しているかを判定することを備える（ブロック３００）。例えば、１つの限定しないケースでは、図１および図６に示すように、スレーブ２３が、マスタ２１へ通信メッセージ５４を送り、マスタ２１からのアクノレッジメント５４を待つ。スレーブ２３は、スレーブ２３がマスタ２１へ通信メッセージ５４を送ってから経過した予め定めた時間７６（図２）に基づいて、マスタ２１が機能しているかの判定を行う。あるいは他の局面では、スレーブ２３は、マスタ２１のいくつかのパフォーマンス測定値に基づいてこの判定を行う。
【００８９】
この方法はさらに、マスタが機能していない場合、少なくとも１つの他のスレーブを用いて通信を管理するために、データベースを用いることによって、マスタになることを試みる（ブロック３０２）。例えば、図１、図５、および図６に示すように、１つの限定しないケースでは、スレーブ２３は、マスタ・テーブル３６に書き込みを行うことができる。スレーブ２３は、セマフォー（semaphore）を実現するために、Ｄｉｊｋｓｔｒａアルゴリズムの幾つかの変形を実施することができるか、あるいは代替例では、スレーブ２３は、おのおののスレーブ２３についてマスタ・テーブル３６内の単一の行またはタプルを用いて、マスタ・テーブル３６に対する主要鍵でもあるフィールドのための同じ定数値を持つ行を設定することを試みる。これによって、スレーブ２３のうちの１つのみが、マスタ・テーブル３６内の行に書き込まれ、新たなマスタ２１になる。
【００９０】
オプションとして、この方法はさらに、実行するための少なくとも１つのコマンドを受信することと、コマンドの実行結果をマスタに送ることとを含む。図１に示すように、スレーブ２３は、実行するコマンド４０を受信し、そのコマンド４０を実行し、結果をマスタ２１に返す。いくつかの局面では、スレーブ２３は、実行結果をデータベース３０に書き込み、この実行が完了したことを示すインジケーションをマスタ２１に送る。スレーブ２３は、幾つかの局面において、ＴＣＰ／ＩＰを用いて送られる通信メッセージ５４を用いてマスタ２１と通信することができる。
【００９１】
オプションとして、この方法はさらに、マスタからメッセージを受信することと、マスタにアクノレッジメントを送ることとを含む（ブロック３０６）。１つの限定しないケースでは、例えば、スレーブ２３は、スレーブ２３がマスタからの通信メッセージ５４にアクノレッジすることを要求する通信メッセージ５４をマスタ２１から受信する。マスタ２１およびスレーブ２３は、ローカル・エリア・ネットワーク（ＬＡＮ）を用いて、ＴＣＰ／ＩＰによって通信することができる。
【００９２】
図１０に示すように、動作中、マスタ・デバイスにおけるゼロ単一障害点ロード・バランサのための方法の１つの限定しないケースは、マスタによって実行されないコマンドのおのおのを、複数のスレーブのうちの１つへ割り当てることを備える（ブロック４００）。例えば、１つの限定しないケースでは、図１および図３に示すように、マスタ２１は、通信メッセージ５４を用いてコマンド４０をスレーブ２３に割り当て、コマンド４０と、コマンド４０に割り当てられたスレーブ２３との両方を、サブ・コマンド・インデクス・テーブル３４へ書き込む。
【００９３】
この方法はさらに、コマンドおよび対応する割当をデータベースに格納することを含む（ブロック４０２）。ここで、おのおのの割当は、コマンドに割り当てられたマスタまたはスレーブの識別情報を備える。例えば、１つの限定しないケースでは、図１、図４、および図５に示すように、コマンド４０のステータスを保持するために、データベース３０の２つのテーブル３２、３４が使用されうる。
【００９４】
この方法はさらに、複数のスレーブのうちのおのおのが機能しているかを判定することを含む（ブロック４０４）。例えば、１つの限定しないケースでは、図１および図３に示すように、マスタ２１は、スレーブ２３のおのおのに通信メッセージ５４を送り（図３のブロック２２２）、スレーブ２３が予め定めた時間内に通信メッセージ５４を返さないのであれば、マスタ２１は、スレーブ２３が機能していないと仮定するだろう。
【００９５】
この方法はさらに、もしもスレーブが機能していないのであれば、スレーブに割り当てられたコマンドのおのおのを、複数のスレーブ２３のうちの少なくとも１つに割当てることを含む（ブロック４０６）。例えば、１つの限定しないケースでは、図１および図３に示すように、マスタ２１は、コマンドを他のスレーブ２３に再び割り当てる（図８のブロック２２６）。マスタ２１は、サブ・コマンド・インデクス・テーブル３４を調べ、機能していないおよび／または通信可能ではないスレーブ２３に割り当てられたおのおののコマンド４０について、他のスレーブ２３へ再割り当てする。
【００９６】
本明細書で開示された局面に関連して説明された例示的な様々なロジック、論理ブロック、モジュール、および回路は、汎用プロセッサ、デジタル信号プロセサ（ＤＳＰ）、特定用途向けＩＣ（ＡＳＩＣ）、フィールド・プログラム可能ゲート・アレイ（ＦＰＧＡ）またはその他のプログラム可能論理回路、ディスクリート・ゲートまたはトランジスタ・ロジック、ディスクリート・ハードウェア構成要素、あるいは本明細書に記述された機能を実行するために設計されたこれら任意の組み合わせを用いて実施または実現されうる。汎用プロセッサは、マイクロプロセッサであるかもしれないが、代替例として、このプロセッサは、従来式プロセッサ、コントローラ、マイクロコントローラ、または状態機械でありうる。プロセッサはまた、例えばＤＳＰとマイクロプロセッサの組み合わせ、複数のマイクロプロセッサ、ＤＳＰコアと連携する１または複数のマイクロプロセッサ、あるいはその他任意の構成のようなコンピュータ・デバイスの組み合わせとして実現されうる。
【００９７】
さらに、本明細書で開示された局面と連携して説明される方法またはアルゴリズムのステップおよび／または局面は、ハードウェアによって、プロセッサによって実行されるソフトウェア・モジュールによって、あるいはこれら２つの組み合わせによって具体化される。ソフトウェア・モジュールは、ＲＡＭメモリ、フラッシュ・メモリ、ＲＯＭメモリ、ＥＰＲＯＭメモリ、ＥＥＰＲＯＭメモリ、レジスタ、ハード・ディスク、リムーバブル・ディスク、ＣＤ−ＲＯＭ、あるいは当該技術で周知の記憶媒体の形態で存在しうる。典型的な記憶媒体は、プロセッサが情報を読み書きできるように、プロセッサに接続されうる。代替例では、記憶媒体は、プロセッサに統合されうる。さらに、いくつかの局面では、プロセッサおよび記憶媒体は、ＡＳＩＣに存在することができる。さらにＡＳＩＣは、ユーザ端末に存在することができる。代替例では、プロセッサおよび記憶媒体は、ユーザ端末内の別々の構成要素として存在することができる。さらに、いくつかの局面では、少なくとも１つのプロセッサは、コンピュータに対して、本明細書に記載の任意の方法またはアルゴリズムのステップおよび／または動作を実行させる１または複数のモジュールを備える。さらに、いくつかの局面では、方法またはアルゴリズムのステップおよび／または動作は、コンピュータ・プログラム製品に組み込まれうるコードまたは命令群の１または任意の組み合わせまたはセットとして、機械読取可能媒体および／またはコンピュータ読取可能媒体上に存在することができる。
【００９８】
前述した開示は、例示的な局面を説明しているが、様々な変形および修正が、説明された局面、および／または、特許請求の範囲で定義された局面の範囲から逸脱すること無くなされうることが着目されるべきである。さらに、説明された局面の構成要素は、単数として説明または特許請求されているが、もしも単数に対する限定が明示的に述べられていないのであれば、複数も考慮される。さらに、そうではないと述べられていないのであれば、任意の局面の全てまたは一部が、他の任意の局面の全てまたは一部とともに利用されうる。
【図１】
2010511964.tif 000003
【図２】
2010511964.tif 000004
【図３】
2010511964.tif 000005
【図４】
2010511964.tif 000006
【図５】
2010511964.tif 000007
【図６】
2010511964.tif 000008
【図７】
2010511964.tif 000009
【図８】
2010511964.tif 000010
【図９】
2010511964.tif 000011
【図１０】
2010511964.tif 000012
【国際調査報告】
2010511964.tif 000013
2010511964.tif 000014
2010511964.tif 000015