JP2020161152A - 分散データグリッドにおける分散データ構造をサポートするためのシステムおよび方法 - Google Patents

分散データグリッドにおける分散データ構造をサポートするためのシステムおよび方法 Download PDF

Info

Publication number
JP2020161152A
JP2020161152A JP2020090417A JP2020090417A JP2020161152A JP 2020161152 A JP2020161152 A JP 2020161152A JP 2020090417 A JP2020090417 A JP 2020090417A JP 2020090417 A JP2020090417 A JP 2020090417A JP 2020161152 A JP2020161152 A JP 2020161152A
Authority
JP
Japan
Prior art keywords
bucket
queue
distributed data
distributed
state
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2020090417A
Other languages
English (en)
Other versions
JP6920513B2 (ja
Inventor
オリバー,ブライアン・キース
Keith Oliver Brian
ナイト,ジョナサン
Knight Jonathan
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Oracle International Corp
Original Assignee
Oracle International Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Oracle International Corp filed Critical Oracle International Corp
Publication of JP2020161152A publication Critical patent/JP2020161152A/ja
Application granted granted Critical
Publication of JP6920513B2 publication Critical patent/JP6920513B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/6295Queue scheduling characterised by scheduling criteria using multiple queues, one for each individual QoS, connection, flow or priority
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/219Managing data history or versioning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/6205Arrangements for avoiding head of line blocking
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Multi Processors (AREA)

Abstract

【課題】分散データグリッドにおける分散データ構造をサポートするシステムおよび方法を提供する。【解決手段】分散データグリッド200は、複数のバケットを含む。各バケットは、分散データ構造の多数のエレメントを収容するための容量を有する。分散データグリッドは、状態所有者プロセスを含む。状態所有者プロセスは、分散データ構造に関する状態情報を保持し、分散データ構造に関する状態情報をクライアントプロセスに与える。分散キューは、複数のプロセスに格納されたバケットのキューを含む。各バケットは、分散キューの多数のエレメントを含む。分散キューは、当該分散キューに関する状態情報のローカルバージョンを保持する名前付きキューを含む。状態情報のローカルバージョンは、分散データグリッドにおけるバケットのキューに対する先頭ポインタと末尾ポインタとを含む。【選択図】図2

Description

著作権に関する注意
本特許文献の開示の一部には、著作権保護の対象となるものが含まれている。著作権者は、この特許文献または特許開示の何者かによる複製が、特許商標庁の特許ファイルまたは記録にある限り、それに対して異議を唱えないが、そうでなければ、いかなる場合もすべての著作権を留保する。
発明の分野
本発明は、概してコンピュータシステムに関し、特に分散データグリッドのサポートに関する。
背景
現代の計算システム、特に大規模な組織および企業で採用されている計算システムは、サイズおよび複雑度が増し続けている。特に、インターネットアプリケーション等の分野では、何百万人ものユーザがアプリケーションに同時にアクセスできるはずであると予測され、そうすると、事実上、ユーザが生成し消費するコンテンツの量とそのコンテンツを伴うトランザクションが急激に増加することになる。また、このような作用の結果、データベースおよびメタデータの記憶装置に対するトランザクションコールの数がそれに応じて増加するが、上記データベースおよびメタデータの記憶装置は、そのような要求に応えるための容量が限られている場合がある。これが、本発明の実施形態が取組もうとしている一般的な分野である。
概要
本明細書には、分散データグリッドにおける分散データ構造をサポートするシステムおよび方法が記載されている。分散データグリッドは複数のバケットを含み、各バケットは、分散データ構造の多数のエレメントを収容するための容量を有するように構成されている。さらに、分散データグリッドは、状態所有者プロセスを含み、状態所有者プロセスは、分散データ構造に関する状態情報を保持するように構成され、分散データ構造に関する状態情報をクライアントプロセスに与える。
本明細書には、分散データグリッドにおける分散キューをサポートするシステムおよび方法が記載されている。分散データグリッドは複数のバケットを含み、各バケットは、分散データキューの多数のエレメントを収容するための容量を有するように構成されている。さらに、分散キューは、分散キューに関する状態情報のローカルバージョンを保持する名前付きキューを含み得る。上記状態情報のローカルバージョンは、分散データグリッドにおけるバケットのキューに対する先頭ポインタと末尾ポインタとを含む。
本発明のさまざまな実施形態に従うデータグリッドクラスタを説明する図である。 本発明のある実施形態に従う、分散データグリッドにおける分散データ構造のサポートを説明する図を示す。 本発明のある実施形態に従う、分散データ構造におけるバケットのサポートを説明する図を示す。 本発明のある実施形態に従う、クライアントプロセスを用いる分散データ構造に対するオペレーションの実行を説明する図を示す。 本発明のある実施形態に従う、分散データグリッドにおける分散データ構造をサポートするための典型的なフローチャートを示す。 本発明のある実施形態に従う、分散データグリッドにおける分散キューのサポートを説明する図を示す。 本発明のある実施形態に従う、分散キューにおけるバケットを説明する図を示す。 本発明のある実施形態に従う、分散キューに対するエレメントの提供を説明する図を示す。 本発明のある実施形態に従う、分散キューに対するエレメントの提供のための相互作用図を示す。 本発明のある実施形態に従う、分散キューにおけるバケットに対するエレメントの提供のための相互作用図を示す。 本発明のある実施形態に従う、分散キューからのエレメントのポーリングを説明する図を示す。 本発明のある実施形態に従う、分散キューからのエレメントをポーリングまたはピーキングするための相互作用図を示す。 本発明のある実施形態に従う、分散キューにおけるバケットからのエレメントをポーリングまたはピーキングするための相互作用図を示す。 本発明のある実施形態に従う、分散データグリッドにおける分散キューをサポートするための典型的なフローチャートを示す。
詳細な説明
本明細書には、分散データグリッドにおける分散データ構造をサポートすることができるシステムおよび方法が記載されている。分散データグリッドは複数のバケットを含み、各バケットは、分散データ構造の多数のエレメントを収容するための容量を有するように構成されている。さらに、分散データグリッドは、状態所有者プロセスを含み、状態所有者プロセスは、分散データ構造に関する状態情報を保持するように構成され、分散データ構造に関する状態情報をクライアントプロセスに与える。
分散データグリッド
ある実施形態に従うと、本明細書において「データグリッドクラスタ」または「データグリッド」と呼ばれているものは、複数のコンピュータサーバを含むシステムであり、これらのコンピュータサーバは、分散またはクラスタ化環境においてともに働くことによって情報を管理しかつ関連する計算等のオペレーションを管理する。データグリッドクラスタを用いることにより、サーバ間で共有されるアプリケーションオブジェクトおよびデータを管理することができる。好ましくは、データグリッドクラスタは、短いレスポンス時間、高いスループット、予測可能なスケーラビリティ、連続可用性、および情報の信頼性を有していなければならない。これらの性能を有しているので、データグリッドクラスタは、計算集約的でステートフルな中間階層アプリケーションに非常に適している。データグリッドクラスタのいくつかの例、たとえばオラクルコヒーレンス(Oracle Coherence)データグリッドクラスタは、情報をインメモリで格納することによって、より高度な性能を得ることができ、かつ、複数のサーバ間で同期が取られた情報のコピーを取る際に冗長性を利用することによって、システムの弾力性とサーバの故障時のデータの可用性を確保することができる。たとえば、コヒーレンスは、信頼性がありスケーラビリティが高いピア・ツー・ピアクラスタリングプロトコル上に、複製および分散(分割)データ管理およ
びキャッシングサービスを提供する。
インメモリデータグリッドは、ともに働く多数のサーバにデータを分散させることによって、データ記憶および管理機能を提供することができる。データグリッドは、アプリケーションサーバと同じ階層においてまたはアプリケーションサーバにおいて実行されるミドルウェアであってもよい。これは、データの管理と処理を提供することができ、かつ、グリッド内においてデータが位置する場所に処理を進めることもできる。加えて、インメモリデータグリッドは、サーバが機能不全に陥ったまたはネットワークから切断されたときに自動的にかつトランスペアレントにフェイルオーバしそのクラスタ化されたデータ管理サービスを再度分散させることによって、単一障害点をなくすことができる。新たなサーバが追加されたときまたは故障したサーバを再起動させるときは、クラスタを自動的に加えサービスを今度はそれに対してフェイルオーバさせて、クラスタ負荷をトランスペアレントに再度分散させることができる。データグリッドはまた、ネットワークレベルのフォールトトレランス(fault tolerance)特徴とトランスペアレントなソフト再起動機能
も含み得る。
ある実施形態に従うと、データグリッドクラスタの機能は、さまざまなクラスタサービスを使用することに基づいている。これらのクラスタサービスは、ルートクラスタサービス、分割されたキャッシュサービス、およびプロキシサービスを含み得る。データグリッドクラスタ内の各クラスタノードは、クラスタサービスを提供するという点においても消費するという点においても、多数のクラスタサービスに参加することができる。各クラスタサービスは、データグリッドクラスタ内のサービスを一意に特定するサービス名と、このクラスタサービスができることを定義するサービスタイプとを有する。データグリッドクラスタ内の各クラスタノード上で実行されるルートクラスタサービス以外にも、各サービスタイプに属する複数の名前付きインスタンスがあるであろう。これらのサービスは、ユーザによって構成されてもよく、サービスのデフォルトセットとしてデータグリッドクラスタによって提供されてもよい。
図1は、本発明のさまざまな実施形態に従うデータグリッドクラスタを説明する図である。図1に示されるように、データグリッドクラスタ100、たとえばオラクルコヒーレンスのデータグリッドは、クラスタノード101〜106等の複数のクラスタメンバ(またはサーバノード)を含み、上記クラスタノードは、クラスタノード上で実行されるさまざまなクラスタサービス111〜116を有する。加えて、キャッシュコンフィギュレーションファイル110を用いてデータグリッドクラスタ100を構成することができる。ある実施形態において、データグリッドクラスタ100は、ともに働くクラスタノードのメモリにデータを分散させることによってデータ記憶および管理機能を提供するインメモリデータグリッドクラスタである。
分散データ構造
本発明のある実施形態に従うと、分散データグリッドは分散データ構造をサポートすることができる。たとえば、分散データ構造は、分散キュー、分散セット、分散リスト、および/または分散スタックであってもよい。
図2は、本発明のある実施形態に従う、分散データグリッドにおける分散データ構造のサポートを説明する図を示す。図2に示されるように、分散データ構造201は、複数のバケット(たとえばバケット211〜216)を含み得る。各バケットは多数のエレメントを含むように構成されている。使用時、バケットは、ゼロ、1つ、または2つ以上のエレメントを、異なる時点において含み得る。これらのエレメントは、分散データ構造のアプリケーションに応じて、たとえばデータの単位、コール、要求、応答、メッセージ、トランザクション、および/またはイベントを含むデータエレメントであってもよい。
さらに、クラスタ200内の状態所有者プロセス202は、分散データ構造201の状態203を保持する役割を有し得る。分散データ構造201は、個々のエレメントに対して直接働くのではなく、異なるバケット211〜216に対して別々に異なるオペレーションを実行することができる。
図2に示されるように、分散データグリッド200内のプロセス221〜223等のプロセスのクラスタは、複数のバケット211〜216を維持する(または所有する)ことができる。たとえば、バケット211〜216を、プロセス221〜223のクラスタに均等に分散させることができ、各プロセスは、1つ以上のバケットを維持する(または所有する)役割を果たす。よって、分散データ構造201の全体のサイズは、単一のプロセスの最大記憶容量を超える可能性がある。なぜなら、各プロセス221〜223が分散データ構造201のコンテンツの一部のみを格納する役割を果たすからである。
本発明のある実施形態に従うと、分散データ構造201では、分散データ構造201内の異なるバケット211〜216に対し、異なるオペレーションを、複数のユーザプロセスが同時に実行することができる。図2に示されるように、オペレーション204をバケット211に対して実行することができ、その一方で別のオペレーション206をバケット216に対して実行する。このように、このシステムは、分散データ構造201における競合(contention)を減じることができる。なぜなら、分散データ構造201に対するアクセス要求を複数のバケットに分散させることができるからである。
さらに、分散データ構造201は、どの時点においても1つのプロセスのみが1つのバケット内のエレメントにアクセスできることを保証することが可能である。たとえば、システムは、競合している個々のバケットに対してロック機構を適用することができる。これに代えて、システムは、異なるプロセスが順番に処理を待つようにする要求キューを利用することができる。
図2に示されるように、オペレーション204がバケット211に対して実行されている間、バケット211はロックされている。同じバケット211に対する、オペレーション205等の他のオペレーションは、ロックしているオペレーション204が終了するまで待つ必要があるであろう。同様に、オペレーション206がバケット216に対して実行されている間、バケット216はロックされており、同じバケット216に対するオペレーション207等の他のオペレーションは、ロックしているオペレーション206が終了するまで待つ必要があるであろう。
図3は、本発明のある実施形態に従う、分散データ構造におけるバケットのサポートを説明する図を示す。図3に示されるように、分散データグリッド300内のバケット301は、多数のエレメントを含むように構成され、分散データ構造の内部データ構造310内において1つ以上のエレメント、たとえばエレメント311〜315を含み得る。加えて、バケット301は、バケット301に格納されているエレメント311〜315にアクセスするために使用できるさまざまなバケット状態303を維持することができる。
本発明のある実施形態に従うと、バケット301は、バケット301が含み得る最大数のエレメントに相当する容量を有するように構成されている。よって、バケット301は分散データ構造の多数のエレメントを含むように構成されている。バケット301は、使用時、ゼロから(容量までの)1つ以上のエレメントを保持することができる。さらに、(特定のデータアクセスパターンについての性能を改善することを目的として)バケット301の容量を、異なる分散データ構造をサポートするために調整することができる。
加えて、バケット301は、分散データグリッド300内の他のノードに複製することができる。図3に示されるように、1つ以上のエレメント(たとえば内部データ構造320のエレメント321〜325)と対応するバケット状態304とを含むバックアップバケット302を、バケット301が失われたときに代わりに使用することができる。
図4は、本発明のある実施形態に従う、クライアントプロセスを用いる分散データ構造に対するオペレーションの実行を説明する図を示す。図4に示されるように、分散データグリッド400内の分散データ構造401は、複数のバケット、たとえばバケット411〜416を含み得る。加えて、状態所有者プロセス402は、分散データ構造401に関する状態情報403を保持する役割を有し得る。
さらに、クライアントプロセス404は、分散データ構造401に関する状態情報405のローカルコピーを保持する名前付きデータ構造410を使用する(または含む)ことができる。たとえば、システムは、クライアントプロセス404が最初に分散データ構造401に接続するときに、状態情報405を初期化することができる。
本発明のある実施形態に従うと、複数のクライアントプロセスが分散データ構造401に対して同時にアクセスすることができる。クライアントプロセス404上の状態情報405のローカルコピーは、別のクライアントプロセスが分散データ構造401の状態403を変更したときに無効(stale)になるであろう。
分散データ構造401を用いると、名前付きデータ構造410内の(すなわちクライアントプロセス404によって使用される)ロジックは、状態405が無効である可能性があることを考慮することができる。よって、毎回オペレーション前に状態情報405をリフレッシュする必要はない。
図4に示されるように、状態405が無効になると、(クライアントプロセス404上の)名前付きデータ構造410は、状態405をリフレッシュするために状態所有者プロセス402に対してメッセージを送信することができる。状態所有者プロセス402は、このメッセージを受けた後に、新たな状態403をクライアントプロセス404に返送することができ、そうすると、クライアントプロセス404は、バケット416に対するオペレーション420をプロセス421を通して実行することができる。
本発明のある実施形態に従うと、バケットが一旦作成されると、このバケットは、たとえ空になったとき(すなわちエレメントがすべてポーリングされたまたはこのバケットから削除されたとき)でも分散データ構造401から削除されることはないであろう。このことは、複数のクライアントプロセスのオペレーションをサポートするためには有益となり得る。
図5は、本発明のある実施形態に従う、分散データグリッドにおける分散データ構造をサポートするための典型的なフローチャートを示す。図5に示されるように、ステップ501において、システムは複数のバケットを分散データグリッド内に与えることができ、各バケットは、分散データ構造の多数のエレメントを収容するための容量を有するように構成されている。バケットは、使用中の異なるポイントにおいて分散データ構造のゼロまたは(容量までの)1つ以上のエレメントを含み得る。さらに、ステップ502で、状態所有者プロセスは、分散データ構造に関する状態情報を保持することができる。次に、ステップ503で、状態所有者プロセスは、分散データ構造に関する状態情報をクライアントプロセスに提供することができる。
分散キュー
本発明のある実施形態に従うと、分散データグリッドは分散キューをサポートすることができる。たとえば、分散キューは複数のキュー(またはバケット)からなるキューであり、各バケットはペアレントキューにおけるサブキューである。
図6は、本発明のある実施形態に従う、分散データグリッドにおける分散キューのサポートを説明する図を示す。図6に示されるように、分散キュー601は、分散データグリッド600において、バケット、たとえばバケット611〜616からなるキューを含み得る。複数のバケット(たとえばバケット611〜616)は各々、多数のエレメントを含むように構成されている。使用時、バケットは、異なる時点において、ゼロ、1つ、または2つ以上のエレメントを含み得る。分散データ構造のアプリケーションに応じて、エレメントは、たとえばデータの単位、コール、要求、応答、メッセージ、トランザクション、および/またはイベントを含むデータエレメントであってもよい。
加えて、状態所有者プロセス602は、分散キュー601の状態603を保持する役割を有し得る。たとえば、状態603は、分散キュー601における現在の先頭バケット611に対する先頭ポインタと、分散キュー601における末尾バケット616に対する末尾ポインタとを含み得る。
本発明のある実施形態に従うと、クライアントプロセス604は、分散キュー601の現在の状態603をキュー状態所有者602から取得することができるとともに、分散キュー601に対してさまざまなオペレーション(提供およびポーリングオペレーション等)を実行することができる。
図6に示されるように、ユーザプロセス606〜607がアクセスし得るクライアントプロセス604は、名前付きキュー610を使用する(または含む)ことができる。名前付きキュー610は、自身のビュー内の先頭ポインタと末尾ポインタとを含むキュー状態605のローカルコピーを維持することができる。たとえば、キュー状態605における先頭ポインタは先頭バケット611を指すことができ、キュー状態605における末尾ポインタは末尾バケット616を指すことができる。
キュー状態605の構造は、クライアントプロセス604が最初に分散キュー601に接続するときに初期化できる。さらに、クライアントプロセス604は、毎回オペレーションの前にそのキュー状態605をリフレッシュする必要はない。なぜなら、(オペレーションの提供およびポーリングを実行するための)名前付きキュー610内のロジックは、維持されているキュー状態605が無効である可能性があることを考慮できるからである。
本発明のある実施形態に従うと、クライアントプロセス604は、1つ以上のエレメントを分散キュー601の末尾バケット616(すなわち終端)に提供する(または追加する)ことによって、提供というオペレーションを分散キュー601に対して実行することができる。また、クライアントプロセス604は、分散キュー601の先頭バケット611(すなわち前端)から1つ以上のエレメントをポーリングする(または削除する)ことによって、ポーリングオペレーションを分散キュー601に対して実行することができる。加えて、クライアントプロセス604は、ピーキングオペレーションを分散キュー601に対して実行することにより、(分散キュー601からエレメントを削除することなく)1つ以上のエレメントの値を取得することができる。
加えて、異なるクライアントプロセスが異なるオペレーションを同時に実行することを試みてもよい。異なるクライアントプロセスによって複数の試みを処理するために、分散キュー601の先頭バケット611と末尾バケット616の周りに暗黙のトランザクショ
ンを形成してもよい。システムは、競合している先頭バケット611および/または末尾バケット616に対してロック機構を適用することができる。これに代えて、システムは、異なるプロセスが順番に処理を待つようにする要求キューを利用することができる。
図7は、本発明のある実施形態に従う、分散キューにおけるバケットを説明する図を示す。図7に示されるように、分散キュー700におけるバケット701は、エレメント、たとえばキュー710におけるエレメント711〜715からなるキューを含む。
加えて、バケット701は、バケット701に格納されている異なるエレメント711〜715にアクセスするために使用できるさまざまなバケット状態702を維持することができる。バケット状態702は、バケット701における先頭エレメント711に対するポインタと、バケット701における末尾エレメント716に対するポインタとを含み得る。
さらに、バケット701内のエレメント711〜715は、(バケット701を格納する)同じプロセスを用いて格納することができる。バケット701が最初に作成されたとき、先頭および末尾のエレメントに対するポインタは、このバケット701が空であることを示す特殊な値を含み得る。また、バケット701は、バケット701がキューにおける最後のバケットであるか否かを示すフラグを含み得る。
図8は、本発明のある実施形態に従う、分散キューに対するエレメントの提供を説明する図を示す。図8に示されるように、分散データグリッド800内の分散キュー801は、バケット、たとえばバケット811〜816からなるキューを含み得る。バケットは各々、多数のエレメントを保持するための容量を有するように構成されていてもよく、使用中はゼロ以上のエレメントを保持し得る。加えて、状態所有者プロセス802は、分散キュー801の状態情報をキュー状態803に保持する役割を有し得る。
本発明のある実施形態に従うと、クライアントプロセス804は、名前付きキュー810におけるキュー状態805によって示されるように、末尾バケットに対して1つ以上のエレメントを提供(または追加)することを試みることができる。たとえば、クライアントプロセス804は、バケット815が末尾バケットであると想定し得る。なぜなら、キュー状態805における末尾ポインタがバケット815を指しているからである。したがって、クライアントプロセス804は、バケット815を維持しているプロセス821に対して提供メッセージ(一組のエレメントを含む)を送信することができる。
その後、クライアントプロセス804は、そのメッセージに対する応答を受信することができる。この応答の内容は、上記提供オペレーションが成功であったか否かをクライアントプロセス804に対して知らせることができる。たとえば、上記応答が空である場合は、提供したエレメントすべてが末尾バケットに追加されたことになる。一方、この応答が何らかのエレメントを含む場合は、これらのエレメントがバケットに提供(または追加)されなかったことになる。
システムが1つ以上のエレメントをバケットに提供(または追加)しない理由として他の理由が存在し得る。たとえば、認識された末尾バケットがもはや現在末尾ではない(すなわちキュー状態805が無効である)場合がある。この場合、エレメントはすべて応答で返送される。これに代えて、現在の末尾バケットが、提供されたエレメントをすべて保持するのに十分な残容量を有していない場合がある。この場合、残ったエレメントが応答メッセージで返送される。
いずれの場合も、ある提供に対する応答が、提供されていないエレメントを含むとき、
クライアントプロセス804は、次の末尾バケットIDが何であるかを知る必要があるであろう。プロセス804は、キュー状態803を所有している状態所有者プロセス802に対してメッセージを送信してキュー状態803が次の末尾バケットを指す必要があることを状態所有者プロセス802に知らせることができる。
複数のクライアントプロセスがある場合、クライアントプロセス804は、別のクライアントプロセスが既に末尾IDを移動させたか否かを知らない場合がある。システムは、アトミック比較設定(atomic compare and set)オペレーションとして末尾IDを移動させるオペレーションを実行することができる。
図8に示されるように、クライアントプロセス804が状態所有者プロセス802に対して末尾IDのインクリメントを依頼するとき、クライアントプロセス804はまた、キュー状態805における末尾IDを状態所有者プロセス802に対して送信することができる。
キュー状態805における末尾IDがキュー状態803における現在の末尾IDと一致するとき、システムは、末尾を次のバケットIDに移動させることによってキュー状態803を変更することができる。そうすると、システムは、更新されたキュー状態803における末尾IDを応答としてクライアントプロセス804に送信することができる。
キュー状態805における末尾IDがキュー状態803における現在の末尾IDと一致しないとき、キュー状態803は、このメッセージによってインクリメントされたかまたは既にインクリメントされていたかのいずれかである可能性がある。この場合、システムは、現在のキュー状態803における末尾IDを応答としてクライアントプロセス804に送信することができる。
たとえば、クライアント側の末尾IDが10であり所有者側の末尾IDが10である場合、所有者側の末尾IDを11に移動させることができ、この値をクライアントにリターンすればよい。クライアント側の末尾IDが10であり所有者側の末尾IDが既に11である場合、キュー状態の所有者が値11をクライアントにリターンすればよい。
図8に示されるように、キュー状態803は新たな末尾バケット816を指している。クライアントプロセス804は、正しい末尾IDを受信した後に、提供すべき残りのエレメントを含む提供メッセージを、新たな末尾バケット816を所有しているプロセスに送信することができる。
さらに、新たな末尾バケット816が、提供されたエレメントすべてを保持することができない場合がある。たとえば、別のクライアントプロセスが既に新たな末尾バケット816を満たしているかもしれない、または、新たな末尾バケット816がエレメントすべてを保持するのに十分な容量を有していない。その場合、システムは、分散キュー801に対するすべてのエレメントの提供(追加)が成功するまで、末尾バケットIDをインクリメントし残りのエレメントを提供する上記プロセスを繰返せばよい。
図9は、本発明のある実施形態に従う、分散キューに対するエレメントの提供のための相互作用図を示す。図9に示されるように、クライアントプロセス901は、分散データグリッドにおける分散キューに1つ以上のエレメントを提供(または追加)するために名前付きキュー902を使用することができる。分散データグリッドは、キュー状態906を所有するキュー状態所有者905であるクラスタメンバ905を含む。
ステップ911において、名前付きキュー902は、分散キューの末尾に新たな値を提
供するためのメッセージを(たとえばクライアントプロセス901から)受信することができる。クライアントプロセス901に対応付けられた名前付きキュー902は、分散キューのキュー状態906のローカルバージョンであるキュー状態903を維持することができる。
名前付きキュー902は、ローカルキュー状態903における情報が正しいと想定し得る。ステップ912〜913において、名前付きキュー902は、末尾IDおよびキューのバージョンナンバー等の、キューに関する状態情報を要求しローカルキュー状態903から受信することができる。
次に、クライアントプロセス901に対応付けられた名前付きキュー902は、末尾バケットを所有するクラスタメンバに、したがってそのローカルビューに、提供メッセージを送信することができる。ステップ914において、名前付きキュー902は、受信した値を、キュー状態906から受信した末尾IDに基づく末尾バケットを所有するクラスタメンバ904に提供することができる。
末尾バケットに対する上記値の提供(または追加)が成功した場合、ステップ915において、クラスタメンバ904は空のセットをリターンすることができ、ステップ916において、名前付きキュー902は、OFFER_ACCEPTEDメッセージをクライアントプロセス901に返送することができる。
そうでない場合、末尾バケットに対する上記値の提供(または追加)は、たとえばバケットが満杯であることが原因でまたはキュー状態のバージョンの不一致が原因で、成功していない。ステップ915において、クラスタメンバ904は、一組の、提供されなかったエレメントを、名前付きキュー902にリターンすることができる。その場合、名前付きキュー902は、たとえば次の末尾バケットにメッセージを送信することにより、提供オペレーションを再び試みてもよい。名前付きキュー902は、分散キューが満杯になるまでまたは受信した値の提供(または追加)に成功するまで、受信したものを分散キューの末尾に対して繰返し(たとえばループ910において)追加しようと試みてもよい。
ループ910内で、名前付きキュー902は、バケットが満杯であることまたはバージョンの不一致を原因とする前の提供の失敗が生じた場合、末尾IDおよびキューバージョンのそのビューをリフレッシュまたは更新する必要がある場合がある。
ステップ917において、名前付きキュー902は、末尾IDをリフレッシュするために要求をローカルキュー状態903に送信することができる。ステップ918において、ローカルキュー状態903は、キュー状態906の所有者であるクラスタメンバ905から次の末尾IDを取得しようと試みてもよい。たとえば、メッセージは、ローカルキュー状態903におけるこのような情報に基づく末尾IDおよびキューバージョン情報を含んでいてもよい。
ステップ919〜920において、クラスタメンバ905は、所有者バージョンのキュー状態906における状態情報を要求して取得することができる。よって、クラスタメンバ905は、たとえばローカルキュー状態903から受信した情報とキュー状態906を比較することにより、キュー状態をリフレッシュすべきか否か判断することができる。
たとえば、ローカルキュー状態903は、ローカルキュー状態903が所有者キュー状態906における情報と一致しないときは無効である。このような場合、所有者キュー状態906における状態情報を、ローカルキュー状態903にリターンしてもよい(すなわちローカルキュー状態903がリフレッシュされる)。
ローカルキュー状態903における情報がキュー状態906における情報と一致するとき、ステップ921において、クラスタメンバ905は、たとえば末尾を次のバケットIDに移動させることにより、キュー状態906を更新することができる。次に、ステップ922において、キュー状態906は、キューの更新された状態情報をクラスタメンバ905に与えることができる。たとえば、末尾IDが最初のバケットIDまたはその他いずれかの使用済バケットに折返すことによって次のバケットIDに移動した場合は、キューバージョンナンバーをインクリメントすればよい。
加えて、キューが満杯であるか否か判断するために検査を実行することができる。たとえば、末尾IDのインクリメントによって末尾IDが現在の先頭IDと同値になる場合、キューは満杯である。
図9に示されるように、ステップ923〜924において、クラスタメンバ905は、(リフレッシュまたは更新された)キューの状態情報をキュー状態903に与えることができ、キュー状態903は、キューの状態情報を名前付きキュー902に与えることができる。たとえば、このような状態情報は、QUEUE_FULLメッセージ、または、更新されたキューバージョンナンバーを伴う更新された末尾IDを含み得る。
ステップ925において、分散キューが満杯である場合、名前付きキュー902は、QUEUE_FULLメッセージをクライアントプロセス901に送信することができる。そうでなければ、ステップ926〜927において、名前付きキュー902は、キューの状態情報を要求してキュー状態903から取得することができる。さらに、ステップ928〜929において、名前付きキュー902は、クラスタメンバ904に(または更新された末尾IDを有するバケットを所有するその他いずれかのクラスタメンバに)値を提供(または追加)することができる。
図9に示されるように、名前付きキュー902は、受信した値の追加に成功するまで、たとえばループ901において、受信したエレメントを分散キューの末尾に提供(または追加)することを繰返し試みてもよい。ステップ930において、名前付きキュー902は、受信した値の追加に成功した後に、QUEUE_SUCCESSメッセージをクライアントプロセ
ス901に送信することができる。
図10は、本発明のある実施形態に従う、分散キューにおけるバケットに対するエレメントの提供のための相互作用図を示す。図10に示されるように、発呼側(たとえば名前付きキュー1001)を用いて、分散データグリッドにおけるクラスタメンバ1002が所有する特定のバケット1003に1つ以上のエレメントを提供(または追加)することができる。
ステップ1011において、名前付きキュー1001は、バケットIDおよびキューバージョン情報等の状態情報に基づいてクラスタメンバ1002に値を提供することができる。ステップ1012〜1013において、特定のバケットIDを有するバケット1003が存在しない場合は新たなバケットが作成されてもよい。
ステップ1014〜1015において、クラスタメンバ1002はバケット1003が満杯であるか否か検査することができる。バケットが満杯である場合、ステップ1016において、クラスタメンバ1002はBUCKET_FULLメッセージを名前付きキュー1001
に送信することができる。そうでない場合は、ステップ1017〜1018において、クラスタメンバ1002はバケット1003から状態情報を取得することができる。
ステップ1019において、名前付きキュー1001のビューにおけるキューバージョン情報が、バケット1003に対応付けられたキューバージョン情報と一致しない場合、名前付きキュー1001はOFFER_FAILEDメッセージを名前付きキュー1001に送信することができる。
ステップ1020〜1021において、名前付きキュー1001は、値をバケット1003に追加することができる。次に、ステップ1022において、名前付きキュー1001は、OFFER_SUCCESSメッセージを名前付きキュー1001に送信することができる。
図11は、本発明のある実施形態に従う、分散キューからのエレメントのポーリングを説明する図を示す。図11に示されるように、分散データグリッド1100における分散キュー1101は、バケット、たとえばバケット1111〜1116からなるキューを含み得る。各バケットは1つ以上のエレメントを含み得る。加えて、状態所有者プロセス1102は、分散キュー1101のキュー状態1103の状態情報を保持する役割を有し得る。
本発明のある実施形態に従うと、クライアントプロセス1104は、分散キュー1101の先頭バケットに対してポーリングまたはピーキング動作を実行することができる。たとえば、ポーリング動作は、分散キュー1101からエレメント(先頭エレメント等)をリターンして削除することができる。一方、ピーキング動作は、先頭エレメントを削除せずに、分散キュー1101の先頭エレメントの値をリターンすることができる。
図11に示されるように、クライアントプロセス1104は、バケット1111が分散キュー1101における先頭バケットであると想定する。分散キュー1101からのポーリングのために、クライアントプロセス1104は、先頭バケット1111を所有するプロセス1121にメッセージを送信する。次に、クライアントプロセス1104は、分散キュー1101の先頭からのエレメントまたはバケット1111が空であるという表示を含む応答を受信することができる。
バケット1111が空である(分散キュー1101自身は空でない場合)ことを応答が示す場合、名前付きキュー1110が維持するキュー状態1105は無効である。よって、キュー状態1105は、先頭バケットIDが次の先頭IDに更新されるよう、リフレッシュされる必要があるであろう。
図11に示されるように、キュー状態1104は、キュー状態1103を所有する状態所有者プロセス1102に、先頭IDのインクリメントをキュー状態1103に命令するためのメッセージを送信することができる。ポーリングまたはピーキングオペレーションのために次の先頭IDに移動させるオペレーション(すなわちキュー状態1105のリフレッシュ)は、アトミック比較設定オペレーションであってもよく、この場合、キュー状態1103は、現在の先頭IDがクライアントの先頭IDと一致する場合に限って変更される。クライアントプロセス1104は次に、このメッセージによってインクリメントされたかまたは以前にインクリメントされていたキュー状態1103からの先頭IDを含む応答を受信することができる。
最後に、クライアントプロセス1104は、新たな先頭バケットを所有するプロセスに、ポーリング/ピーキングメッセージを再送することができる。
図12は、本発明のある実施形態に従う、分散キューからのエレメントをポーリングまたはピーキングするための相互作用図を示す。図12に示されるように、クライアントプロセス1201は、名前付きキュー1202を使用して、分散データグリッドにおける分
散キュー1200の1つ以上のエレメントに対してポーリングまたはピーキング動作等の動作を実行することができる。分散キュー1200は、キュー状態1206を所有するキュー状態所有者1205であるクラスタメンバ1205を含む。
ステップ1211において、名前付きキュー1202は、分散キュー1200の先頭エレメントに対してポーリングまたはピーキング動作を実行するための(たとえばクライアントプロセス1201からの)メッセージを受信することができる。クライアントプロセス1201に対応付けられた名前付きキュー1202は、分散キュー1200のキュー状態1203のローカルバージョンを維持することができる。
ステップ1212〜1213において、名前付きキュー1202は、分散キュー1200が空であるか否かに関する情報を取得するためにキュー状態1203を検査することができる。分散キュー1200が空であるとき、ステップ1214において、名前付きキュー1202は、QUEUE_EMPTYメッセージをクライアントプロセス1201に送信すること
ができる。
さらに、キューが空でない場合、クライアントプロセス1201は、現在の先頭IDおよびキューバージョンナンバーを有していると想定する。ステップ1215〜1216において、名前付きキュー1202は、先頭IDおよびキューバージョンナンバー等の状態情報を要求してローカルキュー状態1203から受信することができる。名前付きキュー1202は、分散キュー1200の先頭エレメントに対してポーリングまたはピーキング動作を実行するためにこのような情報を使用することができる。
次に、ステップ1217において、名前付きキュー1202は、受信した先頭IDに基づく先頭バケットを所有するクラスタメンバ1204に対してポーリングまたはピーキング動作を実行することができる。
先頭バケットに対するこの動作の実行が成功した場合、ステップ1218において、クラスタメンバ1204は、1つ以上のエレメントを名前付きキュー1202にリターンすることができ、ステップ1219において、名前付きキュー1202は、上記エレメントをクライアントプロセス1201にリターンすることができる。
そうではなく、先頭バケットに対する上記動作の実行が成功しなかった場合、ステップ1218において、クラスタメンバ1204は、空のセットを名前付きキュー1202にリターンすることができる。このような場合、クライアントプロセス1201は、先頭IDおよびキューバージョン情報のそのビューを更新する必要がある場合がある。
図12に示されるように、名前付きキュー1202は、分散キュー1200が空になるまでまたはポーリングもしくはピーキング動作の実行が成功するまで、(たとえばループ1210において)分散キュー1200に対するポーリングまたはピーキング動作の実行を繰返し試みてもよい。
ループ1210内のステップ1220において、名前付きキュー1202は、先頭IDおよびキューバージョンナンバーをリフレッシュすることをローカルキュー状態1203に要求することができ、ステップ1221において、ローカルキュー状態1203は、キュー状態1206の所有者であるクラスタメンバ1205から次の先頭IDを取得しようと試みてもよい。
ステップ1222〜1223において、クラスタメンバ1205は、キュー状態1206における状態情報の所有者バージョンを要求して取得することができる。たとえば、メ
ッセージは、ローカルキュー状態1203における情報に基づく先頭IDおよびキューバージョン情報を含み得る。よって、クラスタメンバ1205は、たとえばローカルキュー状態1203から受信した情報とキュー状態1206を比較することによって、キュー状態が無効か否か判断することができる。
たとえば、ローカルキュー状態1203における情報がキュー状態1206における情報と一致しない場合、キュー状態1203は無効である。このような場合、キュー状態1206における状態情報をキュー状態1203にリターンしてもよい(すなわちキュー状態1203がリフレッシュされる)。
ローカルキュー状態1203における情報がキュー状態1206における情報と一致するとき、ステップ1224において、クラスタメンバ1205は、たとえば先頭を次のバケットIDに移動させることにより、キュー状態1206を更新することができる。次に、ステップ1225において、キュー状態1206は、キュー状態1206の更新された状態情報をクラスタメンバ1205に与えることができる。加えて、キューが空であるか否か判断するために検査を実行することができる。たとえば、分散キュー1200は、先頭IDが末尾IDと同一であるときは空のキューであり、この場合、先頭IDを末尾IDに対してインクリメントしなくてもよい。
ステップ1226〜1227において、クラスタメンバ1205は、(リフレッシュまたは更新された)キューの状態情報をキュー状態1203に与えることができ、キュー状態1203は、このキュー状態情報を名前付きキュー1202に与えることができる。たとえば、このような状態情報は、QUEUE_EMPTYメッセージまたは更新されたキューバージ
ョンナンバーとともに更新された先頭IDを含み得る。
ステップ1228〜1229において、名前付きキュー1202は、(複数のオペレーションを分散キュー1200に対して実行し得るので)分散キュー1200が空であるか否か判断するためにキュー状態1203を検査することができる。ステップ1230において、分散キュー1200が空であるとき、名前付きキュー1202は、QUEUE_EMPTYメ
ッセージをクライアントプロセス1201に送信することができる。
そうでない場合は、ステップ1231〜1232において、名前付きキュー1202は、キュー状態1203の更新された状態情報を要求しキュー状態1203から取得することができる。ステップ1233〜1234において、名前付きキュー1202は、クラスタメンバ1204(または更新された先頭IDを有するバケットを所有する他のいずれかのクラスタメンバ)に対してポーリングまたはピーキング動作を実行することができる。
図12に示されるように、名前付きキュー1202は、ポーリングまたはピーキング動作の実行が成功するまで、(たとえばループ1210において)分散キュー1200の先頭に対するポーリングまたはピーキング動作の実行を繰返し試みてもよい。ステップ1235において、名前付きキュー1202は、エレメントをクライアントプロセス1201にリターンすることができる。
図13は、本発明のある実施形態に従う、分散キューにおけるバケットからのエレメントをポーリングまたはピーキングするための相互作用図を示す。図13に示されるように、発呼側(たとえば名前付きキュー1301)を用いて、分散データグリッドにおけるクラスタメンバ1302が所有するバケット1303に対し、ポーリングまたはピーキング動作等の動作を実行することができる。
ステップ1311において、名前付きキュー1301は、バケットIDおよびキューバ
ージョンナンバー等の状態情報に基づいてクラスタメンバ1302に対しポーリングまたはピーキング動作を実行することができる。
ステップ1312〜1313において、クラスタメンバ1302は、バケット1303が空であるか否か検査することができる。ステップ1314において、バケット1303が空である場合、クラスタメンバ1302は、BUCKET_EMPTYメッセージを名前付きキュー1301に送信することができる。
ステップ1315〜1316において、クラスタメンバ1302は、バケットの状態情報をバケット1303から取得することができる。
ステップ1317において、名前付きキュー1301のビューにおけるキューバージョン情報がバケット1303に対応付けられたキューバージョン情報と一致しない場合、クラスタメンバ1302は、POLL_FAILEDメッセージを名前付きキュー1301に送信する
ことができる。
そうでない場合、ステップ1318〜1324において、クラスタメンバ1302は、バケット1303に対してポーリングまたはピーキング動作を実行することができる。たとえば、この動作がポーリング動作である場合、バケット1303は、バケットエレメント1304を削除または消去する前にバケットエレメント1304の値をリターンすることができる。加えて、バケットは、バケットエレメント1304の削除または消去後にバケットが空になった場合は、キューバージョンを更新することができる。次に、クラスタメンバ1302は、エレメントを名前付きキュー1301に与えることができる。一方、上記動作がピーキング動作である場合、バケット1303は、バケットエレメント1304を削除または消去することなくバケットエレメント1304の値をリターンすることができる。
図14は、本発明のある実施形態に従う、分散データグリッドにおける分散キューをサポートするための典型的なフローチャートを示す。図14に示されるように、ステップ1401において、システムは、複数のバケットを分散データグリッド内に与えることができる。次に、ステップ1402において、システムは、分散キューの1つ以上のエレメントを複数のバケットに格納することができる。さらに、ステップ1403において、システムは、名前付きキューを用いて分散キューに関する状態情報のローカルバージョンを保持することができ、状態情報のローカルバージョンは、分散データグリッド内のバケットのキューに対する先頭ポインタと末尾ポインタとを含む。
分散データグリッドにおける分散キューをサポートするためのシステムは、1つ以上のマイクロプロセッサと、この1つ以上のマイクロプロセッサ上で実行される分散データグリッド内の複数のバケットとを含み、キューにおいて維持される上記複数のバケットは、分散キューの1つ以上のエレメントを格納するように構成されており、上記システムはまた、上記分散キューに関する状態情報のローカルバージョンを保持する名前付きキューを含み、上記状態情報のローカルバージョンは、上記分散データグリッドにおけるバケットのキューに対する先頭ポインタと末尾ポインタとを含む。
上記システムがさらに含む手段において、上記名前付きキューはクライアントプロセスに対応付けられ、クライアントプロセスは、上記分散キューにおける1つ以上のエレメントにアクセスするために1つ以上のユーザプロセスによって使用される。
上記システムがさらに含む手段において、上記クライアントプロセスは、上記分散キューに関する状態情報のローカルバージョンに基づいて上記バケットのキューにおける末尾
バケットに対して1つ以上のエレメントを提供するように構成されている。
上記システムがさらに含む手段において、上記クライアントプロセスは、末尾バケットを所有するプロセスから受信したメッセージが1つ以上のまだ提供されていないエレメントを含むときは、上記キュー状態が無効であると判断するように構成されている。
上記システムがさらに含む手段において、上記クライアントプロセスは、状態所有者プロセスから、リフレッシュされたキュー状態を取得するように構成されており、リフレッシュされたキュー状態は新たな先頭バケットを示す。
上記システムがさらに含む手段において、上記クライアントプロセスは、上記分散キューに関する状態情報のローカルバージョンに基づいて、バケットのキューにおける先頭バケットからのエレメントをポーリングまたはピーキングするように構成されている。
上記システムがさらに含む手段において、上記クライアントプロセスは、上記分散キューが空でないときに上記先頭バケットを所有するプロセスから受信したメッセージが空である場合は、上記キュー状態が無効であると判断するように構成されている。
上記システムがさらに含む手段において、上記クライアントプロセスは、状態所有者プロセスから、リフレッシュされたキュー状態を取得するように構成されており、リフレッシュされたキュー状態は新たな先頭バケットを示す。
上記システムがさらに含む手段において、各バケットは、現在の先頭エレメントに対するポインタと現在の末尾エレメントに対するポインタとを含むバケット状態を維持し、バケットはオペレーションが実行されている間はロックされ、上記バケットに対するその他のオペレーションは、上記実行されているオペレーションが完了するまで待機するように構成されている。
分散データグリッドにおける分散キューをサポートするための方法は、複数のバケットを分散データグリッド内に与えるステップを含み、各バケットは分散キューの1つ以上のエレメントを格納するように構成されており、上記方法はさらに、分散キューの1つ以上のエレメントを複数のバケットに格納するステップと、名前付きキューを用いて分散キューに関する状態情報のローカルバージョンを保持するステップとを含み、上記状態情報のローカルバージョンは、分散データグリッドにおけるバケットのキューに対する先頭ポインタと末尾ポインタとを含む。
上記方法はさらに、上記名前付きキューをクライアントプロセスに対応付けるための手段を含み、上記クライアントプロセスは、上記分散キューにおける1つ以上のエレメントにアクセスするために1つ以上のユーザプロセスによって使用される。
上記方法はさらに、上記クライアントプロセスを用いて、上記分散キューに関する状態情報のローカルバージョンに基づいて上記バケットのキューにおける末尾バケットに対して1つ以上のエレメントを提供するための手段を含む。
上記方法はさらに、上記クライアントプロセスを用いて、末尾バケットを所有するプロセスから受信したメッセージが1つ以上のまだ提供されていないエレメントを含むときは、上記キュー状態が無効であると判断するための手段を含む。
上記方法はさらに、上記クライアントプロセスを用いて、状態所有者プロセスから、リフレッシュされたキュー状態を取得するための手段を含み、上記リフレッシュされたキュ
ー状態は新たな先頭バケットを示す。
上記方法はさらに、上記クライアントプロセスを用いて、上記分散キューに関する状態情報のローカルバージョンに基づいて、バケットのキューにおける先頭バケットからのエレメントをポーリングまたはピーキングするための手段を含む。
上記方法はさらに、上記クライアントプロセスを用いて、上記分散キューが空でないときに上記先頭バケットを所有するプロセスから受信したメッセージが空である場合は、上記キュー状態が無効であると判断するための手段を含む。
上記方法はさらに、上記クライアントプロセスを用いて、状態所有者プロセスから、リフレッシュされたキュー状態を取得するための手段を含み、上記リフレッシュされたキュー状態は新たな先頭バケットを示す。
上記方法はさらに、各バケットのバケット状態を維持するための手段を含み、バケット状態は、現在の先頭エレメントに対するポインタと現在の末尾エレメントに対するポインタとを含み、バケットはオペレーションが実行されている間はロックされ、上記バケットに対するその他のオペレーションは、上記実行されているオペレーションが完了するまで待機するように構成されている。
分散データグリッドにおける分散キューをサポートするための命令が格納された非一時的なマシン読取可能な記憶媒体において、上記命令はコンピュータシステムによって実行されたときに上記コンピュータシステムに以下のステップを実行させる。これらのステップは、複数のバケットを分散データグリッド内に与えるステップを含み、各バケットは、分散データキューの多数のエレメントを格納するように構成されており、上記ステップはさらに、分散キューの1つ以上のエレメントを複数のバケットに格納するステップと、名前付きキューを用いて分散キューに関する状態情報のローカルバージョンを保持するステップとを含み、上記状態情報のローカルバージョンは、分散データグリッドにおけるバケットのキューに対する先頭ポインタと末尾ポインタとを含む。
分散データグリッドにおける分散データ構造をサポートするための装置は、複数のバケットを分散データグリッド内に与えるための手段を含み、各上記バケットは、分散データ構造の多数のエレメントを収容するための容量を有するように構成されており、さらに、状態所有者プロセスを通して、分散データ構造に関する状態情報を保持するための手段と、状態所有者プロセスを通して、分散データ構造に関する状態情報をクライアントプロセスに与えるための手段とを含む。
上記装置はさらに、上記複数のバケットを分散データグリッドにおける複数のプロセスに均等に分散させるための手段を含む。
上記装置はさらに、分散データ構造に対応付けられた異なるバケットに対して複数のオペレーションを同時に実行するための手段を含む。
上記装置はさらに、上記状態所有者プロセスによって、分散データ構造が変化したときに上記分散データ構造に関する状態情報を更新するための手段を含む。
上記装置はさらに、オペレーションが実行されている間バケットをロックするための手段を含み、上記バケットに対するその他のオペレーションは、上記実行されているオペレーションが完了するまで待機するように構成されている。
上記装置はさらに、分散データ構造を、分散キュー、分散セット、分散リスト、または分散スタックとするための手段を含む。
上記装置はさらに、各バケットにバケット状態を維持させるための手段を含み、上記バケット状態は、上記バケットにおける1つ以上のエレメントにアクセスするために使用される。
上記装置はさらに、少なくとも1つのバケットをバックアップバケットに対応付けるための手段を含み、上記バックアップバケットは、上記少なくとも1つのバケットに含まれる1つ以上のエレメントを含む。
上記装置はさらに、上記クライアントプロセスに、分散データ構造に関する状態情報のローカルバージョンを格納させ、上記状態情報のローカルバージョンが無効になったときに限り、上記状態所有者プロセスが保持する状態情報に基づいて上記クライアントプロセスに格納されている上記状態情報のローカルバージョンをリフレッシュさせ、上記分散データ構造におけるバケット内の1つ以上のエレメントに対してオペレーションを実行させるための手段を含む。
本発明は、本開示の教示に従いプログラムされた、1つ以上のプロセッサ、メモリ、および/またはコンピュータ読取可能な記憶媒体を含む、従来の汎用もしくは専用デジタルコンピュータ、コンピューティングデバイス、マシン、またはマイクロプロセッサを1つ以上用いて、適宜実装し得る。適切なソフトウェアコーディングは、熟練したプログラマが本開示の教示に基づいて容易に準備できるものである。これはソフトウェア技術における当業者には明らかであろう。
実施形態によっては、本発明は、本発明のプロセスのうちいずれかを実行するためにコンピュータをプログラムするのに使用できる命令が格納された記憶媒体または(1つまたは複数の)コンピュータ読取可能な媒体であるコンピュータプログラムプロダクトを含む。この記憶媒体の例は、フロッピー(登録商標)ディスク、光ディスク、DVD、CD−ROM、マイクロドライブ、および光磁気ディスクを含む、任意の種類のディスク、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、フラッシュメモリデバイス、磁気もしくは光カード、ナノシステム(分子メモリICを含む)、または、命令および/またはデータを格納するのに適した任意の種類の媒体もしくはデバイスを含み得るものの、これらに限定されない。記憶媒体または(1つまたは複数の)コンピュータ読取可能な媒体は非一時的なものであってもよい。
本発明に関するこれまでの記載は例示および説明を目的として提供されている。すべてを網羅するまたは本発明を開示された形態そのものに限定することは意図されていない。当業者には数多くの変更および変形が明らかであろう。上記変更および変形は、記載されている特徴の関連する任意の組合わせを含む。実施形態は、本発明の原理およびその実際の応用を最もうまく説明することによって意図している特定の用途に適した本発明のさまざまな実施形態およびさまざまな変形を他の当業者が理解できるようにするために、選択され説明されている。本発明の範囲は以下の請求項およびその均等物によって定義されることが意図されている。

Claims (23)

  1. 分散データグリッドにおける分散データ構造をサポートするためのシステムであって、
    1つ以上のマイクロプロセッサと、
    前記分散データグリッドにおける複数のバケットとを含み、各前記バケットは、分散データ構造の多数のエレメントを収容するための容量を有するように構成されており、
    前記1つ以上のマイクロプロセッサ上で実行される状態所有者プロセスを含み、前記状態所有者プロセスは、
    前記分散データ構造に関する状態情報を保持するように構成され、かつ、
    前記分散データ構造に関する状態情報をクライアントプロセスに与えるように構成されている、システム。
  2. 前記複数のバケットは、前記分散データグリッドにおける複数のプロセスに均等に分散されている、請求項1に記載のシステム。
  3. 複数のオペレーションは、前記分散データ構造に対応付けられた異なるバケットに対して同時に実行される、請求項1または2に記載のシステム。
  4. 前記状態所有者プロセスは、前記分散データ構造が変化したときに前記分散データ構造に関する状態情報を更新するように構成されている、請求項1〜3のいずれかに記載のシステム。
  5. オペレーションが実行されている間バケットはロックされ、前記バケットに対するその他のオペレーションは、前記実行されているオペレーションが完了するまで待機するように構成されている、請求項1〜4のいずれかに記載のシステム。
  6. 前記分散データ構造は、分散キュー、分散セット、分散リスト、または分散スタックである、請求項1〜5のいずれかに記載のシステム。
  7. 各バケットはバケット状態を維持しており、前記バケット状態は、前記バケットにおける1つ以上のエレメントにアクセスするために使用される、請求項1〜6のいずれかに記載のシステム。
  8. 少なくとも1つのバケットは、前記少なくとも1つのバケットに含まれる1つ以上のエレメントを含むバックアップバケットに対応付けられている、請求項1〜7のいずれかに記載のシステム。
  9. 前記クライアントプロセスは、
    前記分散データ構造に関する状態情報のローカルバージョンを格納するように構成され、かつ、
    前記分散データ構造におけるバケット内の1つ以上のエレメントに対してオペレーションを実行するように構成されている、請求項1〜8のいずれかに記載のシステム。
  10. 前記クライアントプロセスは、前記状態情報のローカルバージョンが無効になったときに限り、前記状態所有者プロセスが保持する前記状態情報に基づいて前記クライアントプロセスに格納されている前記状態情報のローカルバージョンをリフレッシュするように構成されている、請求項9に記載のシステム。
  11. 分散データグリッドにおける分散データ構造をサポートするための方法であって、
    複数のバケットを前記分散データグリッド内に与えるステップを含み、各前記バケット
    は、分散データ構造の多数のエレメントを収容するための容量を有するように構成されており、
    状態所有者プロセスを通して、前記分散データ構造に関する状態情報を保持するステップと、
    前記状態所有者プロセスを通して、前記分散データ構造に関する状態情報をクライアントプロセスに与えるステップとを含む、方法。
  12. 前記複数のバケットを前記分散データグリッドにおける複数のプロセスに均等に分散させるステップをさらに含む、請求項11に記載の方法。
  13. 前記分散データ構造に対応付けられた異なるバケットに対して複数のオペレーションを同時に実行するステップをさらに含む、請求項11または12に記載の方法。
  14. 前記状態所有者プロセスによって、前記分散データ構造が変化したときに前記分散データ構造に関する状態情報を更新するステップをさらに含む、請求項11〜13のいずれかに記載の方法。
  15. オペレーションが実行されている間バケットをロックするステップをさらに含み、前記バケットに対するその他のオペレーションは、前記実行されているオペレーションが完了するまで待機するように構成されている、請求項11〜14のいずれかに記載の方法。
  16. 前記分散データ構造は、分散キュー、分散セット、分散リスト、または分散スタックである、請求項11〜15のいずれかに記載の方法。
  17. 各バケットがバケット状態を維持するステップをさらに含み、前記バケット状態は、前記バケットにおける1つ以上のエレメントにアクセスするために使用される、請求項11〜16のいずれかに記載の方法。
  18. 少なくとも1つのバケットを、前記少なくとも1つのバケットに含まれる1つ以上のエレメントを含むバックアップバケットに対応付けるステップをさらに含む、請求項11〜17のいずれかに記載の方法。
  19. 前記クライアントプロセスは、
    前記分散データ構造に関する状態情報のローカルバージョンを格納するステップと、
    前記状態情報のローカルバージョンが無効になったときに限り、前記状態所有者プロセスが保持する前記状態情報に基づいて前記クライアントプロセスに格納されている前記状態情報のローカルバージョンをリフレッシュするステップと、
    前記分散データ構造におけるバケット内の1つ以上のエレメントに対してオペレーションを実行するステップとをさらに含む、請求項11〜18のいずれかに記載の方法。
  20. 前記分散データ構造は分散キューであり、キューにおいて維持されている前記複数のバケットは、前記分散キューの1つ以上のエレメントを格納するように構成されており、前記状態所有者プロセスは、前記分散キューに関する状態情報のローカルバージョンを保持する名前付きキューであり、前記状態情報のローカルバージョンは、前記分散データグリッドにおけるバケットのキューに対する先頭ポインタと末尾ポインタとを含む、請求項11〜19のいずれかに記載の方法。
  21. コンピュータシステムによって実行されたときに請求項11〜20のいずれかに記載の方法を前記コンピュータシステムに実行させるマシン読取可能なフォーマットのプログラム命令を含むコンピュータプログラム。
  22. 非一時的なマシン読取可能なデータ記憶媒体に格納されている請求項21に記載のコンピュータプログラムを含むコンピュータプログラムプロダクト。
  23. 分散データグリッドにおける分散データ構造をサポートするための命令が格納された非一時的なマシン読取可能な記憶媒体であって、前記命令はコンピュータシステムによって実行されたときに前記コンピュータシステムに以下のステップを実行させ、前記ステップは、
    複数のバケットを分散データグリッド内に与えるステップを含み、各前記バケットは、分散データ構造の多数のエレメントを収容するための容量を有するように構成されており、
    状態所有者プロセスを通して、前記分散データ構造に関する状態情報を保持するステップと、
    前記分散データ構造に関する状態情報をクライアントプロセスに与えるステップとを含む、非一時的なマシン読取可能な記憶媒体。
JP2020090417A 2014-05-21 2020-05-25 分散データグリッドにおける分散データ構造をサポートするためのシステムおよび方法 Active JP6920513B2 (ja)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201462001470P 2014-05-21 2014-05-21
US62/001,470 2014-05-21
US14/676,030 2015-04-01
US14/676,013 US10250519B2 (en) 2014-05-21 2015-04-01 System and method for supporting a distributed data structure in a distributed data grid
US14/676,030 US10243869B2 (en) 2014-05-21 2015-04-01 System and method for providing a distributed queue in a distributed data grid
US14/676,013 2015-04-01
JP2016568587A JP6833516B2 (ja) 2014-05-21 2015-04-29 分散データグリッドにおける分散データ構造をサポートするためのシステムおよび方法

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2016568587A Division JP6833516B2 (ja) 2014-05-21 2015-04-29 分散データグリッドにおける分散データ構造をサポートするためのシステムおよび方法

Publications (2)

Publication Number Publication Date
JP2020161152A true JP2020161152A (ja) 2020-10-01
JP6920513B2 JP6920513B2 (ja) 2021-08-18

Family

ID=54556212

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2016568587A Active JP6833516B2 (ja) 2014-05-21 2015-04-29 分散データグリッドにおける分散データ構造をサポートするためのシステムおよび方法
JP2020090417A Active JP6920513B2 (ja) 2014-05-21 2020-05-25 分散データグリッドにおける分散データ構造をサポートするためのシステムおよび方法

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2016568587A Active JP6833516B2 (ja) 2014-05-21 2015-04-29 分散データグリッドにおける分散データ構造をサポートするためのシステムおよび方法

Country Status (4)

Country Link
US (2) US10243869B2 (ja)
EP (1) EP3146430B1 (ja)
JP (2) JP6833516B2 (ja)
CN (1) CN106462475B (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106598729A (zh) * 2016-11-18 2017-04-26 深圳市证通电子股份有限公司 分布式并行计算系统的数据分配方法及系统
CN107342954B (zh) * 2017-06-29 2019-11-22 北京东土军悦科技有限公司 一种报文的调度方法及装置
CN109299116B (zh) * 2018-12-05 2022-03-22 浪潮电子信息产业股份有限公司 一种数据同步方法、装置、设备及可读存储介质
CN110427525B (zh) * 2019-08-08 2022-02-25 北京字节跳动网络技术有限公司 数据存取方法及装置
US11366783B1 (en) * 2021-03-29 2022-06-21 SambaNova Systems, Inc. Multi-headed multi-buffer for buffering data for processing

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006252537A (ja) * 2005-03-08 2006-09-21 Microsoft Corp ダイナミック・サービス・サロゲート
WO2008069811A1 (en) * 2005-12-29 2008-06-12 Amazon Technologies, Inc. Distributed replica storage system with web services interface
JP2008234490A (ja) * 2007-03-22 2008-10-02 Sony Computer Entertainment Inc 情報処理装置および情報処理方法
US20130074083A1 (en) * 2011-09-15 2013-03-21 Oracle International Corporation System and method for handling storage events in a distributed data grid
WO2013049399A1 (en) * 2011-09-30 2013-04-04 Oracle International Corporation System and method for providing and managing message queues for multinode applications in a middleware machine environment

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6259988B1 (en) 1998-07-20 2001-07-10 Lockheed Martin Corporation Real-time mission adaptable route planner
US7177917B2 (en) * 2000-12-27 2007-02-13 Softwired Ag Scaleable message system
US7895431B2 (en) 2004-09-10 2011-02-22 Cavium Networks, Inc. Packet queuing, scheduling and ordering
US8370395B1 (en) 2004-10-15 2013-02-05 Amazon Technologies, Inc. Providing a reliable distributed queuing service
US7546427B2 (en) * 2005-09-30 2009-06-09 Cleversafe, Inc. System for rebuilding dispersed data
US20070113031A1 (en) * 2005-11-16 2007-05-17 International Business Machines Corporation Memory management system and method for storing and retrieving messages
US8943181B2 (en) 2005-11-29 2015-01-27 Ebay Inc. Method and system for reducing connections to a database
WO2008005102A2 (en) 2006-05-13 2008-01-10 Sap Ag Consistent set of interfaces derived from a business object model
FR2907993B1 (fr) * 2006-10-26 2008-12-26 Seanodes Sa Systeme informatique comprenant plusieurs noeuds en reseau.
US8417708B2 (en) 2009-02-09 2013-04-09 Xerox Corporation Average case analysis for efficient spatial data structures
WO2010117294A1 (en) 2009-04-08 2010-10-14 Intel Corporation Performing concurrent rehashing of a hash table for multithreaded applications
JP2010271797A (ja) * 2009-05-19 2010-12-02 Nippon Telegr & Teleph Corp <Ntt> 分散ストレージにおけるデータ位置管理方法及び装置及びプログラム
US7984094B2 (en) * 2009-06-23 2011-07-19 Microsoft Corporation Using distributed queues in an overlay network
US9703610B2 (en) * 2011-05-16 2017-07-11 Oracle International Corporation Extensible centralized dynamic resource distribution in a clustered data grid
US9921873B2 (en) 2012-01-31 2018-03-20 Nvidia Corporation Controlling work distribution for processing tasks
US9158637B2 (en) * 2012-07-31 2015-10-13 Infinidat Ltd. Storage control grid and method of operating thereof
US9838467B2 (en) * 2014-03-17 2017-12-05 Splunk Inc. Dynamically instantiating dual-queue systems

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006252537A (ja) * 2005-03-08 2006-09-21 Microsoft Corp ダイナミック・サービス・サロゲート
WO2008069811A1 (en) * 2005-12-29 2008-06-12 Amazon Technologies, Inc. Distributed replica storage system with web services interface
JP2009522659A (ja) * 2005-12-29 2009-06-11 アマゾン・テクノロジーズ・インコーポレーテッド ウェブサービスクライアントインターフェースを有する分散型ストレージシステム
JP2008234490A (ja) * 2007-03-22 2008-10-02 Sony Computer Entertainment Inc 情報処理装置および情報処理方法
US20130074083A1 (en) * 2011-09-15 2013-03-21 Oracle International Corporation System and method for handling storage events in a distributed data grid
WO2013049399A1 (en) * 2011-09-30 2013-04-04 Oracle International Corporation System and method for providing and managing message queues for multinode applications in a middleware machine environment
JP2014531687A (ja) * 2011-09-30 2014-11-27 オラクル・インターナショナル・コーポレイション ミドルウェアマシン環境においてマルチノードアプリケーションのためのメッセージキューを提供および管理するためのシステムおよび方法

Also Published As

Publication number Publication date
US10243869B2 (en) 2019-03-26
JP6833516B2 (ja) 2021-02-24
CN106462475B (zh) 2019-11-22
JP2017516237A (ja) 2017-06-15
EP3146430B1 (en) 2023-01-04
US10250519B2 (en) 2019-04-02
US20150339331A1 (en) 2015-11-26
JP6920513B2 (ja) 2021-08-18
EP3146430A1 (en) 2017-03-29
US20150341283A1 (en) 2015-11-26
CN106462475A (zh) 2017-02-22

Similar Documents

Publication Publication Date Title
JP6920513B2 (ja) 分散データグリッドにおける分散データ構造をサポートするためのシステムおよび方法
US8930316B2 (en) System and method for providing partition persistent state consistency in a distributed data grid
US9164806B2 (en) Processing pattern framework for dispatching and executing tasks in a distributed computing grid
US10318475B2 (en) System and method for persistence of application data using replication over remote direct memory access
US10423643B2 (en) System and method for supporting resettable acknowledgements for synchronizing data in a distributed data grid
US20120278422A1 (en) Live object pattern for use with a distributed cache
US10860378B2 (en) System and method for association aware executor service in a distributed computing environment
US10133489B2 (en) System and method for supporting a low contention queue in a distributed data grid
US20160277152A1 (en) Method and system for robust message retransmission
US9672038B2 (en) System and method for supporting a scalable concurrent queue in a distributed data grid
JP6556726B2 (ja) コンピューティング環境においてアダプティブビジーウェイトをサポートするためのシステムおよび方法
US20160077889A1 (en) System and method for supporting waiting thread notification offloading in a distributed data grid
US11522966B2 (en) Methods, devices and systems for non-disruptive upgrades to a replicated state machine in a distributed computing environment
WO2015179092A1 (en) System and method for supporting a distributed data structure in a distributed data grid

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200609

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200609

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210526

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210629

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210726

R150 Certificate of patent or registration of utility model

Ref document number: 6920513

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150