JP6621470B2 - 分散コンピューティング環境において実行可能コードの動的配置をサポートするシステムおよび方法 - Google Patents

分散コンピューティング環境において実行可能コードの動的配置をサポートするシステムおよび方法 Download PDF

Info

Publication number
JP6621470B2
JP6621470B2 JP2017516347A JP2017516347A JP6621470B2 JP 6621470 B2 JP6621470 B2 JP 6621470B2 JP 2017516347 A JP2017516347 A JP 2017516347A JP 2017516347 A JP2017516347 A JP 2017516347A JP 6621470 B2 JP6621470 B2 JP 6621470B2
Authority
JP
Japan
Prior art keywords
class
agent
node
client
definition
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.)
Active
Application number
JP2017516347A
Other languages
English (en)
Other versions
JP2017528847A5 (ja
JP2017528847A (ja
Inventor
セオビク,アレクサンダー
ラジャ,ハーベイ
Original Assignee
オラクル・インターナショナル・コーポレイション
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 オラクル・インターナショナル・コーポレイション filed Critical オラクル・インターナショナル・コーポレイション
Publication of JP2017528847A publication Critical patent/JP2017528847A/ja
Publication of JP2017528847A5 publication Critical patent/JP2017528847A5/ja
Application granted granted Critical
Publication of JP6621470B2 publication Critical patent/JP6621470B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • 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/5072Grid computing
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Description

著作権の表示
この特許文書の開示の一部には、著作権保護の対象となるものが含まれている。著作権者は、特許商標庁の特許ファイルまたは記録に掲載された特許文書または特許開示の複製に対しては異議を唱えないが、その他の場合、すべての著作権を留保する。
発明の分野
本発明は、一般にコンピュータシステムに関し、特に分散コンピューティング環境に関する。
概要
本開示は、分散コンピューティング環境において実行可能コードの動的配置をサポートすることができるシステムおよび方法を記載する。クライアントは、1つ以上のクラスまたは更新クラスのクラス定義を生成する。クラス定義は、シリアル化され、分散コンピューティング環境内のサーバに送信される。分散コンピューティング環境内のサーバは、シリアル化されたクラス定義を受信し、シリアル化されたクラス定義をデシリアル化し、サーバ上で処理されるための1つ以上のクラスまたは更新クラスを生成する。1つ以上のクラスまたは更新クラスは、ラムダ式を表すことができる。さらに、1つ以上のクラスまたは更新クラスは、正しいクラスまたは正しいクラスバージョンが実行され、サーバ上で存在しないクラス定義がシリアル化され、配布されることを保証する一意のID(識別子)を備える。実行可能コードの動的配置は、サーバノード上でエージェントの実行を可能にする。この場合、エージェントは、そうでなければサーバノードに利用できない新規クラスの定義に依存する。
一実施形態において、本開示は、分散コンピューティング環境においてラムダ式をサポートする方法を説明する。この方法は、サーバを介して、ラムダ式を実装するクラス定義を受信するステップを含む。クライアントは、ラムダ式を実装するクラス定義を生成し、生成したクラス定義をシリアル化してサーバに送信する。サーバは、受信したクラス定義に基づいて、ラムダクラスを定義する。ラムダ式がクライアント側で更新された場合、更新されたラムダ式を表す新規クラス定義がサーバに送信される。
本発明のこれらのおよび他の目的および利点は、当業者なら、添付図面を参照して、さまざまな実施形態の以下の説明から分かるであろう。
本発明の一実施形態に従った分散データグリッドを示す図である。 本発明の一実施形態に従って、実行可能コードの動的配置をサポートする分散コンピューティング環境を示す図である。 本発明の一実施形態に従って、実行可能コードの動的配置をサポートする方法を示す図である。 本発明の一実施形態に従って、ラムダ式を実装する実行可能コードの動的配置をサポートする分散コンピューティング環境を示す図である。 本発明の一実施形態に従って、ラムダ式を実装する実行可能コードの動的配置をサポートする方法を示す図である。
詳細な説明
本開示は、分散コンピューティング環境において実行可能コードの動的配置をサポートするシステムおよび方法を記載する。分散コンピューティング環境内のサーバノードは、サーバノードを再起動または再配置することなく、クライアントから実行するクラス定義を受信し、受信したクラス定義を用いて、クラスのインスタンスを生成し、メモリにロードすることができる。クラス定義は、そうでなければサーバノードに利用できない新規または更新クラス定義を実装することができる。クラスは、一意のクラスIDを用いて特定される。クラスIDを用いて、クラスが新規または更新クラスであるか否かを判断することができる。クラスIDを用いて、クラス定義をサーバノードに送信する必要性を判断することができ、正しいバージョンのクラスが実装されたことを保証することができる。実行可能コードの動的配置は、サーバノード上でエージェントの実行を可能にする。この場合、エージェントは、そうでなければサーバノードに利用できない新規クラスの定義に依存する。
特定の実施形態において、本開示は、分散コンピューティング環境においてラムダ式を実装するクラス定義の動的配置をサポートすることができるシステムおよび方法を記載する。分散コンピューティング環境内のサーバは、クライアントから1つ以上のクラス定義を受信することができ、クライアントは、ラムダ式を実装する1つ以上のクラス定義を生成する。サーバは、受信したクラス定義に基づいて、サーバ側でラムダクラスを定義することができる。さらに、ラムダ式がクライアント側で更新された場合、更新されたラムダクラスの新規クラス定義が生成され、クライアントからサーバに送信される。
本開示に記載され、図2A、2B、3Aおよび3Bに示されるように、ラムダ式を実装するクラス定義の動的配置を含む実行可能コードの動的配置をサポートするシステムおよび方法は、図1を参照して以下に説明する分散データグリッドに特に有用である。ラムダ式を実装するクラス定義の動的配置を含む実行可能コードの動的配置をサポートするシステムおよび方法は、さまざまな代替的分散コンピューティング環境に適用することもできる。
以下の説明において、本発明は、限定ではなく例示として、添付の図面に示される。本開示において、さまざまな実施形態の言及は、必ずしも同一の実施形態に限定されず、少なくとも1つの実施形態を意味する。特定の実装形態を説明する場合、これらの特定の実装形態は、例示のみの目的で提供されていることを理解すべきである。当業者なら、本発明の範囲および精神から逸脱することなく、他の要素および構成を使用できることを理解するであろう。
場合によって、本発明の完全な説明を提供するように、多数の具体的な詳細を記載する。しかしながら、これらの具体的な詳細がなくても、本発明を実施できることは、当業者にとって明らかであろう。また、場合によって、本発明を不明瞭にしないように、周知の特徴は、詳細に記載されない。
本発明は、特定の機能の実行およびそれらの関係を示す機能性構成ブロックを用いて説明される。これらの機能性構成ブロックの境界は、通常、説明の便宜上、本開示に任意に定義される。したがって、同様の要素によって実行されるように示された機能は、代替的な実施形態において、異なる要素によって実行されてもよい。代替的には、別々の要素によって実行されるように示された機能は、1つの要素によって実行されてもよい。特定の機能およびそれらの関係が適切に実行される限り、代替的な境界を定義してもよい。したがって、これらの代替的な境界のいずれも、本発明の範囲および精神内に含まれる。
共通の参照番号を使用して、図面および詳細な説明における同様の要素を示す。したがって、他の箇所で図示された要素を説明する場合、図面に使用されている参照番号は、必ずしもこの図面に対応する詳細な説明に記載する必要がない。3桁の参照番号のうち、最初の数字は、要素が最初に現れる図面の順番を示す。
分散データグリッド
分散データグリッドとは、分散型環境またはクラスタ化環境において情報および関連作業、例えば演算を管理するために、複数のコンピュータサーバが1つ以上のクラスタに協働して動作するシステムを指す。分散データグリッドを使用して、サーバ間に共有されているアプリケーションオブジェクトおよびデータを管理することができる。分散データグリッドは、短い応答時間、高い処理量、予測可能な拡張性、継続的な可用性、情報の信頼性を提供する。その結果、分散データグリッドは、計算集約型ステートフル中間層アプリケーションの使用に適している。特定の例において、分散データグリッド、例えばOracle(登録商標)Coherenceデータグリッドは、高性能を達成するように情報をインメモリに格納し、その情報のコピーを複数のサーバ間に同期するように冗長性を採用しているため、サーバの故障時に、システムの復元性およびデータの継続的な可用性を確保する。
以下の記載において、分割キャッシュを有するOracle(登録商標)Coherenceデータグリッドを説明する。しかしながら、当業者であれば、本発明の範囲から逸脱することなく、例えば上記の概要に記載された発明を当該技術分野に知られている任意の分散データグリッドに適用することができることを理解するであろう。さらに、本発明の完全な説明を提供するために、Oracle(登録商標)Coherence分散データグリッドの多くの具体的な詳細を記載するが、本発明は、これらの特定の詳細がなくても、分散データグリッドに実施することができる。したがって、いくつかの実施形態において、本発明を具体化する分散データグリッドの特定の実装は、本発明の範囲から逸脱することなく、以下に説明する分散データグリッドの特定の特徴を含まなくてもよく、および/または以下に説明する分散データグリッドの特定の特徴と異なる特徴またはその変更特徴を含んでもよい。
図1は、データを格納し、クライアント150にデータの利用を提供する分散データグリッド100の例を示している。「データグリッドクラスタ」または「分散データグリッド」は、分散型環境またはクラスタ化環境において情報および関連作業、例えば計算を格納および管理するために、1つ以上のクラスタ(例えば、100a、100b、100c)に協働して動作する複数のコンピュータサーバ(例えば、120a、120b、120cおよび120d)を含むシステムを指す。分散データグリッド100は、例として、クラスタ100a内に5つのデータノード130a、130b、130c、130dおよび130eを有する4つのサーバ120a、120b、120cおよび120dを含むものとして図示されているが、任意数のクラスタを含むことができ、各クラスタ内に任意数のサーバおよび/または任意数のノードを含むことができる。分散データグリッドは、高性能を達成するように情報をインメモリに格納し、その情報のコピーを複数のサーバ間に同期するように冗長性を採用しているため、サーバの故障時に、システムの復元性およびデータの継続的な可用性を確保することができる。一実施形態において、分散データグリッド100は、例えば、上記の概要および以下の詳細な説明に記載される本発明を実現する。
図1に示すように、分散データグリッドは、協働して動作する多数のサーバ(例えば、120a、120b、120cおよび120d)の間にデータを分散することによって、データの記憶および管理機能を提供する。データグリッドクラスタの各サーバは、例えば、1〜2個のプロセッサソケットを備え、各プロセッサソケットに2〜4個のCPUコアを配置した「汎用x86」サーバハードウェアプラットフォームなどの従来のコンピュータシステムであってもよい。各サーバ(例えば、120a、120b、120cおよび120d)は、例えば、1つ以上のCPU、ネットワークインターフェイスカード(NIC)、および最低4GB最大64GBまたはそれ以上のRAMを含むメモリを備えるように構成される。図示されたサーバ120aは、CPU122a、メモリ124aおよびNIC126a(これらの要素は、他のサーバ120b、120c、120dにも存在するが、図示されていない)を備える。必要に応じて、各サーバは、データあふれ用の記憶容量を提供するために、フラッシュメモリ(例えば、SSD128a)を備えてもよい。SSDを備える場合、その容量は、好ましくはRAMの容量の10倍である。データグリッドクラスタ100a内のサーバ(例えば、120a、120b、120cおよび120d)は、高帯域幅のNIC(例えば、PCI−XまたはPCIe)を介して、高性能(例えば、ギガビットイーサネット(登録商標)またはそれ以上)ネットワークスイッチ120に接続される。
故障時にデータを損失する可能性を回避するために、クラスタ100aは、好ましくは最低4つの物理サーバを含むが、典型的な実装として、より多くのサーバを含んでもよい。各クラスタに存在するサーバが多くなればなるほど、フェイルオーバ(failover)およびフェイルバック(failback)がより効率的になり、サーバの故障によってクラスタに与える影響が軽減される。サーバ間の通信時間を最短にするために、各データグリッドクラスタは、理想的には、サーバ間にシングルホップ通信を提供する単一のスイッチ102に接続される。したがって、クラスタは、スイッチ102上のポート数によって制限される。よって、典型的なクラスタは、4〜96個の物理サーバを含む。
分散データグリッド100の殆どの広域ネットワーク(WAN)構成において、WAN内の各データセンタは、相互独立しているが、相互接続されたデータグリッドクラスタ(例えば、100a、100bおよび100c)を備える。WANは、例えば図1に示されたクラスタよりも多くのクラスタを含んでもよい。さらに、相互接続されているが相互独立しているクラスタ(例えば、100a、100b、100c)を使用することによって、および/または相互接続されているが相互独立しているクラスタを相互遠隔であるデータセンタに配置することによって、分配型データグリッドは、自然災害、火災、洪水、長期間の電力損失などによって、1つのクラスタ内のすべてのサーバが同時に喪失しないように、安全性のあるデータおよびサービスをクライアント150に提供することができる。企業および地区の全体に亘って維持されているクラスタは、企業データの自動バックアップ記憶および高可用性サービスを構成する。
1つ以上のノード(例えば、130a、130b、130c、130dおよび130e)は、クラスタ100aの各サーバ(例えば、120a、120b、120cおよび120d)上で動作する。分散データグリッドにおいて、ノードは、例えばソフトウェアアプリケーション、仮想マシンなどであってもよく、サーバは、ノードが動作するオペレーティングシステム、ハイパーバイザ(図示せず)などを含んでもよい。Oracle(登録商標)Coherenceデータグリッドにおいて、各ノードは、Java(登録商標)仮想マシン(JVM)である。サーバのCPU処理能力および利用可能なメモリに応じて、各サーバは、複数のJVM/ノードを備えてもよい。分散データグリッドの需要に応じて、JVM/ノードを起動、停止、追加および削除することができる。Oracle(登録商標)Coherenceを実行するJVMは、起動時に自動的に結合し、クラスタ化する。クラスタに加入したJVM/ノードは、クラスタメンバまたはクラスタノードと呼ばれる。
Oracle(登録商標)Coherenceデータグリッドにおいて、クラスタメンバは、TCMP(Tangosol Cluster Management Protocol)を使用して通信する。TCMPは、クラスタメンバの検出、クラスタの管理、サービスの提供、およびクラスタメンバ間でデータの送信に使用されているIPベースプロトコルである。TCMPプロトコルは、完全な信頼性で順序通りに、すべてのメッセージを配信する。基礎のUDP/IPプロトコルが信頼性のある配信または順序通りの配信を提供しないため、TCMPは、行列化された完全非同期ACKおよびNACKに基づくメカニズムを使用することによって、信頼性のあるメッセージ配信を行うと共に、一体化された特定のIDを使用することによって、サーバ上で動作するJVMに関連して行列化されたメッセージの順序を保証する。TCMPプロトコルは、クラスタサイズに関係なく、JVM/ノード毎に3つのUDP/IPソケット(1つのマルチキャスト、2つのユニキャスト)および6つのスレッドしか必要としない。
データグリッドクラスタの機能は、クラスタノードによって提供されたサービスに依存する。クラスタノードによって提供された各サービスは、特定の機能を有する。各クラスタノードは、クラスタサービスの提供およびクラスタサービスの使用の両方の観点から、多くのクラスタサービスに加入することができる(メンバになることができる)。一部のクラスタサービスは、クラスタ内のすべてのノードによって提供されるが、他のサービスは、クラスタ内の1つのノードのみまたは一部のノードのみによって提供される。各サービスは、データグリッドクラスタ内のサービスを一意に識別するサービス名と、行えるサービスを規定するサービス種類とを有する。(ルートクラスタサービスを除き)データグリッドクラスタのノードによって提供された各サービス種類には、複数の名前付きインスタンスが存在することがある。すべてのサービスは、好ましくは、データ損失なしに、フェイルオーバーおよびフェイルバックを提供する。
クラスタノードによって提供された各サービスインスタンスは、通常、1つのサービススレッドを使用して、サービスの特定の機能を提供する。例えば、あるノードによって提供された分散キャッシュサービスは、そのノードの単一サービススレッドによって提供される。JVM/ノードで分散キャッシュのスキーマ定義を解析する場合、サービススレッドは、スキーマに指定された名前でインスタンス化される。このサービススレッドは、スキーマ定義を使用して作成されたキャッシュ内にデータを管理する。一部のサービスは、必要に応じて、サービススレッドに追加の処理リソースを提供するように構成することができる作業スレッドのスレッドプールをサポートする。このサービススレッドは、スレッドプール内の作業スレッドと連携して、特定のサービス機能を提供する。
Oracle(登録商標)Coherenceデータグリッドにおいて、クラスタサービス(例えば、136a、136b、136c、136d、136e)は、クラスタ内のメンバシップおよびサービスを追跡する。各クラスタノードは、常に1つのみのこの種のサービスを実行している。クラスタサービスは、自動的に起動して、クラスタノードをクラスタに加入することができる。クラスタサービスは、他のクラスタノードの検出、クラスタノードの故障(停止)の検出、およびクラスタに利用可能な他のサービスの登録を行う。プロキシサービス(例えば、138c)によって、クラスタ外部のクライアントは、(例えば、TCPを使用して)クラスタに接続することができる。呼び出しサービス(例えば、134d)によって、アプリケーションコードは、エージェントを呼び出して、クラスタ内の任意のノードまたは任意のノードグループまたはクラスタ全体に亘って、作業を実行することができる。呼び出しサービスおよびプロキシサービスは、図示では各々が1つのみのノードに設けられていると示されているが、分散データグリッド内の任意数のノード上に、最大すべてのノード上に設けられることができる。
Oracle(登録商標)Coherenceデータグリッドにおいて、分散キャッシュサービス(例えば、132a、132b、132c、132d、132e)は、分散データグリッドにデータ記憶を提供し、クラスタ内のノードが記憶不能に設定されても、クラスタ内のすべてのノード上でキャッシュデータの読み取り/書き込み/記憶を行うことができる。分散キャッシュサービスによって、クラスタノードは、クラスタ100aの全体にデータを分散(分配)することができる。これによって、キャッシュ内の各データは、主に1つのみのクラスタノードによって管理(保持)される。分散キャッシュサービスは、putおよびgetなどの記憶操作要求を処理する。分散キャッシュサービスは、分散スキーマ定義に定義され、クラスタのノード間に分配された分散キャッシュ(例えば、140a、140b、140c、140d、140e)を管理する。
パーティションは、分散データグリッドに管理されたデータの基本単位であり、分散キャッシュ(例えば、140a、140b、140c、140dおよび140e)に格納される。論理的に、データは、基本パーティション(例えば、142a、142b、142c、142dおよび142e)に分配される。これらの基本パーティションは、複数のクラスタノードに分散され、クラスタ内の1つのみのノードがキャッシュ内の各データを格納する。各キャッシュ(例えば、140a、140b、140c、140dおよび140e)は、複数のパーティションを保持することができる。各パーティション(例えば、142a、142b、142c、142d、142e)は、1つのデータム(datum)を保持することができ、多くのデータムを保持することもできる。パーティションは、必要または要望に応じて、1つのノードのキャッシュから、別のノードのキャッシュに移行することができる。例えば、クラスタにノードを追加する場合、新しく追加されたノードを含む使用可能なノード間にパーティションを分散するように、これらのパーティションを移行する。非複製型の分散データグリッドには、各パーティション(基本パーティション)は、1つのアクティブコピーしか有しない。しかしながら、通常、各パーティションは、1つ以上のレプリカ/バックアップコピーを有する。これらのレプリカ/バックアップコピーは、別のサーバに格納され、フェイルオーバーに使用される。クラスタのサーバ間に分散されたパーティションにデータを分配するため、データを管理する負荷およびデータを利用する負荷は、クラスタの全体に自動的に分散される。
分散キャッシュサービスは、各データが1つ以上の他のクラスタノードによってバックアップされ、データ損失なしにフェイルオーバーをサポートするように構成することができる。例えば、図1に示すように、各データは、基本パーティション(例えば、濃い色の四角形142a、142b、142c、142dおよび142e)および同期されたパーティションの1つ以上のバックアップコピー(例えば、薄い色の四角形144a、144b、144c、144dおよび144e)に格納される。各パーティションのバックアップコピーは、同期の元である基本パーティションと異なるサーバ/ノードに格納される。ノード上の分散キャッシュサービスのフェイルオーバーは、パーティションのバックアップコピーを基本パーティションに昇格する必要がある。特定のサーバ/ノードが故障した場合、残りのすべてのクラスタノードは、故障したノードの基本パーティションに対応して保持されたバックアップパーティションを決定する。次に、クラスタノードは、任意のクラスタノード上に保持されているバックアップパーティションを基本パーティションに昇格する(その後、新規バックアップパーティションを作成する)。
分散キャッシュは、データオブジェクトの集合である。各データオブジェクト/データムは、例えば、データベーステーブルの一行に等価することができる。各データムは、データムを識別する特定のキーに関連付けられる。各パーティション(例えば、142a、142b、142c、142d、142e)は、1つのデータムを保持することができ、多くのデータムを保持することもできる。これらのパーティションは、クラスタ内のすべてのノード間に分散される。Oracle(登録商標)Coherenceのデータグリッドにおいて、各キーおよび各データムは、POF(Portable Object Format)と呼ばれる効率的な非圧縮バイナリエンコーディングによってシリアル化されたデータオブジェクトとして、格納される。
特定のデータムを探し出すために、各ノードは、キーをパーティションにマッピングするマップ、例えばハッシュマップを有する。このマップは、クラスタ内のすべてのノードに認識され、クラスタのすべてのノード間に同期され、更新される。各パーティションは、パーティションに関連付けられた各キーをそのパーティションに格納された対応のデータムにマッピングするバッキングマップを有する。分散データグリッド内の任意のノードは、クライアントから、特定のキー/データムに関連付けられた作業を受信することができる。ノードが作業を受信すると、キーが受信ノード上の基本パーティションに関連付けられている場合、ノードは、そのキーに関連付けられた値/オブジェクトを直接に利用することができる。キーが受信ノード上の基本パーティションに関連付けられていない場合、ノードは、操作をそのキーに関連付けられた基本パーティションを保持するノードに直接に(シングルホップで)導くことができる。したがって、各ノードは、ハッシュマップおよびパーティションマップを使用することによって、分散キャッシュにおいて、各キーに対応する各データムを直接利用するまたはシングルホップを介して利用することができる。
いくつかのアプリケーションにおいて、分散キャッシュ内のデータは、最初に、データ112を含むデータベース110から取り込まれる。データベース110内のデータ112は、シリアル化され、分散データグリッドのノード間に分配され、分散される。分散データグリッド100は、データベース110のデータ112から作成されたデータオブジェクトをサーバ110a、120b、120c、120dのメモリ内のパーティションに格納する。これによって、クライアント150および/またはデータグリッド100内のアプリケーションは、メモリからこれらのデータオブジェクトを直接利用することができる。したがって、分散データグリッド100からデータオブジェクトの読み出しおよび分散データグリッド100にデータオブジェクトの書き込みは、遥かに高速になり、データベース110を直接使用することよりも、多くの同時接続を達成できる。データのインメモリ複製および保証されたデータ一貫性によって、分散データグリッドは、保管および報告のためにトランザクションをデータベース110などの外部データソースに長期保存されるまで、メモリ内でトランザクションを管理することができる。メモリ内のデータオブジェクトに変更があった場合、その変更は、基本パーティションとバックアップパーティションとの間に同期された後、非同期書き込み(ライトバック)を用いてデータベース110に書き込まれ、ボトルネックを回避する。
データがクラスタノード間に分散されていることにも関わらず、クライアント150は、任意のクラスタノードに接続して、任意のデータを取り出すことができる。このことは、位置透明性(location transparency)と呼ばれ、開発者がキャッシュのトポロジーに基づいてコードを作成する必要がない。いくつかの実施形態において、クライアントは、特定のサービス、例えば特定のノード上のプロキシサービスに接続することができる。他の実施形態において、接続プールまたはロードバランサを使用して、クライアントを特定のノードに導くことができ、クライアントの接続を一部またはすべてのデータノード間に確実に分散することができる。どのように接続されても、分散データグリッド内の受信ノードは、クライアント150からタスクを受信することができる。各タスクは、特定のデータムに関連付けられているため、特定のノードによって処理されなければならない。ノードは、特定のデータムに対応するタスク(例えば、キャッシュサービスに対するコール)を受信すると、そのデータムを格納するパーティション、およびそのパーティションに対応するノードを特定する。その後、受信ノードは、例えばリモートキャッシュを呼び出すことによって、タスクを要求されたパーティションを保持するノードに導く。各データムが1つのみのクラスタノードにより管理されているため、ネットワークを経由したアクセスは、「シングルホップ」作業である。この種のアクセスは、ポイントツーポイント(point-to-point)通信を使用するので、インフィニバンド(InfiniBand)などのスイッチドファブリックネットワークを最大限に活用することができるため、拡張性が非常に高い。
同様に、キャッシュ更新作業は、同様のシングルホップポイントツーポイント方法を使用して、基本パーティションを備えるノードおよびパーティションのバックアップコピーを備えるノードの両方にデータを送信する。キャッシュに対する変更は、すべてのバックアップから承認応答を受け取るまで完了していないとみなされる。これによって、データの一貫性が維持され、書き込み操作中にクラスタノードが予期せず故障した場合に、データが損失しないことが保証される。また、分散キャッシュサービスは、一部のクラスタノードを、データを格納するように構成することができ、他のクラスタノードを、データを格納しないように構成することができる。
いくつかの実施形態において、必要に応じて、分散データグリッドは、固体記憶装置(例えば、SSD128a)、最も典型的にはフラッシュドライブを利用して、キャッシュに対するデータあふれ用の容量を提供する弾性(伸縮性)データ機構を有するように構成される。弾性データ機構を使用する場合、キャッシュは、RAMまたはDISKジャーナルに基づくバッキングマップを使用するように指定される。ジャーナルは、オブジェクトの状態変化を格納するメカニズムを提供する。各データム/値は、特定のキーに関連して記録され、インメモリ木を使用して、データムへのポインタを格納する(小さなデータム/値は、木に直接格納されてもよい)。これにより、一部の値(データ)を固体記憶装置(例えば、SSD128a)に格納すると共に、索引/メモリ木をメモリ(例えば、RAM124a)に格納することができる。弾性データ機構によって、分散データグリッドは、完全にRAMに基づいた解決策に比べて、性能を殆ど損なうことなく、各ノードにより多くのデータをサポートすることができる。
上述したOracle(登録商標)Coherenceデータグリッドのような分散データグリッドは、データ操作の遅延問題を解決し、リアルタイムでデータをキャッシュおよび処理することによって、システムの性能を改善することができる。アプリケーションは、データをデータグリッドにキャッシュすることによって、高価なバックエンドデータソースを要求することを回避する。共有データキャッシュは、キャッシュされたデータの一貫性のある単一のビュー(view)を提供する。キャッシュからの読み取りは、バックエンドデータソースのクエリよりも高速であり、アプリケーション層の規模に従って変化する。インメモリ実行は、ボトルネックを軽減し、データの競合を減少し、アプリケーションの応答性を改善する。並列のクエリおよび演算をサポートすることによって、データに基づく計算の性能を改善する。分散データグリッドは、故障許容性(フォールトトレラント)を有するため、データの信頼性、正確性、一貫性、高可用性および災害復旧性を実現する。分散データグリッドによって、予測可能なコストで、リソース使用率を改善するように、アプリケーションを線形的に且つ動的に拡張することができる。分散データグリッドは、多くのアプリケーションに、データソースを共有する貴重な解決策を提供する。
分散データグリッド内でコードの実行
実施形態において、分散データグリッドは、エージェントを使用して、分散データグリッドのノード上で処理を実行することをサポートする。区分データの場合、エージェントは、処理するデータを保有するノード(または複数のノード)上で実行するように構成され得る。行列化および並列化の管理、エージェントの実行、エージェントによるデータのアクセス、エージェントによるデータの変更は、すべてグリッドのノード上で行われる(得られたデータに変更があった場合に、データの変更を同期バックアップするときのみ、追加のネットワークトラフィックが必要である)。多くの処理目的に対して、分散型並列制御、可干渉性およびデータ更新を処理するよりも、エージェントをノードに提供する方が遥かに効率的である。換言すれば、データグリッドは、データトポロジの構成に基づいて、エージェントを実行する場所を決定し、エージェントをその場所に移動し、エージェントを実行し(エージェントの実行中に、アイテムの並列制御を自動的に処理する)、変更があった場合にその変更をバックアップし、結果を返す。
エントリプロセッサは、分散データグリッドのノード上で作業を実行するために使用されるエージェントの一例である。エージェント/実行可能コードの他の例として、アグリゲータ、フィルタ、値エクストラクタ、および呼び出し可能なコードを含むがこれらに限定されない。たとえば、Oracle(登録商標)Coherenceデータグリッドは、エントリプロセッサ(EntryProcessor)APIを介して、ロックフリーなプログラミングモデルをサポートする。有利なことに、エントリプロセッサは、処理中のエントリに暗示的な低レベルロックをかける。これによって、クライアントは、並行処理を考えることなく、処理コードをエントリプロセッサに配置することができる。エントリプロセッサを、特定のキー、キーの集合、またはフィルタで呼び出すことができる(フィルタは、キャッシュエントリに対して実行され、フィルタ条件と一致する各エントリは、当該エントリに対して実行されるエントリプロセッサを有する)。エントリプロセッサは、クラスタ全体で(個々のエントリを所有するノード上で)並列に実行される。このことは、クライアントがすべての影響されたキーをロックし、すべての必要なデータをキャッシュから取り出し、データを処理し、キャッシュに格納し、キーのロックを解除することに比べて、著しく有利である。処理は、(1台のコンピュータ上で連続的に実行されるではなく)複数のコンピュータ上で並列に実行され、ロックの実行およびロックの解除によるネットワーク負荷を排除する。選択されたエントリに対して処理を行うエントリプロセッサのコードは、分散データグリッドに送信される。多くの種類のトランザクションにおいて、エントリプロセッサを使用することによって、競合および遅延を最小限に抑え、データ処理の故障許容性を損なうことなく、システムの処理量を向上させる。
例えば、図1に示す分散データグリッド100のクライアント150上で、エージェントを作成することができる。エージェントを実行するために、このエージェントは、シリアル化され、分散データグリッド100内の1つ以上のノードに送信される。オブジェクトをシリアル化することは、オブジェクトの状態をバイトストリームに変換し、このバイトストリームを逆変換する(デシリアル化する)と、オブジェクトのコピーを得ることができることを意味する。デシリアル化は、シリアル化されたオブジェクトをオブジェクトのコピーに変換するプロセスである。Java(登録商標)プラットフォームは、シリアル化可能なオブジェクトをシリアル化するデフォルト方法を指定する。(Java)クラスは、このデフォルトのシリアル化方法をオーバーライドして、そのクラスのオブジェクトをシリアル化する独自の方法を定義することができる。オブジェクトをシリアル化すると、そのクラスを特定する情報が、シリアル化されたストリームに記録される。しかしながら、クラスの定義(「クラスファイル」)自体は、通常記録されない。一般に、オブジェクトをデシリアル化するシステム(例えば、サーバ)は、必要なクラスファイルを検索してロードする方法を決定する。
エージェントを実現するために、分散データグリッドのノード上で存在しないクラス定義(「クラスファイル」)を利用する場合、問題が生じる可能性がある。この状況では、エージェントが動作しようとするノード上で必要なクラスを発見できないため、このエージェントは、このノード上で動作できない。クライアント上のクラス定義がノード上のクラス定義と異なる場合、別の問題が生じる可能性がある。例えば、クラス定義がクライアント上で変更/更新されても、分散データグリッドのノード上で変更/更新されない可能性がある。この状況では、必要なクラスがノード上で存在するため、エージェントは、動作する可能性がある。しかしながら、エージェントは、作成者が意図したクラス定義と異なるものを使用するため、意図通りに動作しない可能性がある。従来の実施形態において、新規クラスファイルまたは更新クラスファイルをクライアント上に配置する場合、分散データグリッド内で動作するエージェントによって利用される前に、新規クラスファイルまたは更新クラスファイルをサポートするように分散データグリッド内のノードを再配置および再起動する必要がある。大規模なクラスタの場合、このことは、非常に面倒で時間を浪費する。
実施形態において、分散データグリッド100は、エージェント内で実行するために、分散データグリッド100のノードにおいて、クライアント150からの新規または更新クラス定義の動的配置をサポートするシステムおよび方法を実施することによって、これらの問題を解決する。また、分散データグリッド100は、クラス定義のバージョン管理を実施することによって、エージェント(例えば、エントリプロセッサ)によって呼び出されたクラスが、エージェントを作成したクライアント150上のクラスと同様のクラス定義を有することを保証する。クラス定義の動的配置およびクラス定義のバージョン管理をサポートするシステムおよび方法を利用することにより、分散データグリッドのノード上で新規または更新クラス定義を正しく実行することができ、分散データグリッドの有用性が増す。さらに、新規または更新クラス定義をサポートするため、分散データグリッド内のノードを再配置および再起動する必要性を回避することにより、分散データグリッドの性能が改善される。
クラス定義の動的配置
図2Aは、ノード上で新規クラス定義を利用するエージェントの実現を可能にするように、クライアント150からの新規クラス定義を分散データグリッドのノード130aに動的に配置するシステムを示す図である。図示では1つのクライアントおよび1つのノードしか示されていないが、同様の機能は、すべてのクライアントおよび分散データグリッドのすべてのノードに適用できる。図2Aに示すように、ノード130aは、Java(登録商標)仮想マシン(JVM)、例えばOracle(登録商標)JRockit JVM、IBM(登録商標)JVM、Oracle(登録商標)JVM、または別のベンダーのJVM実装として実装される。ノード130aは、実行エンジン210、ネイティブメソッドインターフェイス212、ネイティブメソッドライブラリ214、およびクラスローダ217を含む。ノード130aは、JVMメモリ領域220を備える。JVMメモリ領域220は、メソッド領域212、ヒープ214、JVM言語スタック216、PCレジスタ218、およびネイティブメソッドスタック230を含む。ノード130aの起動時に、クラスローダ217は、JVMのクラスパスで発見されたクラス定義に基づいて、クラスをロードおよび準備して、初期化する。クライアント150は、リモートクラスサポート262を備え、ノード130aは、リモートクラスサポート232を備える。以下に説明するように、リモートクラスサポートの機能によって、wireプロトコルを介してクライアント150からノード130aに送信されたリモートクラスコンストラクタ264を用いて、クライアント150からの新規クラス定義を分散データグリッドのノード130aに動的に配置することができる。
図2Aに示すように、クライアントシステム150のユーザは、ノード130a上で操作されるエージェント用のエージェントコード250を準備することができる。エージェントコードは、新規クラス定義252を含むことができる。新規クラス定義252は、新規クラス名を有する新規クラスの定義であってもよく、または(既存する)クラスの更新定義であってもよい。なお、クラス定義が変更された場合、クライアントの観点からみれば、そのクラスは、技術的に新規クラス定義を有する新規クラスになる。クライアント上の既存クラスを変更することはできない。その代わりに、変更を含む新規クラスが実装される。ノード130a上で実行するためにエージェントコード250を送信するときに、リモートクラスサポート262は、エージェントコード250を検査することによって、エージェントコード250が新規クラス定義252を含むか否かを判定する。1つ以上の新規クラス定義252を発見した場合、リモートクラスサポート262は、新規クラス定義252のためにリモートクラスコンストラクタ264を準備する。リモートクラスコンストラクタ264は、新規クラス定義266と、ノード130a上でエージェントのインスタンスを構築するために必要なエージェントの捕捉状態268とを含む。リモートクラスコンストラクタ264を使用して、新規クラスのwireプロトコルに従う伝送、およびwireプロコトルを介してノード130aに伝送された新規クラス定義の自動シリアル化を行うことができる。
リモートクラスサポート262は、クラス/IDテーブル260を利用する。クラス/IDテーブル260は、クラス名およびクラス定義のハッシュ関数(例えば、MD5ハッシュ)に基づいて、各既存クラスを特定するクラス識別子を含む。これによって、各クラスの識別子が一意であることが保証される。さらに、クラス定義が更新される場合、ハッシュは、新規識別子が割り当てられることを保証し、更新クラスは、新規クラスIDを有することになる。したがって、リモートクラスサポート262は、クラス/IDテーブル260を使用して、エージェントコード250が任意の新規クラス定義252を含むか否かを判定することができる。
したがって、リモートクラスサポート262は、クラス/IDテーブル260を使用して、新規クラス定義252がエージェントコード250に利用されているか否かを判定する。すべてのクラスがノード上で既に存在する場合、リモートクラスサポートは、(ノード130a上で実行することができる)クラスのIDを返送する。しかしながら、新規クラス定義252がエージェントコード250に利用される場合(すなわち、クラスがノード上で存在しない場合)、新規クラス定義252が準備され、新規クラス定義252に対応する新規IDがクラス/IDテーブル260に格納される。ノード130a上でエージェントを実現するために必要とされる新規クラス定義266とエージェントの捕捉状態268とを含むリモートクラスコンストラクタ264が準備される。リモートクラスコンストラクタのインスタンスは、自動的にシリアル化され、wireプロトコルを介してノード130aに送信される。
リモートクラスコンストラクタ264は、ノード130aによって受信され、リモートクラスサポート232によって処理される。リモートクラスコンストラクタ264は、Wireプロトコルを介してクライアント150から受信されると、自動的にデシリアル化される。ノード130aは、クラスIDを検証するために、独自のIDテーブル260を保有する。ノード130aは、デシリアル化後のリモートクラスコンストラクタ264およびリモートクラスサポート232を使用して、新規クラス定義266用のクラスローダを準備し、クラスをJVMメモリ220にロードし、JVM内の新規クラスのインスタンスを初期化する。したがって、ノード130aは、新規クラス定義に基づいたクラスインスタンスを利用して、コードを実行することができる。リモートクラスサポート232は、ノード130a上で実行するためのエージェント238を実現することができる。
図2Bは、クライアント150からの新規または更新クラス定義を分散データグリッドのノード130aに動的に配置するための方法270を示す図である。ステップ272において、クライアントは、ノード上で実行するためのエージェントを送信しようとする。ステップ274において、クライアントは、クラスのIDを判断する。IDは一意的なものであるため、クライアントは、ステップ276において、そのIDをクラス/IDテーブルに事前に記憶されたIDと比較することによって、クラスが既に存在しているか否かを判断することができる。IDがクラス/IDテーブルのクラスと一致しない場合、そのクラスが新規クラスまたは更新クラスである。
ステップ278において、クラスが新規クラスまたは更新クラスである(IDがクラス/IDテーブルに存在しない)場合、クライアントは、そのクラスに新規クラス定義を生成する。リモートクラスコンストラクタは、クライアント上で用意される。リモートクラスコンストラクタは、ノード上でエージェントを実現するために必要とされる新規クラス定義とエージェントの捕捉状態とを含む。ステップ280において、リモートクラスコンストラクタインスタンスは、自動的にシリアル化され、wireプロトコルを介してノードに送信される。
ステップ282において、ノードは、wireプロトコルを介して、クライアントからリモートクラスコンストラクタを受信する。ステップ284において、リモートクラスコンストラクタは、ノード上でデシリアル化され、実行される。ステップ286において、エージェントを実現するために必要とされた新規クラス定義とエージェントの捕捉状態とをJVMメモリにロードすることによって、ノード上で新規クラスまたは更新クラスのインスタンスを作成する。ステップ288において、ノード上でエージェントを実装するために、新規または更新クラスのインスタンスは、ノード上で実行可能に構成される。なお、クラス定義が変更された場合、クライアントの観点からみれば、そのクラスは、技術的に新規クラス定義を有する新規クラスになる。クライアント上の既存クラスを変更することはできない。その代わりに、変更を含む(新規クラスIDを有する)新規クラスが実装される。ステップ290において、エージェントは、ノード上で実行される。
したがって、この方法は、ノード/JVMの再配置を必要とせずに、新規クラスまたは更新クラスの実装を可能にするために、クライアントからの新規または更新クラス定義をノードに動的に配置することができる。ノード/JVMの再配置の必要がない、新規クラスまたは更新クラスの動的配置は、エージェントを実行するための分散データグリッドの有用性を強化し、新規または更新クラス定義を必要するときにノードを再起動する必要性を排除する。
ラムダを実装するクラス定義の動的配置
一実施形態において、クラス定義の動的配置を行うためのシステムおよび方法は、ラムダ式に関連するクラス定義に適用することができる。近年、Java(登録商標)のようなオブジェクト指向プログラミング言語は、多くの異なる種類のプラットフォーム上で動作する多種さまざまなアプリケーションにますます普及されている。一部のプログラミング言語は、「ラムダ式」をサポートすることができる。オブジェクト指向プログラミング言語において、ラムダ式は、メソッドを1つしか持たず、状態を持たないオブジェクトを定義するための軽量メカニズムとして使用できる。ラムダ式の軽量構文は、さまざまなプログラミング言語環境に一般的に使用されるように最適化することができる。Java(登録商標)プログラミング言語は、命令型プログラミング言語の一例であるレキシカルスコープ言語である。ラムダ式のサポートは、Java(登録商標)8プログラミング言語に導入された。したがって、場合によっては、分散データグリッドのノード上で実行されるエージェントのコードは、ラムダ式を含んでもよい。
ラムダ式は、プログラミング言語によって値として取り扱うことができる関数を記述する軽量な方法である。ラムダ式は、匿名の内部クラスの仕組みを構文的に軽量なメカニズムに置き換えることによって、「縦の問題」または膨大構文を取り扱う匿名メソッドでもよい。メソッドは、ラムダ(関数)を引数として受け入れ、結果として返すことができるため、ラムダ式は、「コードをデータとして」サポートするものとして見なすことができる。ラムダ式は、メソッドに似ている。具体的に、ラムダ式は、仮パラメータのリスト、およびこれらのパラメータで表現された本体(式またはブロック)を提供する。ラムダ式は、次のような構文、すなわち、「(引数リスト)→本文」を使用して表現されてもよい。
Java(登録商標)プログラミング言語におけるラムダ式の使用の態様は、例えば、2014年2月27日に出願され、「ラムダ式の互換性チェックをサポートするシステムおよび方法」と題された米国特許出願第13/779536号、2012年11月14日に出願され、「過負荷メソッドおよびコンストラクタ引数のターゲット分類」と題された米国特許出願第13/677001号、2012年11月14日に出願され、「プログラム変数の不変性を推定するためのシステムおよび方法」と題された米国特許出願第13/677000号、2013年2月27日に出願され、「プログラミング言語環境においてラムダ式をコンパイルするためのシステムおよび方法」と題された米国特許出願第13/779557号、および2011年2月15日に出願され、「ソフトウェアプログラムにおける閉鎖の結合に基づく特性付け」と題された米国特許出願第13/028111号に記載されている。これらの出願は、参照により本開示に援用される。
ラムダ式は、名前を有しないため、「匿名」である。したがって、ラムダ式は、匿名メソッドを定義することができ、匿名メソッドを機能インターフェイスのインスタンスとして取り扱うことができる。匿名の内部クラスを有する機能インターフェイスの使用がJava(登録商標)プログラミング言語において共通パターンであるため、Java(登録商標)プログラミング言語は、機能インターフェイスを利用してラムダ式を実装する。Java(登録商標)8プログラミング言語において、ラムダ式は、匿名クラス宣言の基本フォームとして記述することができる。このフォームにおいて、ラムダ式のパラメータは、匿名クラス宣言メソッドのパラメータと同様であり、ラムダ式の本体は、匿名クラス宣言メソッドの本体と同様である(ただし、この特定のラムダ式の本体が唯一に行えるのは、値を返すことであるため、キーワード「return」を省くことができる)。式−本体形式では、キーワード「return」が不要になる。そうでなければ、式のサイズに対する構文上の負荷が大きくなる可能性がある。したがって、Java(登録商標)8プログラミング言語では、ラムダ式は、機能インターフェイスのクラス定義において実装される。
本開示は、例えば、図1の分散データグリッドを含む分散コンピューティング環境にラムダを実装するクラスの動的配置をサポートすることができるシステムおよび方法を説明する。上述したように、分散データグリッドは、分散データグリッドのノード上で動作するエージェントを用いて、トランザクションの実行をサポートする。このようなエージェントのコードには、ラムダ式を含む。しかしながら、従来の実装では、エージェントで使用されるクラスは、各クラスタノードのクラスパスに存在(既存)しなければならない。これによって、ラムダを実装するクラスを予め分散データグリッドのノードに配置しない限り(またはノードを再配置しない限り)、エージェントにラムダ式を使用できない。サーバで実際にラムダ式を処理するためには、クライアントおよびサーバクラスパスの両方には同様のコンパイル済みコードが必要である。換言すれば、サーバは、サーバクラスパスにおいてラムダ式に対応するクラスを有する必要がある。クライアント上のラムダ式を変更するまたは新規ラムダ式を導入する場合、ラムダ式に対応する新規クラスをサーバに配置するために、クライアントおよびサーバの両方を再配置および再起動する必要がある。大規模なクラスタの場合、このことは、非常に面倒で時間を浪費する。
この制約を克服するために、本発明の実施形態において、クライアントは、エージェントに使用されるラムダ式を記述するメタデータと共に、ラムダ式を実装するクラスの実際のクラス定義を送信する。ラムダ式を実装するクラスの動的配置は、上述したクラス定義の動的配置の特例として実行することができる。サーバ側では、クライアントから受信したクラス定義を構文解析することによって、エージェント/エントリプロセッサに使用される新規のラムダクラスを生成する。サーバは、クライアントから受信したクラス定義に基づいて、ラムダクラスを定義し、実行する。これにより、既存のラムダ式を変更した後または新規のラムダ式を導入した後、サーバの再配置または再起動を必要とせず、ラムダ式のコンパイル済みコードをクラスパスに配置することができる。
図3Aは、本発明の一実施形態に従って、分散コンピューティング環境において動的ラムダをサポートするシステムを示す図である。図3に示すように、分散データグリッドなどの分散コンピューティング環境300は、クライアント301およびサーバ302を含む。一実施形態において、分散コンピューティング環境は、図1に示された分散データグリッド100であってもよい。この場合、クライアント301は、1つ以上のクライアント150を表し、サーバ302は、1つ以上のノード130a、130b、130c、130dおよび130eを表す。
上述のように、クラス定義の動的配置をサポートしない従来の実施形態において、ラムダ式303を記述するメタデータ305のみがクライアント301からサーバ302に送信される。その後、サーバ302は、受信したメタデータ306に基づいて、クライアント上のラムダ式303を利用する。サーバ302は、受信したメタデータ306をデシリアル化して、静的ラムダに必要なクラスファイルを検索してロードする方法を決定する。したがって、サーバ302上でクラスファイルを予め配置する必要があり、クライアント301上で同様のクラスファイル(すなわち、クライアント上で変更/更新されていないクラスファイル)を配置する必要がある。したがって、クライアント側で変更したラムダ式または新たに導入したラムダ式は、クライアントによってサーバ302上で呼び出される前に、クライアント301およびサーバ302の両方に再配置および/または再起動する必要がある。
一方、クラス定義の動的配置を使用可能にする本発明の実施形態において、新規または更新クラス定義を使用してラムダを実装するときに、クライアント301は、ラムダ式303から、実行する1つ以上のクラス定義307を生成し、生成されたクラス定義307を分散コンピューティング環境300内のサーバ302に送信する。サーバ302は、実行するクラス定義308を受信した後、受信したクラス定義308に基づいて、サーバ側でラムダインスタンス304を定義する。次いで、サーバ302は、受信したクラス定義308によって定義されたラムダインスタンス304を実行する。さらに、クライアント301がラムダ式303をクライアント側で更新する場合、すなわち、ラムダ式303が変更されたときまたは新しい挙動が導入されたときに、新規クラス定義307を用意してサーバ302に送信することによって、新しい挙動を有するように、新規ラムダインスタンスを作成し、実行することができる。
図3Bは、分散コンピューティング環境において動的ラムダをサポートする方法を示す図である。ステップ320において、クライアントは、ラムダ式からクラス定義を生成する。ステップ322において、サーバは、クライアントから実行するクラス定義を受信する。ステップ324において、サーバは、受信したクラス定義に基づいて、サーバ側でラムダクラスを定義し、ロードする。ステップ326において、サーバは、受信したクラス定義に基づいて、サーバ側で定義されたラムダインスタンスを作成し、実行する。ラムダ式がクライアント側で更新された場合、更新されたラムダ式に基づいた新規クラス定義を用いて、ステップ320からステップ326までのプロセスを繰り返すことによって、サーバ側で新規のラムダクラス定義およびインスタンスを生成する。
上記で本発明のさまざまな実施形態を説明したが、これらの実施形態は、限定ではなく例示として提示されることを理解すべきである。本発明の精神および範囲から逸脱することなく、形態および詳細のさまざまな変更を行うことができることは、当業者にとって明らかであろう。
例示の目的のために、上記の説明は、主にJava(商標)プログラミング言語(またはJava(商標)に緊密に関連する言語)を使用する文脈に関連して提供されたが、記載された技術は、ラムダ式、メソッド、コンストラクタまたは関数などの呼び出し操作のオーバーロードをサポートするプログラミング言語に適用することができる。いくつかの実施形態では、この技術をオブジェクト指向言語に適用することができ、他の実施形態では、この技術を非オブジェクト指向言語(さまざまな手続き型言語)に適用することができる。
本発明の多くの特徴は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組み合わせに実行する、またはそれらを使用して実行する、またはそれらの援助で実行することができる。本発明は、本開示の教示に従ってプログラムされた1つ以上のプロセッサ、メモリおよび/またはコンピュータ可読記憶媒体を含む1つ以上の従来の汎用または専用デジタルコンピュータ、コンピューティング装置、機械、またはマイクロプロセッサを使用して都合よく実施することができる。本発明の特徴は、例えば、特定用途向け集積回路(ASIC)およびプログラマブル論理装置などのハードウェア要素を使用して、ハードウェアで実施することもできる。本開示に記載の機能を実行するために、ハードウェア状態機械を実装することは、当業者には明らかであろう。
本発明の特徴は、処理システムのハードウェアを制御し、本発明の結果を利用して処理システムと他の機構との相互作用を可能にするソフトウェアおよび/またはファームウェアに組み込むことができる。そのようなソフトウェアまたはファームウェアは、アプリケーションコード、装置ドライバ、オペレーティングシステムおよび実行環境/コンテナを含むことができるがこれらに限定されない。ソフトウェア分野の当業者には明らかであるように、熟練したプログラマは、本開示の教示に基づいて、適切なソフトウェアのコーディングを容易に準備することができる。
いくつかの実施形態において、本発明は、本発明のプロセスのうちいずれかを実行するようにコンピュータをプログラムするために使用できる命令を格納する非一時的な記録媒体またはコンピュータ読取可能な媒体であるコンピュータプログラム製品を含む。この記録媒体は、フロッピー(登録商標)ディスク、光ディスク、DVD、CD−ROM、マイクロドライブ、および光磁気ディスクを含む、任意の種類のディスク、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、フラッシュメモリデバイス、磁気もしくは光カード、ナノシステム(分子メモリICを含む)、または、命令および/もしくはデータを格納するのに適した任意の種類の媒体もしくは装置を含むことができるが、これらに限定されない。
本発明の上記記載は、例示および説明を目的として提供される。本発明を網羅的なものまたは開示された形態そのものに限定することを意図していない。当業者には数多くの変更および変形が明らかであろう。実施形態は、本発明の原理およびその実際の応用を最も良く説明することによって、他の当業者がさまざまな実施形態および考えられる特定の用途に適したさまざまな変形に応じて本発明を理解できるように、選択され説明される。本発明の範囲は、添付の特許請求の範囲およびそれらの同等物によって規定されると意図する。

Claims (20)

  1. 分散コンピューティング環境内のノードにおいて、クライアントからの実行可能コードの動的配置をサポートする方法であって、
    前記ノード上で、前記クライアントからのシリアル化されたオブジェクトを受信するステップを含み、前記シリアル化されたオブジェクトは、前記ノードのクラスパスに存在しない新規クラスのクラス定義と、前記新規クラスを利用するエージェントの捕捉状態とを含み、
    前記ノード上で、前記シリアル化されたオブジェクトをデシリアル化することによって、前記クラス定義と前記エージェントの前記捕捉状態とを取得するステップと、
    前記クラス定義と前記エージェントの前記捕捉状態とを前記ノードのメモリにロードすることによって、前記ノード上で前記新規クラスのインスタンスを生成するステップと、
    前記ノード上で前記エージェントを実行するステップとを含む、方法。
  2. 前記クラス定義は、ラムダ式を実装する、請求項1に記載の方法。
  3. 前記クライアント上でエージェントコードを受信するステップと、
    前記クライアント上の前記エージェントコードから、前記新規クラスのクラス定義を判断するステップと、
    前記クラス定義に基づいて、前記新規クラスのクラスIDを生成するステップとをさらに含む、請求項1または記載の方法。
  4. 前記クライアント上でクラス/IDテーブルを保持するステップと、
    前記クライアント上で前記エージェントのエージェントコードを受信するステップと、
    前記クライアント上の前記エージェントコードから、前記新規クラスのクラス定義を判断するステップと、
    前記クラス定義に基づいて、前記新規クラスのクラスIDを生成するステップと、
    前記クラス/IDテーブルを用いて、前記新規クラスが前記ノードのクラスパスに存在しないことを判断するステップとをさらに含む、請求項1〜3のいずれか1項に記載の方法。
  5. 前記クライアント上でクラス/IDテーブルを保持するステップと、
    前記クライアント上で前記エージェントのエージェントコードを受信するステップと、
    前記クライアント上の前記エージェントコードから、前記新規クラスのクラス定義を判断するステップと、
    前記クラス定義に基づいて、前記新規クラスのクラスIDを生成するステップと、
    前記クラス/IDテーブルを用いて、前記新規クラスが前記ノードのクラスパスに存在しないことを判断するステップと、
    前記新規クラスの前記クラスIDを前記クラス/IDテーブルに追加するステップとをさらに含む、請求項1〜3のいずれか1項に記載の方法。
  6. 前記クライアント上で前記エージェントのエージェントコードを受信するステップと、
    前記クライアント上の前記エージェントコードから、前記新規クラスのクラス定義を判断するステップと、
    前記クライアント上で、前記ノードのクラスパスに存在しない新規クラスのクラス定義と、前記新規クラスを利用するエージェントの捕捉状態とを含む前記シリアル化されたオブジェクトを生成するステップと、
    前記シリアル化されたオブジェクトを前記ノードに送信するステップとをさらに含む、請求項1〜5のいずれか1項に記載の方法。
  7. 前記クライアント上で前記クライアントのエージェントコードを受信するステップを含み、前記エージェントコードは、ラムダ式を含み、
    前記クライアント上の前記エージェントコードから、前記新規クラスのクラス定義を判断するステップを含み、前記クラス定義は、前記ラムダ式を実装し、
    前記クライアント上で、前記ノードのクラスパスに存在しない新規クラスのクラス定義と、前記新規クラスを利用するエージェントの捕捉状態とを含む前記シリアル化されたオブジェクトを生成するステップと、
    前記シリアル化されたオブジェクトを前記ノードに送信するステップとをさらに含む、請求項1〜6のいずれか1項に記載の方法。
  8. 前記分散コンピューティング環境は、データグリッドクラスタを含み、
    前記実行可能コードの動的配置は、前記エージェントによって操作されるデータを保持する複数のノードを前記データグリッドクラスタに再配置することなく、前記データグリッドクラスタ内の前記複数のノード上で前記エージェントの実行を可能にする、請求項1〜7のいずれか1項に記載の方法。
  9. 前記分散コンピューティング環境は、データグリッドクラスタを含み、
    前記エージェントは、前記ノードに保持されたデータを処理するためのエントリプロセッサである、請求項1〜8のいずれか1項に記載の方法。
  10. 前記分散コンピューティング環境は、データグリッドクラスタを含み、
    前記エージェントは、前記ノードに保持されたデータを処理するためのアグリゲータ、フィルタ、値エクストラクタおよび呼び出し可能物のうち、1つである、請求項1〜9のいずれか1項に記載の方法。
  11. 分散コンピューティング環境において実行可能コードの動的配置をサポートするシステムであって、
    マイクロプロセッサとメモリとを含むコンピュータシステムと、
    前記分散コンピューティング環境の一部として前記コンピュータシステム上で配置されたノードとを備え、
    前記ノードは、
    クライアントからのシリアル化されたオブジェクトを受信するように構成され、前記シリアル化されたオブジェクトは、前記ノードのクラスパスに存在しない新規クラスのクラス定義と、前記新規クラスを利用するエージェントの捕捉状態とを含み、
    前記ノード上で前記シリアル化されたオブジェクトをデシリアル化することによって、前記クラス定義と前記エージェントの前記捕捉状態とを取得し、
    前記クラス定義と前記エージェントの前記捕捉状態とを前記ノードに割り当てられた前記メモリの一部にロードすることによって、前記ノード上で前記新規クラスのインスタンスを生成し、
    前記ノード上で前記エージェントを実行するように構成される、システム。
  12. 前記クラス定義は、ラムダ式を実装する、請求項11に記載のシステム。
  13. マイクロプロセッサとメモリとを含むクライアントコンピュータシステムと、
    前記クライアントコンピュータシステム上で動作するクライアントとをさらに備え、
    前記クライアントは、
    前記エージェントのエージェントコードを受信し、
    前記エージェントコードから、前記新規クラスのクラス定義を判断し、
    前記クラス定義に基づいて、前記新規クラスのクラスIDを生成するように構成される、請求項11または12記載のシステム。
  14. マイクロプロセッサとメモリとを含むクライアントコンピュータシステムと、
    前記クライアントコンピュータシステム上で動作するクライアントとをさらに備え、
    前記クライアントは、
    クラス/IDテーブルを保持し、
    前記エージェントのエージェントコードを受信し、
    前記エージェントコードから、前記新規クラスのクラス定義を判断し、
    前記クラス定義に基づいて、前記新規クラスのクラスIDを生成し、
    前記クラス/IDテーブルを用いて、前記新規クラスが前記ノードのクラスパスに存在しないことを判断するように構成される、請求項11〜13のいずれか1項に記載のシステム。
  15. マイクロプロセッサとメモリとを含むクライアントコンピュータシステムと、
    前記クライアントコンピュータシステム上で動作するクライアントとをさらに備え、
    前記クライアントは、
    クラス/IDテーブルを保持し、
    前記エージェントのエージェントコードを受信し、
    前記エージェントコードから、前記新規クラスのクラス定義を判断し、
    前記クラス定義に基づいて、前記新規クラスのクラスIDを生成し、
    前記クラス/IDテーブルを用いて、前記新規クラスが前記ノードのクラスパスに存在しないことを判断し、
    前記新規クラスの前記クラスIDを前記クラス/IDテーブルに追加するように構成される、請求項11〜13のいずれか1項に記載のシステム。
  16. マイクロプロセッサとメモリとを含むクライアントコンピュータシステムと、
    前記クライアントコンピュータシステム上で動作するクライアントとをさらに備え、
    前記クライアントは、
    クラス/IDテーブルを保持し、
    前記エージェントのエージェントコードを受信し、
    前記エージェントコードから、前記新規クラスのクラス定義を判断し、
    前記ノードのクラスパスに存在しない新規クラスのクラス定義と、前記新規クラスを利用するエージェントの捕捉状態とを含む前記シリアル化されたオブジェクトを生成し、
    前記シリアル化されたオブジェクトを前記ノードに送信するように構成される、請求項11〜15のいずれか1項に記載のシステム。
  17. マイクロプロセッサとメモリとを含むクライアントコンピュータシステムと、
    前記クライアントコンピュータシステム上で動作するクライアントとをさらに備え、
    前記クライアントは、
    クラス/IDテーブルを保持し、
    前記エージェントのエージェントコードを受信するように構成され、前記エージェントコードは、ラムダ式を含み、
    前記エージェントコードから、前記新規クラスのクラス定義を判断するように構成され、前記クラス定義は、前記ラムダ式を実装し、
    前記ノードのクラスパスに存在しない新規クラスのクラス定義と、前記新規クラスを利用するエージェントの捕捉状態とを含む前記シリアル化されたオブジェクトを生成し、
    前記シリアル化されたオブジェクトを前記ノードに送信するように構成される、請求項11〜16のいずれか1項に記載のシステム。
  18. 前記分散コンピューティング環境は、データグリッドクラスタを含み、
    前記実行可能コードの動的配置は、前記エージェントによって操作されるデータを保持
    する複数のノードを前記データグリッドクラスタに再配置することなく、前記データグリッドクラスタ内の前記複数のノード上で前記エージェントの実行を可能にする、請求項11〜17のいずれか1項に記載のシステム。
  19. 前記分散コンピューティング環境は、データグリッドクラスタを含み、
    前記エージェントは、前記ノードに保持されたデータを処理するためのアグリゲータ、フィルタ、値エクストラクタおよび呼び出し可能物のうち、1つである、請求項11〜18のいずれか項に記載のシステム。
  20. 1つ以上のコンピュータシステム上で実行するためのプログラム命令を含むコンピュータプログラムであって、これらの命令は、コンピュータシステムによって実行されると、前記コンピュータシステムに、請求項1〜10のいずれか1項に記載の方法を実行させる、コンピュータプログラム。
JP2017516347A 2014-09-25 2015-09-24 分散コンピューティング環境において実行可能コードの動的配置をサポートするシステムおよび方法 Active JP6621470B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201462055482P 2014-09-25 2014-09-25
US62/055,482 2014-09-25
US201462076159P 2014-11-06 2014-11-06
US62/076,159 2014-11-06
PCT/US2015/052060 WO2016049379A1 (en) 2014-09-25 2015-09-24 System and method for supporting dynamic deployment of executable code in a distributed computing environment

Publications (3)

Publication Number Publication Date
JP2017528847A JP2017528847A (ja) 2017-09-28
JP2017528847A5 JP2017528847A5 (ja) 2018-08-09
JP6621470B2 true JP6621470B2 (ja) 2019-12-18

Family

ID=54325684

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017516347A Active JP6621470B2 (ja) 2014-09-25 2015-09-24 分散コンピューティング環境において実行可能コードの動的配置をサポートするシステムおよび方法

Country Status (5)

Country Link
US (1) US10095508B2 (ja)
EP (1) EP3198424B1 (ja)
JP (1) JP6621470B2 (ja)
CN (1) CN107077358B (ja)
WO (1) WO2016049379A1 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9286056B2 (en) * 2014-05-19 2016-03-15 International Business Machines Corporation Reducing storage facility code load suspend rate by redundancy check
JP6621470B2 (ja) * 2014-09-25 2019-12-18 オラクル・インターナショナル・コーポレイション 分散コンピューティング環境において実行可能コードの動的配置をサポートするシステムおよび方法
US10129361B2 (en) 2015-07-01 2018-11-13 Oracle International Corporation System and method for multi-version remote function execution control in a distributed computing environment
US10387229B2 (en) * 2015-11-23 2019-08-20 International Business Machines Corporation Reducing cost of deserialization by skipping unused array regions
US9817653B2 (en) * 2015-12-16 2017-11-14 Sap Se Updating extension in response to opening associated document
US9798569B2 (en) * 2016-02-15 2017-10-24 Nvidia Corporation System and method for retrieving values of captured local variables for lambda functions in Java
US20190334765A1 (en) * 2018-04-30 2019-10-31 Nutanix, Inc. Apparatuses and methods for site configuration management
CN109618005B (zh) * 2019-01-18 2020-12-08 华为终端有限公司 调用服务器的方法和代理服务器
US11138077B2 (en) * 2019-01-24 2021-10-05 Walmart Apollo, Llc System and method for bootstrapping replicas from active partitions
US20220374951A1 (en) * 2019-10-18 2022-11-24 DFINITY Stiftung Charging for the use of resources in a distributed network
CN110795109A (zh) * 2019-10-25 2020-02-14 北京达佳互联信息技术有限公司 一种功能扩展方法、装置及电子设备
CN111062684B (zh) * 2019-11-29 2023-10-20 普元信息技术股份有限公司 云流程平台下实现业务数据与流程数据一致性处理的系统及其方法

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6233601B1 (en) * 1996-11-14 2001-05-15 Mitsubishi Electric Research Laboratories, Inc. Itinerary based agent mobility including mobility of executable code
US6119145A (en) 1997-02-28 2000-09-12 Oracle Corporation Multithreaded client application storing a separate context for each transaction thus allowing threads to resume transactions started by other client threads
US5974428A (en) 1997-08-29 1999-10-26 International Business Machines Corporation Method and apparatus for class version naming and mapping
US6366898B2 (en) 1998-09-21 2002-04-02 Sun, Microsystems, Inc. Method and apparatus for managing classfiles on devices without a file system
US7016966B1 (en) * 2000-05-09 2006-03-21 Sun Microsystems, Inc. Generating results gates in a distributed computing environment
US7200848B1 (en) * 2000-05-09 2007-04-03 Sun Microsystems, Inc. Migrating processes using data representation language representations of the processes in a distributed computing environment
US6898618B1 (en) * 2000-05-09 2005-05-24 Sun Microsystems, Inc. Client-specified display services in a distributed computing environment
US8082491B1 (en) * 2000-05-09 2011-12-20 Oracle America, Inc. Dynamic displays in a distributed computing environment
US6925638B1 (en) 2000-09-21 2005-08-02 International Business Machines Corporation Mutability analysis in Java
US7207002B2 (en) * 2003-11-13 2007-04-17 International Business Machines Corporation Serialization and preservation of objects
US20050229048A1 (en) 2004-03-30 2005-10-13 International Business Machines Corporation Caching operational code in a voice markup interpreter
US7913239B2 (en) 2005-03-08 2011-03-22 International Business Machines Corporation Method and apparatus for a programming framework for pattern matching and transformation of intermediate language expression trees
US20060212847A1 (en) 2005-03-18 2006-09-21 Microsoft Corporation Type checker for a typed intermediate representation of object-oriented languages
US20070044083A1 (en) 2005-07-29 2007-02-22 Microsoft Corporation Lambda expressions
WO2007113542A1 (en) 2006-03-31 2007-10-11 British Telecommunications Public Limited Company Server computer component
US20080178140A1 (en) 2007-01-18 2008-07-24 United Microelectronics Corp. Method for correcting photomask pattern
US7873592B2 (en) 2007-04-20 2011-01-18 Microsoft Corporation Type inference for object-oriented languages
FI20070366A0 (fi) 2007-05-09 2007-05-09 Webmedia As Menetelmä ja järjestelmä luokan uudelleen lataamiseksi
US8397227B2 (en) * 2007-12-04 2013-03-12 International Business Machines Corporation Automatic deployment of Java classes using byte code instrumentation
US20090265688A1 (en) 2008-04-18 2009-10-22 Paul Govereau Circuits and methods for mobility of effectful program fragments
US20090328016A1 (en) 2008-06-27 2009-12-31 Microsoft Corporation Generalized expression trees
US9170787B2 (en) 2008-06-27 2015-10-27 Microsoft Technology Licensing, Llc Componentization of compiler functionality
US20100088686A1 (en) 2008-10-06 2010-04-08 Microsoft Corporation Programming language with extensible syntax
JP2010108258A (ja) 2008-10-30 2010-05-13 Panasonic Corp コンパイル方法及びコンパイルプログラム
US8397222B2 (en) 2008-12-05 2013-03-12 Peter D. Warren Any-to-any system for doing computing
US8266604B2 (en) 2009-01-26 2012-09-11 Microsoft Corporation Transactional memory compatibility management
US9201701B2 (en) * 2010-07-16 2015-12-01 Nokia Technologies Oy Method and apparatus for distributing computation closures
US9177017B2 (en) 2010-09-27 2015-11-03 Microsoft Technology Licensing, Llc Query constraint encoding with type-based state machine
US9542168B2 (en) 2011-11-10 2017-01-10 Microsoft Technology Licensing Llc Hostable compiler utilizing type information from a host application
US8990070B2 (en) 2011-11-18 2015-03-24 International Business Machines Corporation Computer-based construction of arbitrarily complex formal grammar expressions
US8997070B2 (en) 2011-12-15 2015-03-31 Sap Se Extension mechanism for scripting language compiler
US9524323B2 (en) * 2012-09-05 2016-12-20 Microsoft Technology Licensing, Llc Delegation of expression tree evaluation
EP2915044B1 (en) 2012-11-05 2023-06-07 Sea Street Technologies Inc. System and method for provisioning and managing an elastic computing infrastructure
US9332083B2 (en) 2012-11-21 2016-05-03 International Business Machines Corporation High performance, distributed, shared, data grid for distributed Java virtual machine runtime artifacts
US9785456B2 (en) 2014-04-22 2017-10-10 Oracle International Corporation Metadata-driven dynamic specialization
JP6621470B2 (ja) * 2014-09-25 2019-12-18 オラクル・インターナショナル・コーポレイション 分散コンピューティング環境において実行可能コードの動的配置をサポートするシステムおよび方法
US9411618B2 (en) 2014-11-21 2016-08-09 Red Hat, Inc. Metadata-based class loading using a content repository
US10129361B2 (en) * 2015-07-01 2018-11-13 Oracle International Corporation System and method for multi-version remote function execution control in a distributed computing environment

Also Published As

Publication number Publication date
EP3198424A1 (en) 2017-08-02
CN107077358B (zh) 2020-08-25
US10095508B2 (en) 2018-10-09
JP2017528847A (ja) 2017-09-28
US20160092205A1 (en) 2016-03-31
EP3198424B1 (en) 2021-11-17
WO2016049379A1 (en) 2016-03-31
CN107077358A (zh) 2017-08-18

Similar Documents

Publication Publication Date Title
JP6621470B2 (ja) 分散コンピューティング環境において実行可能コードの動的配置をサポートするシステムおよび方法
US11888599B2 (en) Scalable leadership election in a multi-processing computing environment
US10129361B2 (en) System and method for multi-version remote function execution control in a distributed computing environment
US10817478B2 (en) System and method for supporting persistent store versioning and integrity in a distributed data grid
JP6613305B2 (ja) 分散データグリッド内でスレッドプールの動的サイズ変更をサポートするためのシステムおよび方法
US10664495B2 (en) System and method for supporting data grid snapshot and federation
US6192514B1 (en) Multicomputer system
JP6549704B2 (ja) 分散コンピューティング環境内でゼロコピー2進基数木をサポートするためのシステムおよび方法
US10585599B2 (en) System and method for distributed persistent store archival and retrieval in a distributed computing environment
US11550820B2 (en) System and method for partition-scoped snapshot creation in a distributed data computing environment
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
US20020016863A1 (en) Multicomputer system
US10798146B2 (en) System and method for universal timeout in a distributed computing environment
Palanciuc DOORS: Distributed object oriented runtime system (position paper)
Raicevic DPR Cluster: An Automated Framework for Deploying Resilient Stateful Cloud Microservices
CN117063159A (zh) 全球规模人工智能基础设施服务的人工智能工作负载迁移
Wei Corfu: A Platform for Scalable Consistency
Ehsan ul Haque Persistence and Node FailureRecovery in Strongly Consistent Key-Value Datastore
Alvaro et al. BoomFS: A declarative approach to building distributed file systems
Xia ConCORD: Tracking and Exploiting Cross-Node Memory Content Redundancy in Large-Scale Parallel Systems
dos Santos Almeida Geo-Replication in Large Scale Cloud Computing Applications
It et al. Electrical Engineering and Computer Science Department
Schöttner et al. Checkpointing in distributed heterogeneous environments

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180629

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180629

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190628

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190709

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: 20191023

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20191119

R150 Certificate of patent or registration of utility model

Ref document number: 6621470

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250