(57)【特許請求の範囲】
【請求項１】
各々がプロセッサ及びメモリを含む複数のサーバと、
プロセッサ及びメモリを含む境界サーバであって、
トランザクションの要求を受信し、前記トランザクションは複数のタスクを行うことによって遂行することができ、
前記複数のタスクのうちの第１のタスクを特定し、
前記第１のタスクの種類に基づいて前記境界サーバのメモリに記憶された経路選定データを調べることにより、前記第１のタスクを行う最初のサーバを前記複数のサーバの中から特定し、
前記最初のサーバに前記第１のタスクを行うように要求する
ように構成された境界サーバと
を備え、
前記複数のサーバの各サーバは、前記境界サーバからタスクの要求を受信するのに応答して、
そのサーバに排他的に記憶されている前記受信されたタスクに関連するデータを使用して、前記受信されたタスクを行い、
前記受信されたタスクが追加的なタスクを必要とするかどうかを判定し、
前記追加的なタスクの種類に基づいて、そのサーバのメモリに記憶された経路選定データを調べることにより、前記追加的なタスクを行う次のサーバを前記複数のサーバの中から特定し、
前記次のサーバに前記追加的なタスクを行うように要求し、
前記次のサーバから完了の通知を受信するのに応答して、前記受信されたタスクに対応する完了の通知をもって前記境界サーバに応答を返す
ように構成される
システム。
【請求項２】
前記複数のサーバを、相互に、及び前記境界サーバと相互接続するように構成されたネットワーキング装置をさらに備える請求項１に記載のシステム。
【請求項３】
前記境界サーバが、（ｉ）前記ネットワーキング装置と通信状態にある第１のネットワークポート、及び前記ネットワーキング装置と通信状態にない第２のネットワークポートを含み、（ｉｉ）前記第２のネットワークポートを通じて前記トランザクションの要求を受信する、請求項２に記載のシステム。
【請求項４】
前記境界サーバが、ウェブサービスを通じてインターネットを介して前記トランザクションの要求を受信するように構成される請求項３に記載のシステム。
【請求項５】
前記境界サーバが、ウェブサーバから前記トランザクションの要求を受信するように構成される請求項３に記載のシステム。
【請求項６】
前記ウェブサーバをさらに備え、前記ウェブサーバは、ユーザにウェブページを供給し、前記ウェブページを介して前記ユーザから提供される入力に基づいて前記トランザクションの要求を作成する請求項５に記載のシステム。
【請求項７】
前記ネットワーキング装置がスイッチを備える請求項２に記載のシステム。
【請求項８】
前記最初のサーバ及び前記次のサーバは、前記最初のサーバのプロセッサも前記次のサーバのプロセッサも介入することなく、前記ネットワーキング装置を介して前記最初のサーバのメモリから前記次のサーバのメモリに選択的にデータが転送されるように構成される、請求項２に記載のシステム。
【請求項９】
前記複数のサーバが各々リモートダイレクトメモリアクセス（ＲＤＭＡ）を実装する請求項８に記載のシステム。
【請求項１０】
前記複数のサーバのうち指定されたサーバに記憶されているデータのコピーを記憶するミラーサーバをさらに備え、前記ミラーサーバは、前記指定されたサーバの故障に応答して、前記指定されたサーバに代わってタスクを実行するように構成される請求項１に記載のシステム。
【請求項１１】
前記複数のサーバは複数種類のタスクを共同的に行う請求項１に記載のシステム。
【請求項１２】
前記最初のサーバは、前記複数種類のタスクのうち第１の種類のタスクを行うように構成され、
前記次のサーバは、前記複数種類のタスクのうち第２の種類のタスクを行うように構成される
請求項１１に記載のシステム。
【請求項１３】
前記複数のサーバのうち第１のサーバが前記第２の種類のタスクを行うように構成され、
前記複数のサーバのうち第２のサーバも前記第２の種類のタスクを行うように構成され、
前記第１のサーバは、前記第２の種類のタスクに関連する第１のデータセットを記憶し、
前記第２のサーバは、前記第２の種類のタスクに関連する第２のデータセットを記憶し、
前記第１のデータセットは前記第２のデータセットと相互排他的である
請求項１２に記載のシステム。
【請求項１４】
前記経路選定データは、前記追加的なタスクが前記第１のデータセットに対応することに応じて、前記第１のサーバを前記次のサーバに指定し、
前記経路選定データは、前記追加的なタスクが前記第２のデータセットに対応することに応じて、前記第２のサーバを前記次のサーバに指定する
請求項１３に記載のシステム。
【請求項１５】
前記第１のサーバ及び前記第２のサーバは、前記第１のサーバの利用が過剰になるのに応答して、前記第１のデータセットから前記第２のデータセットに動的にデータを移動するように構成される請求項１３に記載のシステム。
【請求項１６】
前記最初のサーバの利用が過剰になるのに応答して、
前記複数のサーバのうち第１のサーバも前記第１の種類のタスクを行うように動的に構成され、
前記最初のサーバに記憶されている前記受信されたタスクに関連するデータが第１のデータセットと第２のデータセットとに分割され、
前記第１のデータセットは前記第２のデータセットと相互排他的であり、
前記第２のデータセットが前記第１のサーバに移動される
請求項１２に記載のシステム。
【請求項１７】
各々がプロセッサ及びメモリを含む複数のサーバを備えるシステムであって、
前記複数のサーバのうち第１のサーバが、
トランザクションの要求を受信し、前記トランザクションは複数のタスクを行うことによって遂行することができ、
前記複数のタスクの中から第１のタスクを選択し、
前記第１のタスクの種類に基づいて前記第１のサーバのメモリに記憶された経路選定データを調べることにより、前記第１のタスクを行う第２のサーバを前記複数のサーバの中から特定し、
前記第２のサーバに前記第１のタスクを行うように要求する
ように構成され、
前記第２のサーバは、前記第１のタスクの前記要求を受信するのに応答して、
前記第２のサーバに排他的に記憶されているデータを使用して前記第１のタスクを行い、
前記第１のタスクが追加的なタスクを必要とするかどうかを判定し、
前記第１のタスクが追加的なタスクを必要とするのに応じて、
前記追加的なタスクの種類に基づいて前記第２のサーバのメモリに記憶された経路選定データを調べることにより、前記追加的なタスクを行う第３のサーバを前記複数のサーバの中から特定し、
前記第３のサーバに前記追加的なタスクを行うように要求し、
前記第３のサーバから完了の通知を受信するのに応答して、前記第１のタスクに対応する完了の通知をもって前記第１のサーバに応答を返す
ように構成される
システム。
【請求項１８】
境界サーバ及び複数のサーバを含むシステムを動作させる方法であって、前記境界サーバはプロセッサ及びメモリを含み、前記複数のサーバは各々プロセッサ及びメモリを含み、前記方法は、
前記境界サーバでトランザクションの要求を受信するステップであり、前記トランザクションは複数のタスクを行うことによって遂行することができる、ステップと、
前記境界サーバで、前記複数のタスクのうち第１のタスクを特定するステップと、
前記境界サーバで、前記第１のタスクの種類に基づいて前記境界サーバのメモリに記憶された経路選定データを調べることにより、前記第１のタスクを行う最初のサーバを前記複数のサーバの中から特定するステップと、
前記境界サーバで、前記最初のサーバに前記第１のタスクを行うように要求するステップと、
前記複数のサーバのうち１つのサーバで、前記境界サーバからタスクの要求を受信するのに応答して、
そのサーバに排他的に記憶されている前記受信されたタスクに関連するデータを使用して、前記受信されたタスクを行うステップと、
前記受信されたタスクが追加的なタスクを必要とするかどうかを判定するステップと、
前記追加的なタスクの種類に基づいて、そのサーバのメモリに記憶された経路選定データを調べることにより、前記追加的なタスクを行う次のサーバを前記複数のサーバの中から特定するステップと、
前記次のサーバに前記追加的なタスクを行うように要求するステップと、
前記次のサーバから完了の通知を受信するのに応答して、前記受信されたタスクに対応する完了の通知をもって前記境界サーバに応答を返すステップと
を含む方法。
【請求項１９】
前記境界サーバで、ウェブサービスを使用してインターネットを介して前記トランザクションの要求を受信するステップをさらに含む請求項１８に記載の方法。
【請求項２０】
前記境界サーバで、ウェブサーバから前記トランザクションの要求を受信するステップをさらに含む請求項１８に記載の方法。
【請求項２１】
前記ウェブサーバで、ユーザにウェブページを供給し、前記ウェブページを介して前記ユーザから提供される入力に基づいて前記トランザクションの要求を作成するステップをさらに含む請求項２０に記載の方法。
【請求項２２】
前記最初のサーバのプロセッサも前記次のサーバのプロセッサも介入することなく、前記最初のサーバのメモリから前記次のサーバのメモリにデータを選択的に転送するステップをさらに含む請求項１８に記載の方法。
【請求項２３】
前記複数のサーバの各々でリモートダイレクトメモリアクセス（ＲＤＭＡ）を実装するステップをさらに含む請求項２２に記載の方法。
【請求項２４】
ミラーサーバで、前記複数のサーバのうち指定されたサーバに記憶されているデータのコピーを記憶するステップと、
前記ミラーサーバで、前記指定されたサーバの故障に応答して、前記指定されたサーバに代わってタスクを実行するステップ
をさらに含む請求項１８に記載の方法。
【請求項２５】
前記複数のサーバを使用して複数種類のタスクを共同的に行うステップをさらに含む請求項１８に記載の方法。
【請求項２６】
前記最初のサーバで、前記複数種類のタスクのうち第１の種類のタスクを行うステップと、
前記次のサーバで、前記複数種類のタスクのうち第２の種類のタスクを行うステップ
をさらに含む請求項２５に記載の方法。
【請求項２７】
前記複数のサーバのうちの第１のサーバで、前記第２の種類のタスクに関連する第１のデータセットを記憶するステップと、
前記複数のサーバのうちの第２のサーバで前記第２の種類のタスクに関連する第２のデータセットを記憶するステップと
前記第１のサーバで前記第２の種類のタスクを行うステップと、
前記第２のサーバで前記第２の種類のタスクを行うステップと、
をさらに含み、
前記第１のデータセットは前記第２のデータセットと相互排他的である
請求項２６に記載の方法。
【請求項２８】
前記経路選定データは、前記追加的なタスクが前記第１のデータセットに対応することに応じて、前記第１のサーバを前記次のサーバに指定し、
前記経路選定データは、前記追加的なタスクが前記第２のデータセットに対応することに応じて、前記第２のサーバを前記次のサーバに指定する
請求項２７に記載の方法。
【請求項２９】
前記第１のサーバの利用が過剰になるのに応答して、前記第１のデータセットから前記第２のデータセットに動的にデータを移動するステップをさらに含む請求項２７に記載の方法。
【請求項３０】
前記最初のサーバの利用が過剰になるのに応答して、
前記受信されたタスクに関連するデータを第１のデータセットと第２のデータセットとに分割するステップと、
前記第２のデータセットを前記複数のサーバのうちの第１のサーバに移動するステップと、
前記第１のサーバで、前記第１の種類のタスクを行うステップと、
をさらに含み、
前記第１のデータセットは前記第２のデータセットと相互排他的である
請求項２６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
[0002]本発明は、分散コンピューティングに関し、より詳細には、スケーラブルな処理システムのためのデータの処理及び記憶に関する。
【関連出願の相互参照】
【０００２】
[0001]本願は、２０１３年１月２９日に出願された米国通常特許出願第１３／７５２，９８５号の利益を主張し、同出願は参照により本明細書に援用される。
【背景技術】
【０００３】
[0003]本明細書に提供する背景技術の説明は、本開示の背景を概説することを目的とする。この背景技術の項で説明される限りにおける本明細書で名前を挙げる発明者の発明物、並びに、出願時点では従来技術であるとその他の点では認められない可能性のある説明の諸面は、明示的にも暗黙的にも本開示に不利な従来技術と認められるものではない。
【０００４】
[0004]コンピュータシステムは、記憶容量と処理容量の両面で有限の制約を有する。これらの容量のどちらか一方又は両方に達するとコンピュータシステムの性能が低下する。性能が失われることを防止又は緩和するために、追加的なコンピューティングハードウェアを追加して処理容量及び／又は記憶容量を増すことができる。この処理はスケーリングと呼ばれ、作業負荷の種類が異なると、異なるスケーリングの課題を呈する。
【０００５】
[0005]スケーリングの一方式は、複数のコンピュータシステム間でコンピューティングプロセスを並列化するものであり、コンピュータシステムはメッセージパッシングインターフェース（ＭＰＩ）を介して対話する。ＭＰＩでは、並列のコンピューティングシステムが処理を連携させて、あるシステムによって行われた変更と別のシステムによって行われた変更との間の衝突を回避することができる。ＭＰＩは、Ｃ、Ｃ＋＋、及びＦｏｒｔｒａｎを含むいくつかの言語で実装されている。個々のコンピューティングシステムは、それぞれ独立した物理的な筐体内にある場合があり、及び／又は単一のコンピュータシャーシ内の複数のプロセッサ、さらには単一のプロセッサ内にある複数のコアである場合もある。ＭＰＩは、超並列の共有メモリマシンと、異種の分散メモリコンピュータのクラスタで高い性能を可能にすることができる。
【０００６】
[0006]スケーリングの別の手法は、構造化クエリ言語（ＳＱＬ）のデータベースに分散記憶を使用する。しかし、個々のコンピュータを同期された状態に保つ必要があるため、分散ＳＱＬデータベースにおけるトランザクション動作は一般に低下する。ＩｎｆｉｎｉＢａｎｄなどの高速なネットワークが使用される場合でも、同期によって性能とスケーラビリティに制約が課される可能性がある。さらに、ＳＱＬデータベース手法のさらに他の制約は、しばしばデータ処理がＳＱＬデータベースサーバではなく別のサーバで実行されることである。そのため、ＳＱＬサーバからコンピューティングサーバにデータを移動し、再度ＳＱＬサーバに戻すために、待ち時間が増大する。
【０００７】
[0007]並列処理は、データの一部を異なるノードに分散させて独立して処理することができる大きなデータセットに有用である。しかし、トランザクション処理では、トランザクションの一部又はすべてが１回又は複数回の以前行われたトランザクションに依存する場合があり、それほど容易には並列化することができない。例えば、コンピュータが、トランザクションの処理が開始する前にデータの一部をロックし、トランザクションが成功して完了するとそのデータのロックを解除することにより、データの一部分へのアクセスを同期することができる。データがロックされている間は、他のコンピュータはデータを変更することができず、場合によってはデータを読み出すこともできない。ロック／ロック解除プロセスの結果、多大な待ち時間と待ち時間の著しい変動が生じる可能性がある。
【発明の概要】
【０００８】
[0008]システムは、各々がプロセッサ及びメモリを含む複数のサーバと、プロセッサ及びメモリを含む境界サーバとを含む。境界サーバは、（ｉ）トランザクションの要求を受信し、トランザクションは複数のタスクを行うことによって遂行することができ、（ｉｉ）複数のタスクのうち第１のタスクを特定し、（ｉｉｉ）第１のタスクの種類に基づいて境界サーバのメモリに記憶された経路選定データを調べることにより、第１のタスクを行う最初のサーバを複数のサーバの中から特定し、（ｉｖ）最初のサーバに第１のタスクを行うように要求する。複数のサーバの各サーバは、境界サーバからタスクの要求を受信するのに応答して、（ｉ）そのサーバに排他的に記憶されている受信されたタスクに関連するデータを使用して、受信されたタスクを行い、（ｉｉ）受信されたタスクが追加的なタスクを必要とするかどうかを判定し、（ｉｉｉ）追加的なタスクの種類に基づいて、そのサーバのメモリに記憶された経路選定データを調べることにより、追加的なタスクを行う次のサーバを複数のサーバの中から特定し、（ｉｖ）次のサーバに追加的なタスクを行うように要求し、（ｖ）次のサーバから完了の通知を受信するのに応答して、受信されたタスクに対応する完了の通知をもって境界サーバに応答を返す、ように構成される。
【０００９】
[0009]他の特徴では、上記システムは、複数のサーバを、相互に、及び境界サーバと相互接続するように構成されたネットワーキング装置を含む。境界サーバは、（ｉ）ネットワーキング装置と通信状態にある第１のネットワークポート、及びネットワーキング装置と通信状態にない第２のネットワークポートを含み、（ｉｉ）第２のネットワークポートを通じてトランザクションの要求を受信する。境界サーバは、ウェブサービスを通じてインターネットを介してトランザクション要求を受信するように構成される。
【００１０】
[0010]他の特徴では、境界サーバは、ウェブサーバからトランザクション要求を受信するように構成される。ウェブサーバは、ユーザにウェブページを供給し、ウェブページを介してユーザから提供される入力に基づいてトランザクション要求を作成する。ネットワーキング装置はＩｎｆｉｎｉＢａｎｄスイッチを備える。最初のサーバ及び次のサーバは、最初のサーバのプロセッサも次のサーバのプロセッサも介入することなく、ネットワーキング装置を介して最初のサーバのメモリから次のサーバのメモリに選択的にデータが転送されるように構成される。複数のサーバは各々リモートダイレクトメモリアクセス（ＲＤＭＡ）を実装する。
【００１１】
[0011]他の特徴では、上記システムは、複数のサーバのうち指定されたサーバに記憶されているデータのコピーを記憶するミラーサーバを含む。ミラーサーバは、指定されたサーバの故障に応答して、指定されたサーバに代わってタスクを実行するように構成される。複数のサーバは、複数種類のタスクを共同的に行う。最初のサーバは、複数種類のタスクのうち第１の種類のタスクを行うように構成され、次のサーバは、複数種類のタスクのうち第２の種類のタスクを行うように構成される。
【００１２】
[0012]さらに他の特徴では、複数のサーバのうち第１のサーバが第２の種類のタスクを行うように構成され、複数のサーバのうち第２のサーバも第２の種類のタスクを行うように構成され、第１のサーバは、第２の種類のタスクに関連する第１のデータセットを記憶し、第２のサーバは、第２の種類のタスクに関連する第２のデータセットを記憶し、第１のデータセットは第２のデータセットと相互排他的である。経路選定データは、追加的なタスクが第１のデータセットに対応することに応じて、第１のサーバを次のサーバに指定する。経路選定データは、追加的なタスクが第２のデータセットに対応することに応じて、第２のサーバを次のサーバに指定する。
【００１３】
[0013]他の特徴では、第１のサーバ及び第２のサーバは、第１のサーバの利用が過剰になるのに応答して、第１のデータセットから第２のデータセットに動的にデータを移動するように構成される。最初のサーバの利用が過剰になるのに応答して、（ｉ）複数のサーバのうち第１のサーバも第１の種類のタスクを行うように動的に構成され、（ｉｉ）最初のサーバに記憶されている受信されたタスクに関連するデータが第１のデータセットと第２のデータセットとに分割され、（ｉｉｉ）第１のデータセットは第２のデータセットと相互排他的であり、（ｉｖ）第２のデータセットが第１のサーバに移動される。
【００１４】
[0014]システムは、各々がプロセッサ及びメモリを含む複数のサーバを備える。複数のサーバのうち第１のサーバが、（ｉ）トランザクションの要求を受信し、トランザクションは複数のタスクを行うことによって遂行することができ、（ｉｉ）複数のタスクの中から第１のタスクを選択し、（ｉｉｉ）第１のタスクの種類に基づいて第１のサーバのメモリに記憶された経路選定データを調べることにより、第１のタスクを行う第２のサーバを複数のサーバの中から特定し、（ｉｖ）第２のサーバに第１のタスクを行うように要求する、ように構成される。第２のサーバは、第１のタスクの要求を受信するのに応答して、（ｉ）第２のサーバに排他的に記憶されているデータを使用して第１のタスクを行い、（ｉｉ）第１のタスクが追加的なタスクを必要とするかどうかを判定する、ように構成される。第２のサーバは、第１のタスクが追加的なタスクを必要とするのに応じて、（ｉ）追加的なタスクの種類に基づいて第２のサーバのメモリに記憶された経路選定データを調べることにより、追加的なタスクを行う第３のサーバを複数のサーバの中から特定し、（ｉｉ）第３のサーバに追加的なタスクを行うように要求し、（ｉｉｉ）第３のサーバから完了の通知を受信するのに応答して、第１のタスクに対応する完了の通知をもって第１のサーバに応答を返す、ように構成される。
【００１５】
[0015]システムは、境界サーバ及び複数のサーバを含み、境界サーバはプロセッサ及びメモリを含み、複数のサーバは各々プロセッサ及びメモリを含む。このシステムを制御する方法は、境界サーバでトランザクションの要求を受信するステップを含む。トランザクションは複数のタスクを行うことによって遂行することができる。上記方法は、境界サーバで、複数のタスクのうち第１のタスクを特定するステップを含む。上記方法は、境界サーバで、第１のタスクの種類に基づいて境界サーバのメモリに記憶された経路選定データを調べることにより、第１のタスクを行う最初のサーバを複数のサーバの中から特定するステップを含む。上記方法は、境界サーバで、最初のサーバに第１のタスクを行うように要求するステップを含む。上記方法は、複数のサーバのうち１つのサーバで、境界サーバからタスクの要求を受信するのに応答して、（ｉ）そのサーバに排他的に記憶されている受信されたタスクに関連するデータを使用して、受信されたタスクを行うステップと、（ｉｉ）受信されたタスクが追加的なタスクを必要とするかどうかを判定するステップと、（ｉｉｉ）追加的なタスクの種類に基づいてそのサーバのメモリに記憶された経路選定データを調べることにより、追加的なタスクを行う次のサーバを複数のサーバの中から特定するステップと、（ｉｖ）次のサーバに追加的なタスクを行うように要求するステップと、（ｖ）次のサーバから完了の通知を受信するのに応答して、受信されたタスクに対応する完了の通知をもって境界サーバに応答を返すステップとを含む。
【００１６】
[0016]他の特徴において、上記方法は、境界サーバで、ウェブサービスを使用してインターネットを介してトランザクション要求を受信するステップをさらに含む。上記方法は、境界サーバで、ウェブサーバからトランザクション要求を受信するステップをさらに含む。上記方法は、ウェブサーバで、ユーザにウェブページを供給し、ウェブページを介してユーザから提供される入力に基づいてトランザクション要求を作成するステップをさらに含む。上記方法は、最初のサーバのプロセッサも次のサーバのプロセッサも介入することなく、最初のサーバのメモリから次のサーバのメモリにデータを選択的に転送するステップをさらに含む。上記方法は、複数のサーバの各々でリモートダイレクトメモリアクセス（ＲＤＭＡ）を実装するステップをさらに含む。
【００１７】
[0017]さらに他の特徴において、上記方法は、ミラーサーバで、複数のサーバのうち指定されたサーバに記憶されているデータのコピーを記憶するステップと、ミラーサーバで、指定されたサーバの故障に応答して、指定されたサーバに代わってタスクを実行するステップをさらに含む。上記方法は、複数のサーバを使用して複数種類のタスクを共同的に行うステップをさらに含む。上記方法は、最初のサーバで、複数種類のタスクのうち第１の種類のタスクを行うステップと、次のサーバで、複数種類のタスクのうち第２の種類のタスクを行うステップをさらに含む。
【００１８】
[0018]他の特徴において、上記方法は、複数のサーバのうち第１のサーバで第２の種類のタスクを行うステップと、第１のサーバで、第２の種類のタスクに関連する第１のデータセットを記憶するステップと、複数のサーバのうち第２のサーバで第２の種類のタスクを行うステップと、第２のサーバで第２の種類のタスクに関連する第２のデータセットを記憶するステップとをさらに含む。第１のデータセットは第２のデータセットと相互排他的である。
【００１９】
[0019]さらに他の特徴において、経路選定データは、追加的なタスクが第１のデータセットに対応することに応じて、第１のサーバを次のサーバに指定する。経路選定データは、追加的なタスクが第２のデータセットに対応することに応じて、第２のサーバを次のサーバに指定する。上記方法は、第１のサーバの利用が過剰になるのに応答して、第１のデータセットから第２のデータセットに動的にデータを移動するステップをさらに含む。上記方法は、複数のサーバのうち第１のサーバで、第１の種類のタスクを行うステップと、最初のサーバの利用が過剰になるのに応答して、（ｉ）受信されたタスクに関連するデータを第１のデータセットと第２のデータセットとに分割するステップと、（ｉｉ）第２のデータセットを第１のサーバに移動するステップとをさらに含む。第１のデータセットは第２のデータセットと相互排他的である。
【００２０】
[0020]以下の詳細な説明から本開示のさらに他の応用領域が明らかになろう。詳細な説明及び具体例は単に説明を目的とするものであり、本開示の範囲を制限する意図はないことを理解されたい。
【図面の簡単な説明】
【００２１】
【図１Ａ】本開示の原理の例示的実装の高レベル機能ブロック図である。
【図１Ｂ】本開示の原理の例示的実装の高レベル機能ブロック図である。
【図２Ａ】サーバに割り当てられるタスクの高レベル機能ブロック図である。
【図２Ｂ】図２Ａの各ブロックの動作を説明するフローチャートである。
【図２Ｃ】例示的なトランザクションに基づいて特定のサーバに割り当てられるタスクの高レベル機能ブロック図ある。
【図２Ｄ】例示的なトランザクションを処理する際の図２Ｃのサーバの動作を説明するフローチャートである。
【図３】サーバの１つの例示的実装の簡略ブロック図である。
【図４】サーバの１つの例示的実装の機能ブロック図である。
【図５】ウェブサーバ機能の例示的動作を説明するフローチャートである。
【図６Ａ】例示的な再平衡化動作の高レベルフローチャートである。
【図６Ｂ】再平衡化をいつ行うかを判定する例示的方法を説明するフローチャートである。
【図６Ｃ】例示的な再平衡化動作のフローチャートである。
【図６Ｄ】例示的な再平衡化の前後のタスク割り当てを説明する高レベルフローチャートである。
【図７】境界サーバの例示的動作のフローチャートである。
【図８Ａ】ノードサーバの１つの例示的動作のフローチャートである。
【図８Ｂ】ノードサーバの１つの例示的動作のフローチャートである。  [0035]図面では、類似の要素及び／又は同じ要素を識別するために同じ参照符号を繰り返し使用する場合がある。
【発明を実施するための形態】
【００２２】
[0036]本開示の原理によれば、トランザクションを複数の個別のタスクに分割することにより、トランザクション処理がスケーリングされる。これらのタスクは各々サーバに割り当てられ、そのサーバがそのタスクを実行すると共に、そのタスクに関連する情報を記憶する。各種実装で、タスクは、サーバのローカルメモリに排他的にロードされ、制限された実行時間内にそのサーバにとってローカルのリソースだけを使用して（他のサーバのリモートのリソースを必要とせずに）実行されるプログラム命令のセットと定義される。
【００２３】
[0037]タスク間の依存関係に応じて、タスクの一部又はすべてが並列に処理される場合があり、一方他のタスクは逐次処理される。各種実装で、サーバ間へのタスクの割り当てを動的に調整してスケーリングを助ける。例えば、各種実装で、１つのサーバに複数のタスクを割り当てることができる。様々な時に、これらのタスクの１つ又は複数を、そのサーバと別のサーバの間で分割することができる。タスクは、それに対応するデータをどのように区分できるかに基づいてサーバ間で分割される。例えば、タスクが特定ユーザのデータに関して行われる場合は、１つのサーバが第１のユーザの群に関してそのタスクを行い、第２のサーバが第２のユーザの群に関してそのタスクを行う。各種実装で、タスクは処理容量及び記憶容量が必要とするだけの数のサーバ間で分割することができ、対応するデータをさらに区分できるかどうかだけが制限となる。
【００２４】
[0038]図１Ａでは、境界サーバ１００が、インターネット１０８などの分散通信システムを介して要求元１０４からトランザクション要求を受信する。境界サーバ１００は、ネットワーキング装置１１６を介して、ノードサーバ１１２−１、１１２−２、及び１１２−３（ノードサーバ１１２と総称する）と通信する。各種実装で、ネットワーキング装置１１６は、ギガビット若しくは１０Ｇｂのイーサネット（登録商標）スイッチ、又はＩｎｆｉｎｉＢａｎｄスイッチなどの高速スイッチを備えることができる。使用されるネットワーキングプロトコルは、ＩｎｆｉｎｉＢａｎｄの場合などには、リモートダイレクトメモリアクセス（ＲＤＭＡ）が可能な場合があり、ノードサーバ１１２内で行われる処理の中断を最小に抑えて、ノードサーバ１１２間でデータを転送することができる。
【００２５】
[0039]トランザクション要求に基づいて、境界サーバ１００は、そのトランザクションを完了するためにどのタスクを行う必要があるかを判断し、ノードサーバ１１２の１つ又は複数にタスク要求を送信する。ノードサーバ１１２によって行われたタスクの結果が境界サーバ１００に返されると、境界サーバ１００は、要求元１０４に応答を送信することができる。この応答は、トランザクションの成否を示し、付加的なデータを含むことができる。
【００２６】
[0040]要求元１０４は、境界サーバ１００と直接通信できる場合に高性能な要求元と呼ばれる。一例では、高性能な要求元１０４は、拡張可能マークアップ言語（ＸＭＬ）に依拠するシンプルオブジェクトアクセスプロトコル（ＳＯＡＰ）などのウェブサービスを使用して境界サーバ１００と対話する。
【００２７】
[0041]別の要求元１２０は、その要求元１２０が境界サーバ１００と直接通信するのではなく、ウェブサーバ１２４と通信することから低性能と呼ばれる。各種実装で、要求元１２０は、ハイパーテキストマークアップ言語（ＨＴＭＬ）やハイパーテキスト転送プロトコル（ＨＴＴＰ）などの標準的なウェブプロトコルを使用してウェブサーバ１２４と通信する。単なる例として、ウェブサーバ１２４は、ＮＧＩＮＸなどのウェブサーバソフトウェアを実行することができる。
【００２８】
[0042]ウェブサーバ１２４は、境界サーバ１００によって提供されるサービスに関連するウェブページを供給し、要求元１２０からデータ及び要求を受信し、要求元１２０に応答を提供する。要求元１２０から受信したデータに基づいて、ウェブサーバ１２４はトランザクション要求を生成し、それが境界サーバ１００に送信される。そして、境界サーバ１００は、直接受信される要求と同様にしてトランザクション要求を処理する。各種実装で、ウェブサーバ１２４と境界サーバ１００はネットワーキング装置１２８を介して通信し、ネットワーキング装置１２８はファイアウォールを含む場合もある。
【００２９】
[0043]１つ又は複数のミラーサーバを使用して可用性を高めることができる。すなわち、ミラーサーバは、故障したサーバの代理として機能することができ、故障ハードウェアの影響を生じさせないか、緩和することができる。図１Ａでは、ミラーノードサーバ１３２がノードサーバ１１２−３をミラーリングしていると示される。この実装では、ノードサーバ１１２−３にソフトウェア又はハードウェアの障害が発生した場合、タスクの処理はミラーノードサーバ１３２に引き継がれる。これを実現するために、ミラーノードサーバ１３２は、ノードサーバ１１２−３と並列にタスクを処理して同等の状態を維持する。それに加えて、又はそれに代えて、ミラーノードサーバ１３２は、継続的に、又は短い間隔でノードサーバ１１２−３から反復的に状態データを取得する。
【００３０】
[0044]各種実装で、分析サーバ１３６がノードサーバ１１２からのデータを処理する。例えば、このデータは、ノードサーバ１１２の性能を示すログデータ、及び／又はトランザクションの結果などの実際的なデータを含む。分析サーバ１３６がリアルタイムで動作しない実装では、分析サーバ１３６はネットワーキング装置１４０を介してノードサーバ１１２（並びにミラーノードサーバ１３２）に接続される。ネットワーキング装置１４０は、ネットワーキング装置１１６と比べて帯域幅及び／又は機能に制約がある可能性がある。
【００３１】
[0045]図１Ａに示す各種装置、ノードサーバ１１２、境界サーバ１００、及びウェブサーバ１２４などは、１か所の施設に共に配置することができる。各種の他の実装では、これらの装置の１つ又は複数をインターネット１０８などの分散通信システムを通じて接続することができる。図１Ａと図１Ｂでは同じ参照符号を使用するが、図１Ｂの装置は、インターネット１０８を介して動作するように変更を加えることができる。
【００３２】
[0046]図２Ａには、第１の境界サーバ２００及び第２の境界サーバ２０４の両方を示す。要求元２０８が、インターネット１０８を介して第１の境界サーバ２００又は第２の境界サーバ２０４のどちらかに要求を送信する。第２の境界サーバ２０４を使用して、第１の境界サーバ２００の処理容量と記憶容量を補強することができる。或いは、第１の境界サーバ２００と第２の境界サーバ２０４が、異なる種類のトランザクション要求を処理するか、及び／又は異なるユーザセットとの対話だけを許す許可を含むことができる。
【００３３】
[0047]図２Ａでは、トランザクション要求の簡略化した例を、それに関連する例示的タスクと共に示している。まず、要求元２０８が第１の境界サーバ２００にトランザクション要求を送信する。これを図２Ａ及び図２Ｂでは数字「１」で示す。第１の境界サーバ２００は、ＩｎｆｉｎｉＢａｎｄスイッチ２４０を介してノードサーバ２２０、ノードサーバ２２４、ノードサーバ２２８、ノードサーバ２３２、及びノードサーバ２３６と通信する。処理及び記憶の需要に基づき、図２Ａに示す例のようにノードサーバが平衡化されている。ここでは、ノードサーバ２２０はタスクＡを行うように割り当てられ、ノードサーバ２２４及び２２８はタスクＢを行うように割り当てられ、ノードサーバはタスクＣを行うように割り当てられ、ノードサーバ２３６はタスクＤを行うように割り当てられる。上記のように、ノードサーバ２２４及び２２８は共にタスクＢを実行するが、重複しないデータセットに関して実行する。
【００３４】
[0048]図２Ｂは、図２Ａに示すメッセージングを簡略化して示す図である。３００で制御が開始し、要求元２０８が第１の境界サーバ２００にトランザクション要求を送信する。３０４で、第１の境界サーバ２００が要求の処理を開始し、３０８で、トランザクション要求に基づいてタスクＡ及びＤを行う必要があることを特定する。３１２で、第１の境界サーバ２００が、タスクＡを行うノードサーバとしてノードサーバ２２０が適すると特定し、３１６で、第１の境界サーバ２００がタスクＡについての要求（番号２）をノードサーバ２２０に送信する。３２０で、第１の境界サーバ２００が、タスクＤに適したノードサーバとしてノードサーバ２３６を特定し、３２４でタスクＤについての要求（番号３）をノードサーバ２３６に送信する。
【００３５】
[0049]３２８でノードサーバ２２０がタスクＡの要求の処理を開始し、３３２で、タスクＡを終えるために追加的なタスクであるタスクＢが必要であると特定する。３３６で、ノードサーバ２２０が、その特定のトランザクション要求についてタスクＢを行うのに適したサーバとしてノードサーバ２２８を特定する。３４０で、ノードサーバ２２０がタスクＢについての要求（番号４）をノードサーバ２２８に送信する。３４４で、ノードサーバ２２８がタスクＢの要求の処理を開始し、３４８でそれ以上のタスクは必要とないと判断し、したがって３５２でノードサーバ２２８がノードサーバ２２０に応答を返す（番号５）。
【００３６】
[0050]３５６で、ノードサーバ２２０がタスクＢからの応答を分析し、３６０で、タスクＡを完了する前にさらに他のタスクであるタスクＣが必要であると判断する。３６４で、ノードサーバ２２０は、ノードサーバ２３２がタスクＣを行うのに適したノードサーバであると判断し、したがって、３６８でタスクＣについての要求（番号６）をノードサーバ２３２に送信する。３７２で、ノードサーバ２３２がタスクＣの要求の処理を開始し、３７６でそれ以上のタスクは必要ないと判断し、３８０でノードサーバ２２０に応答を返す（番号７）。
【００３７】
[0051]３８４で、ノードサーバ２２０が、ノードサーバ２３２からの応答を分析し、３８８でそれ以上のタスクは必要ないと判断する。３９２で、ノードサーバ２２０が第１の境界サーバ２００に応答を返し（番号８）、制御は３９６に移る。一方、３２８と並列して開始する４００で、ノードサーバ２３６がタスクＤの要求の処理を開始する。説明のためのみに図示するが、４００と４０４の間の長い線は、タスクＤの処理が著しい量の時間を要したことを視覚的に表している。４０４で、ノードサーバ２３６がそれ以上のタスクは必要ないと判断し、４０８で、ノードサーバ２３６が第１の境界サーバ２００にタスクＤの応答をもって第１の境界サーバ２００に応答を返す（番号９）。その後制御は３９６に進む。
【００３８】
[0052]３９６で、第１の境界サーバ２００は、タスクＡについての応答とタスクＤについての応答の両方を受信している。もしタスクＡとタスクＤが並列に実行されていなければ、第１の境界サーバ２００は両方のタスクが逐次式に行われるのをはるかに長い時間待たなければならない。４１２で、第１の境界サーバ２００がトランザクション要求が完了したと判断する。４１６で、第１の境界サーバ２００が要求元２０８にトランザクション応答（番号１０）を送信する。これで、このトランザクションの処理は完了する。
【００３９】
[0053]図２Ｃには、より単純なトランザクションの場合の構成を示す。境界サーバ５０４がインターネット１０８を介して要求元５０８と通信する。境界サーバ５０４は、ＩｎｆｉｎｉＢａｎｄスイッチ５２０を介してノードサーバ５１２及びノードサーバ５１６と通信する。
【００４０】
[0054]図２Ｄは、図２Ｃの図示におけるメッセージ交換を説明する図である。５４０で制御が開始し、ここで要求元５０８が境界サーバ５０４にトランザクション要求を送信する（番号１）。このトランザクション要求は、特定ユーザに対応する連絡先情報を更新させる要求である。５４４で、境界サーバ５０４が要求を受信し、５４８で、境界サーバ５０４がトランザクション要求に応答して行うべき第１のタスクを特定する。単なる例として、第１のタスクは、要求元が連絡先情報を更新する権限があることを保証する権限の確認である。
【００４１】
[0055]５５２で、境界サーバ５０４が第１のタスクを行うのに適したサーバとしてノードサーバ５１２を特定する。５５６で、境界サーバ５０４がノードサーバ５１２に第１のタスク要求（番号２）を送信する。５６０で、ノードサーバ５１２が要求元５０８に対応するアカウントデータをロードする。制御は５６４に進み、ここで制御が、要求元５０８に連絡先の変更を行うのに十分な信用があるかどうかを判定する。
【００４２】
[0056]例えば、更新のたびに関連する料金が伴う場合には、信用は金銭の残高とすることができる。それに加えて、又はそれに代えて、信用は、ひと月に行える更新の回数を制限するために使用される月ごとの信用貸しなどの回数に相当してもよい。十分な信用がある場合、制御は５６８に移り、そうでない場合制御は５７２に移る。５７２で、ノードサーバ５１２が境界サーバ５０４にエラーで応答し、境界サーバ５０４が要求元５０８にエラーを通知することによって要求元５０８に応答を返す。５７６で要求元５０８に応答を返すと、制御は終了する。
【００４３】
[0057]５６８に戻り、制御は、要求元５０８が必要なアクセス権を有するかどうかを判定する。有する場合、制御は５８０に移り、そうでない場合、制御は５７２に移る。５８０で、要求元５０８に権限が付与されており、したがってノードサーバ５１２は行うべき第２のタスクを特定する。５８４で、ノードサーバ５１２は、第２のタスクに適したサーバとしてノードサーバ５１６を特定し、第２のタスクは例えば連絡先情報の実際の更新である。
【００４４】
[0058]５８８で、ノードサーバ５１２がノードサーバ５１６に第２のタスク要求（番号３）を送信する。５９２で、ノードサーバ５１６がノードサーバ５１６にとってローカルな記憶域からアドレスデータを取得する。５９６で、制御が、そのアドレスが要求元５０８に対応するかどうかを判定し、対応する場合は制御が６００に進み、そうでない場合制御は６０４に移る。
【００４５】
[0059]６００で、制御がアドレスデータのアトミックな更新を試みる。すなわち、制御は、他のプロセスからの干渉を受けずに、アドレスデータを読み出し、アドレスデータを変更し、アドレスデータを書き戻すことを試みる。６０８でアトミックな更新が成功した場合、制御は６１２に進む。アトミックな更新が成功しない場合、アドレスデータは未変更のままにされ、制御は６０４に移る。６０４で、ノードサーバ５１６がエラーの通知でノードサーバ５１２に応答を返し、制御が５７２に進む。各種実装で、ノードサーバ５１６は、境界サーバ５０４に直接エラーを通知してもよい。
【００４６】
[0060]６１２で、ノードサーバ５１６が成功を知らせるタスク応答（番号４）でノードサーバ５１２に応答を返す。６１６で、ノードサーバ５１２が、成功を知らせるタスク応答（番号５）で境界サーバ５０４に応答を返す。６２０で、境界サーバ５０４が要求元５０８にトランザクション応答（番号６）を送信する。
【００４７】
[0061]図３は、プロセッサ７０４及びメモリ７０８を含むサーバ７００の例示的実装を示す。プロセッサ７０４は、メモリ７０８の命令を実行することができ、メモリ７０８に記憶されたデータを読み書きすることができる。図３の図示は簡略化しており、例えば、プロセッサ７０４自体が、キャッシュと呼ばれるメモリを備え、そのメモリに命令、データ、又はその両方を記憶してもよい。
【００４８】
[0062]ＩｎｆｉｎｉＢａｎｄインターフェースカード７１２は、サーバ７００が他のＩｎｆｉｎｉＢａｎｄ装置と対話することを可能にする。図では、ＩｎｆｉｎｉＢａｎｄインターフェースカード７１２は、プロセッサ７０４とメモリ７０８間のフロントサイドバスに接続されているものと概略的に図示している。その理由は、ＩｎｆｉｎｉＢａｎｄインターフェースカード７１２は、プロセッサ７０４の監視を受けずにメモリ７０８との間で直接データの転送を行うことができるためである。
【００４９】
[0063]チップセット７１６は、１つ又は複数のチップを含むか、単一のダイ若しくは単一のパッケージ内でプロセッサ７０４と一体化することができ、プロセッサ７０４と周辺構成要素との間の通信を提供する。例えば、プロセッサ７０４は、ネットワーキングカード７２０を介して他のネットワーキング装置と通信することができる。プロセッサ７０４は、キーボード及びマウス入力などのユーザ入力を受け取り、入出力装置７２４からディスプレイなどを介してデータをユーザに対して出力することができる。
【００５０】
[0064]不揮発性記憶７２８は、プロセッサ７０４で実行するためにメモリ７０８に読み出される命令を記憶し、各種タスクに関連するデータを記憶することができる。不揮発性記憶７２８は、フラッシュメモリを含むことができる。補助不揮発性記憶７３２は、不揮発性記憶７２８よりも容量が大きいが、より低いスループット及び／又はより長い待ち時間を有する可能性がある。補助不揮発性記憶７３２は、ハードドライブ及びテープを含む磁気記憶を含むことができる。不揮発性記憶７２８は、補助不揮発性記憶７３２とは別に、オペレーティングシステムデータなどの頻繁に使用される情報を記憶することができる。それに加えて、又はそれに代えて、不揮発性記憶７２８は、補助不揮発性記憶７３２のキャッシュとして機能することもできる。
【００５１】
[0065]図４は、サーバ８００で実装される機能ブロックの例示的実装を示す。単なる例として、サーバ８００の中に図示される機能ブロックは各々、サーバ８００の各ブロックに対応する命令が図３のメモリ７０８に記憶されプロセッサ７０４によって実行されるようにサーバ７００を特別にプログラムすることによって実装することができる。サーバ８００は、図のように、境界サーバ、ノードサーバ、及びウェブサーバに関連する機能ブロックを含む。
【００５２】
[0066]トランザクション監視モジュール８０４は、要求作成モジュール８０８からトランザクション要求を受け取る。要求作成モジュール８０８は、ウェブサーバモジュール８１２からデータを受け取り、そのデータに基づいてトランザクション要求を作成する。
【００５３】
[0067]外部インターフェースモジュール８１６は、ネットワークインターフェースなどを介して要求元と通信する。高性能な要求元がウェブサーバを必要としない実装では、トランザクション監視モジュール８０４は直接外部インターフェースモジュール８１６と通信することができる。トランザクション監視モジュール８０４は、受け取ったトランザクション要求に対応する副次的なタスクを判定する。各種類のトランザクションに対応する副次的なタスクは、トランザクションライブラリモジュール８２０に記憶することができる。
【００５４】
[0068]単なる例として、トランザクションライブラリモジュール８２０は、各種類のトランザクションに対応するエントリを有するデータベース又は他のデータ構造を備えることができる。エントリは、対応するタスクのリストへのポインタ、参照、又はデータベース関係を含むことができる。エントリは、タスクを逐次実行する順序、及び／又は選択されたタスクを実行する前に実行しなければならない先行タスクを示すデータ構造も含むことができる。
【００５５】
[0069]タスクが完了すると、トランザクション監視モジュール８０４は応答変換モジュール８２４を使用して応答し、応答変換モジュール８４２は、応答を、ウェブサーバモジュール８１２で表示するのに適した形式に変換することができる。副次的なタスクに基づいて、トランザクション監視モジュール８０４は、タスク割り当てモジュール８２８を使用して各タスクを割り当てるノードサーバを特定する。タスク割り当てモジュール８２８は、タスクとそれに関連付けられたサーバとの対応付けを記憶することができ、この対応付けは、１つのタスクに複数のサーバが対応する場合にどのサーバが各データセットに対応するかを含む。
【００５６】
[0070]単なる例として、タスク割り当てモジュール８２８は、タスクごとのエントリを含むデータベース又は他のデータ構造を含むことができ、そのエントリが対応するノードサーバを指定する。複数のノードサーバによって行われるタスクについては、そのエントリ又はそのエントリから参照される別の場所に付加的な情報を記憶することができ、どのデータセットがどのノードサーバに対応するかを指定する。
【００５７】
[0071]タスク要求は、内部インターフェースモジュール８３２を介して他のサーバに送信され、内部インターフェースモジュール８３２はＩｎｆｉｎｉＢａｎｄネットワークなどの内部ネットワークと通信することができる。タスク実行モジュール８３６はタスクの実行を担い、タスクの実行は、データ処理モジュール８４０を使用してデータベースにアクセスする、又はデータベースを変更することを含む。データ処理モジュール８４０は、データ記憶モジュール８４４に記憶されたデータに依拠することができる。タスク実行モジュール８３６は、さらに他のタスクに基づいてどのタスクが進行中であり、どのタスクが応答を待っているかを追跡することができる。その情報はタスク状態記憶モジュール８４８に記憶することができる。
【００５８】
[0072]データ再平衡化モジュール８５２は、サーバ８００が処理又は記憶の容量に近づいている時にそのことを判定するように構成される。そして、データ再平衡化モジュール８５２は、内部インターフェースモジュール８３２を介して他のサーバと連携してタスクの再割り当てを行うことができる。再割り当てされたタスクは、タスク割り当てモジュール８２８の更新を行わせて、タスクを適切なサーバに送ることができるようにする。また、タスクが再割り当てされると、それに対応するデータが適切なサーバに再割り当てされる。したがって、データ再平衡化モジュール８５２はデータ記憶モジュール８４４の更新も行う。各種実装で、タスクが保留中でもサーバが再平衡化される場合がある。そのような場合、データ再平衡化モジュール８５２は、タスク状態記憶モジュール８４８も更新することができる。
【００５９】
[0073]次いで図５を参照すると、ウェブへの接続を提供する例示的方法は９００で開始する。ウェブ接続がユーザから受け取られた場合、制御は９０４に移り、そうでない場合制御は９０８に移る。９０４で、ウェブサーバが、ＨＴＴＰを介してＨＴＭＬを使用する等して、ユーザにユーザインターフェースを提示する。９１２で、制御がユーザからトランザクション情報を受け取り、９１６でその情報がトランザクション要求に変換される。９２０で、境界サーバ又は境界機能を実装している別のサーバに要求が転送される。
【００６０】
[0074]制御は９２４に進み、ここでウェブ状態が記憶される。ウェブ状態は、インターネットプロトコル（ＩＰ）アドレス、ポート、及び伝送制御プロトコル（ＴＣＰ）の連続番号など、接続を維持又は再開するために必要な情報を含むことができる。また、ウェブ状態は、すでに行われたトランザクション要求とまだ進行中のトランザクション要求に関するデータを記憶することができる。次いで制御は９０８に進む。
【００６１】
[0075]９０８で、制御は、保留中のトランザクションのいずれかへの応答が入手可能な状態であるかどうかを判定する。入手可能な状態である場合、制御は９２８に移り、そうでない場合制御は９００に戻る。９２８で、制御は、受信されたトランザクション応答に関連付けられた状態を取得し、９３２に進む。９３２で、取得した状態に基づいて、制御がユーザとの間に接続を確立し、ウェブページ等を通じてユーザに応答を提示する。各種実装で、制御は、ウェブ接続が確立されるたびにプロセスをインスタンス化することはしない。代わりに、状態情報がデータベースなどの保管場所に記憶され、それにより、接続が比較的長い時間にわたって非アクティブな状態を保つことができ、状態情報は後にデータストアで調べることができる。そのようにすると、１つのウェブサーバでより多くの数の未処理トランザクションを扱うことができる。単なる例示として、本開示の原理によるウェブサーバは、任意のハードウェアで１００，０００個の同時の接続を可能にし、それに対し、従来のサーバはそれと同じハードウェアで１，０００個の接続に限られる場合がある。
【００６２】
[0076]図６Ａでは、ノード間のタスクの再平衡化の高レベルの例が１０００で開始し、ここで任意のサーバのトランザクション性能が監視される。例えば、１トランザクションを完了するのに要する時間、並びにトランザクション完了時間の統計的分散を監視することができる。１００４でプロセッサの負荷量が監視される。単なる例として、プロセッサの負荷量は、平均プロセッサ利用率、又は１００パーセントの利用率でプロセッサが費やす時間の比率を含むことができる。
【００６３】
[0077]１００８で空き記憶域が監視される。制御は１０１２に進み、ここでトランザクションの性能が許容できる場合は、制御は１０１６に進み、そうでない場合制御は１０２０に移る。１０１６で、制御は、プロセッサの負荷が閾値よりも高いかどうかを判定する。閾値より高い場合、制御は１０２０に移り、そうでない場合制御は１０２４に移る。１０２４で、制御は、空き記憶域が閾値未満であるかどうかを判定する。閾値未満である場合、制御は１０２０に移り、そうでない場合制御は１０００に戻る。
【００６４】
[0078]１０２０で、制御は再平衡化のために低使用状態のサーバを特定する。サーバは、そのトランザクション性能、プロセッサ負荷、及び空き記憶域が所定の範囲内にある場合に低使用状態と考えることができる。１０２８で低使用状態のサーバが利用できる場合は、制御は１０３２に進み、そうでない場合、制御は１０３６でリソースが不足していることをシステム管理者に警告し、制御は１０００に戻る。
【００６５】
[0079]１０３２で、制御は特定された低使用状態のサーバとの間でタスクを再分配する。各種実装で、タスク全体を特定されたサーバに割り当てることができ、一方他の実装及び／又は他の状況では１つ又は複数のタスクをサーバと特定されたサーバとの間で分割することができる。１０４０で、転送されるタスクに対応するデータも特定されたサーバに転送される。１０４４で、タスク割り当て情報が、タスクの再平衡化を反映するように更新される。１０４８で、更新されたタスク割り当て情報が他のサーバに配布される。
【００６６】
[0080]図６Ｂでは、再平衡化を行うかどうかを判定するシステム規模のプロセスが１１００で開始し、ここでタイマが初期化される。タイマは、再平衡化時間と呼ばれる所定の値に初期化することができる。再平衡化時間は、再平衡化が必要かどうかを制御が評価する頻度を決定する。１１０４でタイマが満了した場合、制御は１１０８に移り、そうでない場合制御は１１１２に移る。１１１２で、再平衡化が管理者などにより手動で要求されている場合は、制御は１１０８に移り、そうでない場合制御は１１０４に戻る。１１０８で、第１のノードサーバが選択され、制御が１１１６に進む。
【００６７】
[0081]１１１６で、制御が、選択されたノードサーバの記憶域利用率（ＳＵ）及びプロセッサ利用率（ＰＵ）を判定する。１１２０で、制御は、分析すべきノードサーバがさらにあるかどうかを判定する。さらにある場合、制御は１１２４に移って次のノードサーバが選択され、制御が１１１６に進み、そうでない場合制御は１１２８に移る。１１２８で、制御はノードサーバの平均ＳＵ、最大ＳＵ、ノードサーバの平均ＰＵ、及び最大ＰＵを計算する。
【００６８】
[0082]制御は１１３２に進み、ここで再平衡化が手動で要求されている場合、制御は１１３２に移り、そうでない場合、制御は１１３６に移る。１１３６で、最大ＳＵを平均ＳＵで割った値が第１の閾値よりも大きい場合、制御は１１４０に移り、そうでない場合制御は１１４４に移る。１１４４で、最大ＰＵを平均ＰＵで割った値が第２の閾値よりも大きい場合、制御は１１４０に移り、そうでない場合、制御は１１００に戻る。１１４０で、最大ＳＵが平均ＳＵよりも著しく高いことに基づいて、又は最大ＰＵが平均ＰＵよりも著しく高いことに基づいて、再平衡化が行われる。
【００６９】
[0083]１１４０で、制御は、最大利用率と平均利用率との差が大きかったために再平衡化時間を短縮すべきかどうかを判定する。したがって、最大ＳＵを平均ＳＵで割った値が第３の閾値（第３の閾値は第１の閾値よりもさらに大きい）よりも大きい場合、制御は１１４８に移って再平衡化時間を短縮し、そうでない場合、制御は１１５２に移る。最大ＰＵ平均ＰＵで割った値が第４の閾値より大きい場合（第４の閾値は第２の閾値よりもさらに大きい）、制御は１１４８に移り、そうでない場合制御は１１３２に移ってサーバが図６Ｃに示すように再平衡化される。１１４８で再平衡化時間が短縮され、制御は１１３２に進む。
【００７０】
[0084]図６Ｃでは、例示的な再平衡化プロセスが１２００で開始する。１２００で、制御は、ＰＵ又はＳＵのどちらかがより不均衡になっているかどうかを判定する。最大ＳＵを平均ＳＵで割った値が最大ＰＵを平均ＰＵで割った値よりも大きい場合、制御は１２０４に移り、そうでない場合制御は１２０８に移る。１２０４で、ＳＵがＰＵよりも不均衡であると判定され、そのため、最大ＳＵのノードサーバについて、そのＳＵに最も寄与しているタスクが特定される。
【００７１】
[0085]１２１２で、他のノードサーバが特定されたタスクを行っている場合、制御は１２１６に移り、そうでない場合制御は１２２０に移る。１２１６で、特定されたタスクを行っているノードサーバで平均ＳＵよりもＳＵが低いノードサーバが選択される。１２２４で選択されているノードサーバがある場合、制御は１２２８に移り、そうでない場合制御は１２２０に移る。１２２８で、制御は、最大ＳＵのノードサーバと、選択されたノードサーバとの間で特定されたタスクを分割する。制御はその後１２３２に進む。
【００７２】
[0086]この分割はすべてのサーバ間で均等である必要はなく、利用可能な記憶域及び／又は処理に比例して行うことができる。ＳＵに基づいて分割する場合、制御は、元のサーバと新しく割り当てられたサーバとの間でほぼ等しいＳＵを実現することを試みることができる。同様に、ＰＵに基づいて分割する場合、制御は、元のサーバと新しく割り当てられたサーバとの間でほぼ等しいＰＵを実現することを試みることができる。
【００７３】
[0087]１２２０に戻り、制御は、最大ＳＵのノードサーバと最低ＳＵのノードサーバの間で特定されたタスクを分割する。その後制御は１２３２に進む。１２３２で、制御は、分割したタスクに対応するノードサーバ間でデータを移動し、１２３６に進む。１２３６で、タスク割り当て情報がすべてのサーバについて更新され、制御が終了する。
【００７４】
[0088]１２０８に戻ると、ＰＵがＳＵよりも不均衡になっており、したがって最大ＰＵのノードサーバについて、そのＰＵに最も寄与しているタスクが特定される。制御は１２４０に進み、ここで他のノードサーバが特定されたタスクを行うかどうかを判定する。行う場合、制御は１２４４に移り、そうでない場合制御は１２４８に移る。１２４４で、制御は、特定されたタスクを行うノードサーバで平均ＰＵよりもＰＵが低いノードサーバを選択する。１２５２で選択されたノードサーバがある場合、制御は１２５６に移り、そうでない場合制御は１２４８に移る。
【００７５】
[0089]１２４８で、制御は、特定されたタスクを、最大ＰＵのノードサーバと選択されたノードサーバとの間で分割し、１２６０に進む。１２４８で、制御は、特定されたタスクを、最大ＰＵのノードサーバと最低ＰＵのノードサーバとの間で分割し、１２６０に進む。１２６０で、そのタスクに対応するデータが、行われた分割に基づいて該当するサーバに移動される。次いで制御は１２３６に進む。
【００７６】
[0090]図６Ｄでは、境界サーバ１３００が、ＩｎｆｉｎｉＢａｎｄスイッチ１３２４を介して、ノードサーバ１３０４、１３０８、１３１２、１３１６、及び１３２０と通信する。第１の構成１３３０では、ノードサーバ１３０４がタスクＡ及びＢを行う。一方、ノードサーバ１３０８はタスクＢを行い、ノードサーバ１３１２はタスクＣを行い、ノードサーバ１３１６はタスクＤを行い、ノードサーバ１３２０もタスクＤを行う。再平衡化を行った結果、１３４０に示すような構成となる可能性がある。
【００７７】
[0091]ノードサーバ１３０４は引き続きタスクＡ及びＢを行い、ノードサーバ１３０８は引き続きタスクＢを行い、ノードサーバ１３１２は引き続きタスクＣを行う。ノードサーバ１３１６はタスクＤに加えてタスクＣを行うようになる。ノードサーバ１３２０もタスクＤに加えてタスクＢを行うようになる。その結果、ノードサーバ１３０８はデータのサブセットについてのみタスクＢを行っている。同様に、ノードサーバ１３１２はデータのサブセットに基づいてタスクＣを行っている。残りのデータは、タスクＣについてはノードサーバ１３１６によって扱われ、一方タスクＢの残りのデータはノードサーバ１３２０によって動作される。
【００７８】
[0092]図７に例示的な境界サーバ機能を示す。１４００で制御が開始し、ここでトランザクション要求が受信された場合、制御は１４０４に移り、そうでない場合制御は１４０８に移る。１４０４で、制御は、そのトランザクションに関連付けられたタスクを特定し、１４１２で、制御が、特定されたタスクを実行するノードを特定する。１４１６で、制御が、特定されたノードにタスク要求を送信する。１４２０でさらにタスク要求がある場合、制御は１４１６に戻り、そうでない場合は１４００に戻る。
【００７９】
[0093]１４０８でタスク応答が受信されている場合、制御は１４２４に移り、そうでない場合制御は１４００に戻る。１４２４で、制御は、トランザクションが完了する前に追加的なタスク応答が受信される必要があるかどうかを判定する。必要がある場合、制御は１４００に戻り、そうでない場合、制御は１４２８に移る。１４２８で、制御は、受信されたタスク応答に基づいて、トランザクションに対する適切な応答を判定する。１４３２で、制御はトランザクション応答を要求元に送信し、１４００に戻る。
【００８０】
[0094]図８Ａでは、ノードサーバの制御が１５００で開始する。タスク要求が受信されると、制御は１５０４に移り、そうでない場合制御は１５００にとどまる。１５０４でタスクが分析され、１５０８で、タスク自体及びそのタスク要求に対応する必要なデータの両方に基づいて現在のノードがそのタスク要求を行うのに適したノードである場合、制御は１５１２に移り、そうでない場合、制御は１５１６に移る。
【００８１】
[0095]１５１６でノードは不適切なタスク要求を受信しており、これは、ノードが更新されたタスク割り当て情報を必要としていることの示唆である可能性がある。したがって、タスク割り当て情報が更新され、制御は１５２０に移り、ここで更新されたタスク割り当て情報に基づいてそのノードがそのタスク要求に適したノードである場合、制御は１５１２に進み、そうでない場合、制御は１５２４に移る。１５２４で、制御は、タスクを該当するサーバに送ることができるように、タスク割り当て情報を更新するよう送信元のサーバに指示する。制御は次いで１５００に戻る。
【００８２】
[0096]１５１２で制御がタスクを処理し、１５２８でデータベースの変更が必要な場合、制御は１５３２に移り、そうでない場合制御は１５３６に移る。１５３６で、制御は、データベースの変更が許可されるかどうかを判定する。許可される場合、制御は１５４０に移り、そうでない場合制御は１５４４に移る。１５４４で、制御は、タスク要求に不許可の旨の応答を返し、制御は１５００に戻る。
【００８３】
[0097]１５４０で、データベースの変更が許可され、したがって、データベースの変更がアトミックに処理され、その結果すべてのデータベース変更が成功するか、又は失敗する。変更が失敗した場合、データベースは変更前の状態のままにされる。制御は１５４８に進み、ここでデータベースの変更が成功した場合、制御は１５５２に移り、そうでない場合、制御は１５５６に移る。１５５６で、制御はデータベース失敗の応答を返し、１５００に戻る。１５５２で制御はデータベースの変更を確定し、１５３６に進む。
【００８４】
[0098]１５３６で、制御は、追加的なタスクを行う必要があるかどうかを特定する。１５６０で必要がある場合、制御は１５６４に移り、そうでない場合制御は１５６８に移る（図８Ｂの丸で囲んだ「Ａ」を参照されたい）。１５６４で、制御は、追加的なタスクを実行するノードを特定し、１５７２で、制御は特定されたノードに追加的なタスクについての要求を送信する。制御はその後１５６０に戻る。１５６８（図８Ｂを参照されたい）でタスク状態が保存され、それによりサーバは副タスクへの応答を待ちながら他のタスクの処理を続けることができる。制御は１５７６に進み、ここでタスクが受信された場合、制御は１５８０に移り、そうでない場合、制御は１５００に戻る（図８Ａを参照されたい）。
【００８５】
[0099]１５８０で、制御は、受信された応答に対応するタスク状態を取り出し、１５８４で制御が応答を分析する。１５８８で、制御は、追加的な処理が必要であるかどうかを判定する。必要な場合、制御は１５１２に移り（図８Ａを参照されたい）、そうでない場合、制御は１５９２に移る。１５９２で、制御は、受信された副タスクへの応答に基づいてタスク要求への応答を送信する。１５９６で、制御は、タスクが終了しているのでタスク状態情報を消去し、１５００に戻る。
【００８６】
[00100]前述の説明は本質的に例示的なものに過ぎず、決して本開示、その適用、又は使用を制限するものではない。本開示の広い教示は各種形態で実装することができる。したがって、本開示は特定の例を含むが、図面、明細書、及び以下の特許請求の範囲を検討することにより他の変更が明らかになるであろうことから、本開示の真の範囲はそのように制限されるべきではない。本明細書で使用される場合、「Ａ、Ｂ、及びＣの少なくとも１つ」という表現は、非排他的な論理ＯＲを使用して、論理的な（Ａ又はＢ又はＣ）の意味に解釈すべきである。方法中の１つ又は複数のステップは、本開示の原理を変えることなく、異なる順序で（又は同時に）実行することが可能であることを理解されたい。
【００８７】
[00101]以下の定義を含む本願では、用語「モジュール」は用語「回路」と置き換えることができる。用語「モジュール」は、特定用途集積回路（ＡＳＩＣ）、デジタル、アナログ、若しくはアナログ／デジタル混合のディスクリート回路、デジタル、アナログ、若しくはアナログ／デジタル混合の集積回路、組み合わせ論理回路、利用者書き換え可能ゲートアレイ（ＦＰＧＡ）、コードを実行するプロセッサ（共用、専用、又はグループ）、プロセッサによって実行されるコードを記憶するメモリ（共用、専用、又はグループ）、本明細書に記載の機能を提供する他の適切なハードウェア構成要素、又はシステムオンチップなど上記の一部若しくはすべての組み合わせ、を指すか、それらの一部であるか、又はそれらを含むことができる。
【００８８】
[00102]上記で使用した用語「コード」は、ソフトウェア、ファームウェア、及び／又はマイクロコードを含み、プログラム、ルーチン、関数、クラス、及び／又はオブジェクトを指す可能性がある。用語「共用プロセッサ」は、複数のモジュールにあるコードの一部又はすべてを実行する単一のプロセッサを包含する。用語「グループプロセッサ」は、さらに他のプロセッサとの組み合わせで、１つ又は複数のモジュールにあるコードの一部又はすべてを実行するプロセッサを包含する。用語「共用メモリ」は、複数のモジュールにあるコードの一部又はすべてを記憶する単一のメモリを包含する。用語「グループメモリ」は、さらに他のメモリとの組み合わせで、１つ又は複数のモジュールにあるコードの一部又はすべてを記憶するメモリを包含する。用語「メモリ」は、用語「コンピュータ読取り可能媒体」のサブセットである場合もある。用語「コンピュータ読取り可能媒体」は、媒体を通じて伝搬する一時的な電気信号及び電磁気信号は包含せず、したがって有形で非一時的なものと考えることができる。非一時的で有形のコンピュータ読取り可能媒体の非制限的な例には、不揮発性メモリ、揮発性メモリ、磁気記憶、及び光学記憶が含まれる。
【００８９】
[00103]本願に記載の装置及び方法は、１つ又は複数のプロセッサによって実行される１つ又は複数のコンピュータプログラムで一部又は全体を実装することができる。コンピュータプログラムは、非一時的で有形の少なくとも１つのコンピュータ読取り可能媒体に記憶されたプロセッサ実行可能命令を含む。コンピュータプログラムは、記憶されたデータを含む場合、及び／又は記憶されたデータに依拠する場合もある。
【図１Ａ】
0006468499.tif 000002
【図１Ｂ】
0006468499.tif 000003
【図２Ａ】
0006468499.tif 000004
【図２Ｂ】
0006468499.tif 000005
【図２Ｃ】
0006468499.tif 000006
【図２Ｄ】
0006468499.tif 000007
【図３】
0006468499.tif 000008
【図４】
0006468499.tif 000009
【図５】
0006468499.tif 000010
【図６Ａ】
0006468499.tif 000011
【図６Ｂ】
0006468499.tif 000012
【図６Ｃ】
0006468499.tif 000013
【図６Ｄ】
0006468499.tif 000014
【図７】
0006468499.tif 000015
【図８Ａ】
0006468499.tif 000016
【図８Ｂ】
0006468499.tif 000017