JP6190389B2 - 分散型計算環境において計算を実行する方法およびシステム - Google Patents

分散型計算環境において計算を実行する方法およびシステム Download PDF

Info

Publication number
JP6190389B2
JP6190389B2 JP2014555730A JP2014555730A JP6190389B2 JP 6190389 B2 JP6190389 B2 JP 6190389B2 JP 2014555730 A JP2014555730 A JP 2014555730A JP 2014555730 A JP2014555730 A JP 2014555730A JP 6190389 B2 JP6190389 B2 JP 6190389B2
Authority
JP
Japan
Prior art keywords
partition
server
master
dictator
master role
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
JP2014555730A
Other languages
English (en)
Other versions
JP2015510187A (ja
JP2015510187A5 (ja
Inventor
ワーン,ジュイ
カルダー,ブラッドリー・ジーン
スキョルスヴォルド,アリルド・イー
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.)
Microsoft Corp
Original Assignee
Microsoft 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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2015510187A publication Critical patent/JP2015510187A/ja
Publication of JP2015510187A5 publication Critical patent/JP2015510187A5/ja
Application granted granted Critical
Publication of JP6190389B2 publication Critical patent/JP6190389B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/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
    • AHUMAN NECESSITIES
    • A01AGRICULTURE; FORESTRY; ANIMAL HUSBANDRY; HUNTING; TRAPPING; FISHING
    • A01CPLANTING; SOWING; FERTILISING
    • A01C5/00Making or covering furrows or holes for sowing, planting or manuring
    • A01C5/04Machines for making or covering holes for sowing or planting
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • 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
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Soil Sciences (AREA)
  • Environmental Sciences (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Hardware Redundancy (AREA)

Description

[0001] クラウド計算環境は、対応するインフラストラクチャーにユーザーが投資する必要なく、大量の計算リソースにアクセスすることを許す発展性(potential)を提供する。代わりに、計算環境は、クラウド計算プロバイダーによってサービスとして提供することができる。これによって、ユーザーが要求する計算リソースを計算ジョブのサイズおよび重要性に一致するように調整することが可能になる。しかしながら、サービスとして利用可能な追加の計算リソースを最大限利用するには、計算タスクをもっと小さい部分に分割し、タスクを実行するために複数の物理的または仮想的プロセッサーを使用することができるようにする必要がある場合もある。
[0002] 種々の実施形態において、スケーラブルな環境においてアプリケーション定義ジョブを区分するための一般的なフレームワークを可能にするシステムおよび方法を提供する。この一般的なフレームワークは、ジョブのパーティショニングを、そのジョブの他の側面(aspects)から切り離す。その結果、アプリケーション定義ジョブを定めるために必要とされる労力が減少されるかまたは最小限とされる。これは、ユーザーがパーティショニング・アルゴリズムを提供することを要求されないからである。また、一般的なフレームワークは、分散型環境内において計算を実行するマスターおよびサーバーの管理も容易にする。
[0003] この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で紹介するために設けられている。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を判断するときに補助として、単独で使用されることを意図するのでもない。
[0004] 本発明について、添付図面を参照しながら以下に詳しく説明する。
図1は、本発明の形態による分散型計算環境の一例の種々の形態を模式的に示す。 図2は、本発明の形態による分散型計算環境の一例の種々の形態を模式的に示す。 図3は、本発明の形態による分散型計算環境の一例の種々の形態を模式的に示す。 図4は、本発明の形態にしたがって、包括パーティショニング環境においてジョブを実行するための種々のインターフェース間における相互作用を模式的に示す。 図5は、本発明の形態による包括パーティショニング環境の一例を示す。 図6は、本発明の形態にしたがって、アクティブなマスター・ロール(master role)間でバックアップ・マシンを供給する例を示す。 図7は、本発明の実施形態を実現するときの使用に適した計算環境例のブロック図である。 図8は、本発明の形態にしたがって、マスター・ロールにバックアップ・マシンを供給する他の例を示す。 図9は、本発明の種々の実施形態による方法の例を示す。 図10は、本発明の種々の実施形態による方法の例を示す。 図11は、本発明の形態にしたがって、フォールト・ドメイン(fault domain)およびアップグレード・ドメインに関するマスター・ロールにバックアップ・マシンを供給する形態例を示す。
全体像
[0013] ネットワークを介するデーター送信の高速化、および他のネットワーク機構の改善のために、計算リソースが大きなネットワークを介して分散される環境において、大規模な計算タスクを実行することが増々可能になりつつある。第1位置におけるユーザーが、ジョブまたは計算タスクを計算サービスに提出し、このユーザーが直接的には知らないコンピューターのグループにおいてこのタスクを実行させることができる。ユーザーのタスクを実行する計算リソースは、複数の位置にわたって分散されてもよい。1つ以上の位置に配置された第1グループの計算リソースが、ユーザーの計算タスクを実行するために、データーおよび他の情報を格納することができ、一方第2グループの計算リソースは、同じ位置にあることも1組の1つ以上の異なる位置にあることも可能であり、この計算タスクを実行するために使用することができる。
[0014] 種々の分散型計算リソースへのアクセスは、計算リソースがどこに配置されているかユーザーが心配することなく、ジョブ・タスクを実行することを可能にする。また、分散型リソースは、ユーザーが、計算タスクを指定された時刻までに完了させるというような、計算タスクに対する目標を満たすために、使用されるリソースの量を増大(または縮小)する機会を与える。しかしながら、分散型計算リソースを使用すると、ユーザーには複数の課題が生ずる。従来より、ユーザーまたはアプリケーション設計者は、特定の分散型計算環境をどのように利用するか決定するために、アプリケーションまたはジョブの設計からリソースを転用する(divert)必要があった。
[0015] 種々の実施形態において、クラウド計算環境のような分散型環境においてスケーラブルなアプリケーションを構築するための包括フレームワークを可能にするシステムおよび方法を提供する。この包括フレームワークは、ジョブまたは作業項目のパーティショニング(partitioning)を、そのジョブまたは作業項目に関連する計算の実行から切断することを可能にする。これによって、分散型環境の所有者は、理解し易いやり方または簡略化されたやり方でリソースをユーザーに提供しつつ、分散型リソースに対して高い可用性を提供することが可能になる。この包括フレームワークは、スケーラビリティ、フォールト・トレランス、および/または可用性というような機構を扱うためのフレームワークを提供することによって、分散型環境のためのアプリケーション設計の複雑さを低減しつつ、これらの機構に取り組むために要する労力量を低減または最少にする。その結果、このフレームワークは、アプリケーション設計者に、分散型環境の要件に対して余分な時間を費やす代わりに、アプリケーションに集中させることができる。
定義
[0016] 「キー」は、包括パーティショニング・フレームワークにおいて使用される基本概念の1つである。キーとは、名称空間(namespace)またはドメインからの値である。名称空間の一例は、クラウド計算環境における全ての記憶アカウントに対応する識別子である。このような例では、キーはアカウント名、アカウント番号、または特定のアカウントを参照することを可能にする他の識別子に対応することができる。名称空間の他の例は、ジョブの入力パラメータに可能な英数字値の範囲である。好ましくは、名称空間にわたるキーは、キーが連続値の範囲として記述できるように、何らかの編成方法も有する。例えば、キーは、数字で、アルファベットで、ハッシュ値に基づいて、または範囲開始および範囲終了として2つのキーを指定することに基づいて、きーの範囲を定めることを可能にする任意の他の便利な連続的なやり方で編成することができる。
[0017] 「パーティション」とは、低(含む)および高(除外する)キーによって定められる範囲である。パーティションは決して空の範囲になることはできない。望ましければ、1つのパーティションがドメインの範囲全体を含むのでもよい。パーティションは、2つの異なるパーティションの範囲間に重複がないように、互いに排他的に定められる。全てのパーティションの連合は、ドメインまたは名称空間全体にわたる。
[0018] 「パーティション・サーバー」とは、クラウド計算環境内部において、0個以上のパーティションにサーブするロール・インスタンス(role instance)に対応する仮想マシンである。パーティションは、同時に1つよりも多いパーティション・サーバーによってサーブされない。しかしながら、所与のパーティション・サーバーが、そのパーティション・サーバーによって現在サーブされているパーティションを全く有さない場合もある。パーティション・サーバーは、種々のアクションを実行するために、アプリケーション定義インターフェース(application-defined interface)および固定インターフェース(パーティショニング・システムによって定められる)の双方を含むことができる。
[0019] 「パーティション・マスター」とは、パーティションをパーティション・サーバーに割り当てるまたは割り当てを解除することによってというようにして、所与のタイプのロールのためにパーティション・サーバーを管理するロールである。また、パーティション・マスター・ロールは、パーティション・サーバーが割り当てられたパーティションにまだサーブしていることを検証することによってというようにして、パーティション・サーバーを監視する。通例、このロールはフォールト・トレランスに対して冗長である。パーティション・マスターは、種々のアクションを実行するために、アプリケーション定義インターフェースおよび固定インターフェース(パーティショニング・システムによって定められる)の双方を含むことができる。
[0020] 「アプリケーション定義インターフェース」とは、ロール・インスタンスによる実行(performance)のために、クライアントによって定められる計算、動作、または他の機能を指す。アプリケーション定義インターフェースは、パーティション・マスターまたはパーティション・サーバー・ロールのいずれかのために作ることができる。アプリケーション定義インターフェースは、パーティショニング・システムに対する「固定インターフェース」とは対照的である。固定インターフェースは、パーティショニング・システムの一部として提供されるアプリケーション・インターフェースを指す。クライアントは、固定インターフェースのアクションを変更することができない。しかしながら、アプリケーション定義インターフェースは、固定インターフェースと共に使用することができる。例えば、マスター・ロールのための固定インターフェースは、マスター・ロールによって管理される任意のサーバーのステータスを検証するために、ある時間期間毎にハートビート・メッセージを送ることができる。サービス・ロールのための対応する固定インターフェースは、しかるべきやり方でハートビート・メッセージを受信するインターフェースとすることができる。アプリケーション定義インターフェースの一例は、追加情報をハートビート・メッセージに追加するインターフェースとすることができ、一方他の例は、このような追加情報をハートビート・メッセージから抽出するインターフェースとすることができる。この状況において、ハートビート・メッセージ自体の送出は、固定インターフェースである。ユーザーまたはアプリケーションは、メッセージを送るためのプロトコルを変更することはできない。しかしながら、メッセージ・コンテンツを定めるためのインターフェースは、ユーザーによって変更することができる。ハートビート・メッセージにおいて情報を補足するためのインターフェースの基本構造は、システムによって提供されてもよい。しかしながら、クライアントはこのインターフェースによって供給されるコンテンツを変更することができるので、このようなインターフェースは、本明細書では、アプリケーション定義インターフェースとして定められる。
[0021] 他の例として、アプリケーション定義インターフェースは、負荷均衡化の機構全体を提供するために、固定インターフェースと共に使用することができる。パーティションをパーティション・サーバーに割り当てるまたはパーティションを2つのパーティションに分割するためのインターフェースは、固定インターフェースである。しかしながら、アプリケーション定義インターフェースは、マシン間におけるパーティション割り当てを変更する、またはいつパーティションを分割するか決定するというような、いつ負荷均衡化アクションを行うべきかについての表現を供給することができる。
[0022] アクティブなパーティション・マスター・ロールまたはパーティション・サーバー・ロールは、各々、そのロールに対応するデーターを制御する、対応する記憶オブジェクトを有する。記憶オブジェクトの一例は、バイナリー・ラージ・オブジェクト(binary large object)、即ち、ブロブ(blob)である。パーティション・サーバーについては、記憶オブジェクトは、サーブされるパーティションの識別を含む。尚、パーティション・サーバーの記憶オブジェクトは、通例、そのパーティションに対応する基礎データーを含まないことを記しておく。パーティション識別だけを記憶し、基礎データーを別のデーター記憶位置に残しておくことによって、パーティションを1つのサーバーから他のサーバーへ、最少のデーター移転で動かすことができる。パーティション・マスターについては、記憶オブジェクトは、パーティション・マスターの特定のインスタンスがアクティブ・インスタンスであることを成立させるための情報を含む。任意に、記憶オブジェクトは、マスターによって管理されるサーバーの全ての記憶オブジェクトに関する情報も含むことができる。動作の間、マスター・ロールおよびサーバー・ロールは、対応する記憶オブジェクトにリース(lease)を維持することができる。あるロールの記憶オブジェクトにおけるリースが中断される(break)と、対応するロールを終了することができる。
[0023] 以上で記したように、所与のタイプのロールに対するパーティション・マスターは、障害が発生した場合に少なくとも1つの余分なパーティション・マスターが入手可能になるように、冗長であることが好ましい。「ディクテーター」(dictator)は、所与のタイプのロールに対してパーティション・マスター機能を現在実行するパーティション・マスターとして定められる。ディクテーターは、所与のパーティション・マスター・ロールに関連する記憶オブジェクトに対するリースを維持するパーティション・マスターである。
[0024] アクティブ・パーティション・マスター(ディクテーター)は、ハートビートを介してパーティション・サーバーと通信することができる。基本的ハートビートは、「キープアライブ」タイプであり、常に使用される。先に記したように、アプリケーション定義インターフェースは、任意のコマンドおよび/または情報をこのハートビート・メッセージに追加するために使用することができる。
[0025] 種々の実施形態において、ユーザーまたはアプリケーションが、分散型計算環境における処理のために自動的にパーティショニングされる計算を定めることができるように、包括パーティショニング・フレームワークが設けられる。包括パーティショニング・フレームワークを利用するために、ユーザーは名称空間に基づいて計算を定めることができる。名称空間は、その名称空間に関連するデーターに対して任意に実行される1つ以上の計算(computation or calculation)に対応する。ユーザー定義名称空間は、以下で説明するように、ある種のプロパティを有することができる。名称空間が必要なプロパティを有する限り、包括パーティショニング・フレームワークは、アプリケーション定義インターフェースに基づいて、名称空間を自動的にパーティショニングすることができる。このパーティショニングは、パーティショニング・システムと共に提供されるユーザー定義名称空間および固定インターフェースだけを使用して行われる。包括パーティショニング・システムの固定インターフェースだけを使用して名称空間をパーティショニングすることによって、パーティショニングは、ユーザーによって提供されるいずれのアプリケーション定義インターフェースからも切断され、更に実行される計算(1つまたは複数)の特性(nature)からも切断される。
[0026] ジョブの名称空間またはドメインは、計算によって処理されるおよび/または生成されるあるタイプのデーターの全範囲に対する1組の識別子に対応することができる。加えてまたは代わりに、名称空間またはドメインは、計算によって処理および/または生成することができる可能な状態のリストまたは範囲に対応することができる。更に他の選択肢は、名称空間が、分散型環境において実行される計算の複数のインスタンスに対する1組の識別子に対応できることである。計算に可能な全ての名称空間またはドメインが特定されることは必要でない。代わりに、ユーザーは、パーティショニングに使用される名称空間または状態を識別することができる。識別された名称空間またはドメインは、ユーザーが所与のロールを使用して実行することを望む計算の全体にわたらなければならない。計算によって処理されるデーター集合の全体にわたることにより、計算内部における計算のインスタンスの全体にわたることにより、または任意の他の便利なやり方で、計算の全体にわたることができる。キーは、名称空間内部で離散値または状態を指定するために使用することができる。また、キーは、値の範囲を指定するために使用することもできる。キーは範囲を指定するために使用することができるので、上位キーおよび下位キーを指定すると、範囲が一意に識別されるように、名称空間はあるタイプの連続順序を含むことは理解されよう。この順序は、アルファベットに基づく順序というような、従来の順序に基づくことができる。あるいは、この順序は、名称空間内における値のリストを含むファイルに基づく連続順序というように、任意であることもできる。
[0027] 名称空間を定めることに加えて(その名称空間を使用して実行される任意の計算を含む)、ユーザーは、サーバー・ロールに関連する1つ以上のアプリケーション定義インターフェースを提供することができる。アプリケーション定義インターフェースは、パーティション・サーバーが実行することができる1つ以上のタスクまたは機能を表し、そのタスクまたは機能は任意に1つ以上の名称空間を伴う。サーバー・ロールのためのアプリケーション定義インターフェースは、異なるサーバー・ロールが同じデーターまたは状態にアクセスしようとしないように、所与の名称空間において実行される全てのタスクまたは機能を含むことができる。任意に、形態の一例では、ロール内部における一部のアプリケーション定義インターフェースが、同じロール内部における他のアプリケーション定義インターフェースとは異なる名称空間において動作するように、サーバー・ロールがサブロールも含んでもよいことが考えられる。単純な例では、クライアントが、データー集合に対して少なくとも1タイプの計算を実行することを伴う計算を実行することを望むのでもよい。この状況では、クライアントが、データー集合から要求されたエレメント(1つまたは複数)に対して少なくとも1タイプの計算を実行するサーバーの1つのロールを定めることもできる。この1つのロールは、科学計算、データー集合に対する1つ以上の関連データー・マイニング機能、または任意の他の便利な計算を実行するように構成されたロール・インスタンスに対応する1つ以上のサーバーを表すことができる。計算および任意の関連データーは、計算を実行するための名称空間の定義の一部として定めることができる。加えて、計算に関するメトリックをマスター・ロール・インスタンスに提供するためのアプリケーション定義インターフェースというような、1つ以上のアプリケーション定義インターフェースをサーバー・ロールに提供することもできる。サーバー・ロール・インスタンスは、サーバーに渡されたキー値に基づいて、作業すべきデーター集合の1つまたは複数のエレメントを決定することができる。少なくとも1つの追加のマスター・ロールが、サーバーを管理することができ、データー集合パーティションを1つ以上のサーバーに割り当てることを含む。
[0028] 名称空間に基づいて、複数のパーティション・サーバーがその名称空間のための処理の異なる部分を扱うまたは処理するように、計算をパーティショニングすることができる。各パーティションはある範囲のキー値に対応する。パーティションがパーティション・サーバーに割り当てられると、このサーバーは、割り当てられたパーティションに対応する範囲内のキー値を含む任意の要求に対して所望の計算を実行する。サーバーに割り当てられたパーティションは、名称空間の連続順序(serial ordering)に対して、連続(consecutive)である必要はない。
[0029] 包括パーティショニング環境では、パーティションのパーティション・サーバーに対する現在の割り当てを追跡するために、パーティション表を使用することができる。アクティブなマスター即ちディクテーターがパーティションをサーバーに割り当てるとき、最初にこの割り当てを反映するためにパーティション表を更新することができる。次いで、クライアント要求において指定されたキーに基づいてクライアント要求を扱うパーティション・サーバーを決定するために、パーティション表を使用することができる。任意に、パーティショニングされる名称空間毎に異なるパーティション表を有するのではなく、複数のロールに対するパーティション割り当てを追跡するために、1つのパーティション表を使用することができる。一例として、パーティション表におけるエントリーが、ある範囲に対する低キー、その範囲に対する高キー、および要求されたキーに対応するデーターまたは状態に対して要求されたタスクを実行するロール・インスタンスまたはサーバー・インスタンスを含むことができる。また、パーティション表は、以下で更に詳しく説明するように、エポック番号(epoch number)またはバージョン番号というような、他のデーターを含むこともできる。
マスターおよびサーバー・ロール・インスタンスの管理
[0030] ジョブを実行するとき、冗長性を設けるために数個のマスター・ロール・インスタンスを有することが望ましい場合が多い。しかしながら、衝突を避けるために、所与の時点では1つのマスター・ロールだけがアクティブ・マスターになることができる。複数のマスター・ロール・インスタンスが存在する場合、これらのマスター・ロール・インスタンスは、名称空間全体に対応する記憶オブジェクトにおいてリースを求めて競合する。リースが付与されたマスター・ロール・インスタンスが、アクティブ・マスター即ちディクテーターになる。加えて、マスター・エポック番号が、そのマスター・ロール・インスタンスの記憶オブジェクトに格納される。マスターがディクテーターになるとき、この番号を増分し、それをマスター・ロール記憶オブジェクトに書き戻し、その後このエポック番号を使用して、対応するパーティション・サーバーと通信する。また、アクティブ・マスター・インスタンス即ちディクテーターは、パーティション表またはパーティション表の少なくとも一部においてリースを得ることもできる。パーティション・サーバーは、これまでに見られた最高のエポックよりも低いマスター・エポックのハートビートを無視し、こうしてもはやディクテーターではないマスター・ロールからの古いハートビートを避ける。
[0031] 1つの選択肢は、記憶オブジェクト・リースによって支配権(dictatorship)を実施する(implement)ために別の支配権ライブラリーを使用することである。別の支配権ライブラリーを有すると、パーティショニング・システムの外部にあるロールに冗長性を実現させるというような、様々な利点を得ることができる。これによって、パーティショニングに関与しないロールが、アクティブなマスター・ロールを選択するために同じ方法を使用することが可能になる。
[0032] 各サーバーはそれ自体の記憶オブジェクトにリースを維持する。サーバー記憶オブジェクト名が、サーバーがその第1パーティション割り当てを受ける毎に、マスターによって生成される。また、各サーバーは、その現在のパーティション割り当て(エポック番号を含むパーティションのリスト)を記憶オブジェクトに格納する。サード・パーティが、サーバーとその記憶オブジェクトとの間のリースを強制的に終了させることができる。この機能は、パーティション・マスター・ディクテーターによって、パーティション割り当てプロトコルにおいてサーバー・リースを中断するために使用することができる。
[0033] マスター・ロールの冗長インスタンスを有することは、障害イベントが発生したときの動作改善に対処するが、冗長なインスタンスは、更新遅れ(stale update)による問題を生ずる可能性もある。更新遅れとは、新たなディクテーターが選択された後に、以前のディクテーターからのメッセージまたは命令がサーバーまたはデーター・ストアによって受信されたという状況を指す。更新遅れの問題は、外部ストアへのメッセージが遅れるまたは順番が変わる(例えば、インターネットを介して)場合、あるいはロールのフェイルオーバーのときに状態がそのストアから読み出される場合に、外部ストアに状態を維持するあらゆるロールまたはコード片(piece of code)に影響を及ぼす虞がある。
[0034] 一例として、ロールに対してパーティション表を更新している最中にフェイルオーバーしたパーティション・マスター(ディクテーター)について考える。最初に、古いマスターがパーティション表の行「X」の更新を開始する。次いで、古いマスターは作業を中止する。このマスターの冗長インスタンスが、新たなディクテーターとして選択される。この新たなアクティブ・マスターは、パーティション表の行「X」を使用して、更新し、読み出し、またそうでなければ、あるアクションを実行する。すると、古いマスターからの更新が行き渡るのは、新たなアクティブ・マスターによる行「X」に対するアクションの後になる。古いマスターからの更新がパーティション表に組み込まれると、この更新は、パーティション表を変化させるが、新たな(現在の)マスターはこの変化を知らない。このため、パーティション表に一貫性のない状態ができる可能性がある。
[0035] 以上の例における問題の1つの解決策は、古いマスターからの古い更新をどうにかして阻止することである。1つの選択肢は、パーティション・マスターに、パーティション表の部分においてリースを入手させることである。マスターのリースは、所与の名称空間に対応する表におけるパーティションの全てに対応することができる。リース範囲を指定する任意の便利な方法を使用することができる。例えば、望ましいのであれば、リースがパーティションの一部のみにわたることができ、および/または複数のパーティションにわたることもできる。新たなディクテーターが選択されても、マスターはリースを介して支配権を争い、サーバーが、古いハートビート・メッセージのような、古い更新を阻止することができるように、エポック番号が供給される。加えて、マスター・ディクテーターは、その状態を構築するときにパーティション表を読む前に、パーティション表(の関連部分)においてリースを取得することもできる。
[0036] 更に一般的には、マスターおよびサーバーの双方がリース・メカニズムを使用して、マスターまたはサーバーにデーター構造を扱うことが割り当てられるときに、ブロブ、表、および/または他のデーター構造に対するリースを取得することによって、古い更新を避けることができる。マスターまたはサーバーが、フェイルオーバーまたはマスターによる割り当て変更の明示的要求のためというように、データー構造にもはや割り当てられなくなったなら、リースは解放される。
[0037] また、古い更新は、マスターとサーバーとの間の通信に対する懸念にもなる可能性がある。古いマスターからのメッセージの処理は、例えば、マスターがディクテーターになるときにエポック番号を入手させることによって、避けることができる。エポック番号は、支配権のフェイルオーバー毎に増大する。このエポック番号は、サーバーのハートビート毎、および/またはマスターからサーバーの他のメッセージ毎に送信することができる。サーバーは、当該サーバーが見たことがある最も大きなエポック番号よりも小さなエポック番号が付いたハートビートを全て無視することができる。この高透かし(high-watermark)エポック番号は、サーバーのソフト状態に格納することができる。マスターおよびサーバーが記憶オブジェクト・リースを介してステータスを伝えている場合も、以上の方法は古いメッセージの問題を避けるのに十分であることができる。代わりに、マスターとサーバーとの間で古いメッセージを避ける他の便利な解決策を使用することもできる。
[0038] 同様のエポック番号方法は、範囲パーティション毎に、以前に割り当てられたサーバーからの古い更新を避けるために使用することができる。例えば、各パーティションは、現エポック番号を有することができ、このパーティションに変化が起こったときに、この現エポック番号がマスターによって更新される。パーティションに対する変化の例には、パーティションの新たなサーバーへの割り当て、パーティションの分割、および2つのパーティションの併合が含まれる。パーティションの新たなサーバーへの割り当ては、エポック番号を1だけ増やすことができる。パーティションの2つ以上の新たなパーティションへの分割は、各子パーティションに、親のエポック番号を1だけ増分した値を受け取らせることができる。2つのパーティションが併合されるとき、併合されたパーティションのエポック番号は、併合前のこれらのパーティションのいずれかの最大エポック番号を1だけ増やした値とすることができる。あるいは、パーティションのエポック番号の増加を追跡する任意の他の便利な方法を使用することもできる。
[0039] パーティション・エポック番号をどのように使用するとよいかについての一例として、パーティション・マスター、2つのパーティション・サーバーS1およびS2、ならびに第3サーバーXを有するシステムについて考える。第3サーバーXは、例えば、パーティション・マスターならびにサーバーS1およびS2によって処理される名称空間に対する実際のデーター集合を含むデーター・サーバーであることができる。サーバーS1およびS2はコマンド(または他のメッセージ)をXに発行する。Xのフロント・エンドによる処理のため等で、S1またはS2からXまでの途中でメッセージが遅れる可能性があると仮定する。Xが所与の範囲パーティションについて確認された最大のエポックを追跡するなら別であるが、古いメッセージがXによって受け入れられる可能性があることは、容易に理解できる。例えば、エポック3のパーティションPを最初にサーバーS1によってサーブすることができる。S1はメッセージM1をXに送ることができる。メッセージM1は、エポック番号3だけでなく、パーティションPに対応するキーも含む。次いで、パーティション・マスターがパーティションPをS1からS2に動かす。割り当ての後、S2は新たなエポック番号を含むメッセージM2をサーバーXに送る。Xは、メッセージM1を受信する前に、メッセージM2を受信する。このため、M1が古くなる。次いで、Xは古いメッセージM1を受信する。エポック番号を追跡することによって、サーバーXは、古いメッセージM1が、もはやパーティションPには責任がないサーバーからであることを認識することができる。
[0040] 更に古い更新の可能性を避けるために、エポック有効性判断ライブラリーを使用することができる。エポック有効性判断ライブラリーは、受信したメッセージが古くないことを確認することができる。例えば、サーバーが新たなディクテーターからメッセージを受信したときまたは新たなパーティション範囲に関する要求を受信したとき、サーバーはエポック有効性判断ライブラリーをチェックして、メッセージがマスターまたはパーティションに対して現在のエポック番号を含むことを検証することができる。
[0041] 図4は、ロール、パーティション、およびキー間の関係の模式例を示す。図4において、ユーザー405は、ユーザーのアカウントにおける情報にアクセスするというような、所望のデーター片に対してアクションを実行する要求を提出する。データーは、キーによって識別される。クライアント要求およびキーは、ロール420に渡される。ロール420は、クライアントまたはユーザー405によって行われるタイプの要求を扱う。ロール420は、所与のタイプの要求をロールがどのように扱うか定めるクライアント・ライブラリー430を含む。要求のタイプおよびキーに基づいて、ロール420はパーティション表455を参照して、要求におけるキーに対応するキー範囲を扱う現行のサーバーを発見する。パーティション表455における情報は、パーティション・マスター460によって行われるパーティション決定に基づいて入力される(populate)。パーティション・マスター460は、図4では、複数の可能なパーティション・マスターの内の1つとして示される。冗長性のために、追加の可能なパーティション・マスターがあるが、必要とされるまでアクティブにはならない。図4の例では、複数のパーティション・サーバー465が、ロール420に要求されるタスクを実行するためのロール・インスタンスとして利用可能である。パーティション表455に基づいて、複数のパーティション・サーバー465からのパーティション・サーバーNが、クライアント要求におけるキーに対応するキーの範囲を扱っている。
包括パーティショニング・フレームワークの例
[0042] 図5は、本発明にしたがって、包括パーティショニング・フレームワークを設けるモジュールおよび/またはインターフェースのグループの例を示す。また、図5は、包括パーティショニング環境を利用することができる計算ジョブを提供するアプリケーション定義インターフェースの例も表示する。図5では、キーまたは名称空間がユーザーまたはアプリケーションによって供給されるが、名称空間をパーティショニングするインターフェースは、パーティショニング・システムによって提供される固定インターフェースである。これは、名称空間のパーティショニングを、名称空間に対応するデーターを処理するジョブまたは作業項目を実行することから切断する。
[0043] 図5において、ユーザーによって提供または指定されたコンポーネントまたはインターフェースには少なくとも2タイプがある。ユーザーは、キー(および対応する名称空間)510に対する定義、およびアプリケーションに対する複数のサーバー・インターフェース520を提供する。先に説明したように、キーはアプリケーションの名称空間を記述する。これによって、パーティショニング・システムは、可能なパーティショニングに対する変数、状態、および/または計算の範囲を知ることができる。キーを定めることに加えて、ユーザーは、このキーに関係する少なくとも3つのインターフェースも提供する。キー510に関係するインターフェースは、名称空間においてキーを直列化する機能、キーの直列を解除する機能、および2つのキーを比較する機能を設ける。ユーザーが名称空間およびキー値を選択するので、これらのインターフェースの動作は、パーティショニング・システムによって固定インターフェースとして提供されない(offer)。キーおよび名称空間に関係するインターフェースは、代わりに、ユーザーによってアプリケーション定義インターフェースとして提供される。
[0044] また、ユーザーは、サーバー・ロール・インスタンスによって使用されるアプリケーション定義インターフェース520も提供する。サーバー・ロール・インターフェース520のためのアプリケーション定義インターフェースは、サーバーがキーに対して動作する要求を受けたときにサーバーがどの動作を実行するかについての機能を含む。例えば、StartServeKeyRangeのインターフェースは、サーバーが所与のキー範囲にサーブし始めるときにこのサーバーが実行することができる1つ以上の動作を定めることができる。対応するStopServeKeyRangeのインターフェースは、サーバーに、キー範囲のサーブを規律正しく終了させることができる。加えて、サーバーから情報を収集することが望ましい場合もある。OnReceivedHeartbeatRequestインターフェースのようなインターフェースは、サーバーがどのようにして追加情報を、現行パーティション・マスターから受信したハートビート・メッセージから抽出するかについて定めることができる。BeforeSendingHeartbeatResponseのような他のインターフェースは、サーバーが、ハートビート・メッセージに応答して、何を追加情報として含むかについて定義することができる。これによって、例えば、サーバーが負荷情報をパーティション・マスターに、負荷均衡化において使用するために、伝えることが可能になる。
[0045] ユーザーがハートビート(または他のメッセージ)交換の一部として追加機能または情報を含ませる場合、ユーザーは、マスター・ロール530にユーザー定義インターフェースを提供することもできる。マスター・ロール530のためのユーザー定義インターフェースは、GPMaster535として模式的に示される、マスター・ロールのための固定インターフェースに対する補足となる。マスター・ロール530のためのユーザー定義インターフェースは、必須ではない。
[0046] 図5に示す実施形態では、総合パーティショニング環境(general partitioning environment)は、5つのモジュールおよび/またはグループの固定パーティショニング・システム・インターフェースによって実施可能とされる(enable)。これらは、GPClientモジュール515、GPServerモジュール525、GPMasterモジュール535、GPDictatorモジュール536、およびGPLeaseモジュール545の一部として示される固定インターフェースを含む。勿論、図5に示すモジュール、インターフェース、および/または機能を構成する他の方法を使用することもできる。
[0047] 図5に示すGPClientモジュール515は、クライアント・アプリケーションまたはユーザー599によって指定されたキーから、ユーザー要求を扱うサーバーのアドレスへの変換を可能にするインターフェースを有する。GPClientモジュール515のインターフェースは、パーティション・マップまたはパーティション表559を調べることによって、この参照を実行する。GPClientモジュール・インターフェースは、次に、例えば、キーに対応するサーバー・アドレスを、クライアント・アプリケーション599に戻すことができるので、クライアント・アプリケーションは要求を正しいサーバーに導くことができる。
[0048] GPServerモジュール525は、所望のユーザー・タスクを実行するためにアプリケーション定義インターフェースと共に作業する(work)インターフェースを有する。GPServerモジュール525は、マスター・ロール・インスタンスとサーバー・ロール・インスタンスとの間における通信のためのインターフェースを含む。また、GPServerモジュール・インターフェースは、GPLeaseモジュール545のインターフェースとも通信して、各サーバー・ロール・インスタンスに関連するリース・オブジェクトおよびリース・コンテンツを管理する。
[0049] GPMasterモジュール535は、マスター・ロール・インスタンスを管理する中核機能のためにインターフェースを提供する。GPMasterモジュール535のインターフェースは、マスター・ロール・インスタンスからのディクテーターの選択、ディクテーターとサーバー・ロール・インスタンスとの間の通信(ハートビート・メッセージを介してというような)、およびパーティション管理を扱う。パーティション管理は、更新をパーティション表559に供給することを含むことができる。負荷均衡化のために、GPMasterモジュール535のインターフェースは、内部アルゴリズムを使用して負荷均衡化を実行することができ、またはGPMasterモジュールは、ユーザーによってアプリケーション定義インターフェースとして提供される代わりの負荷均衡化表現560を受けることもできる。任意に、GPMasterモジュール535によって扱われるメッセージング機能を、1つ以上の別のメッセージング・インターフェースによって実行することもできる。
[0050] GPDirectorモジュール536は、ディクテーターとしてサーブするマスター・ロール・インスタンスに関係する機能を扱うインターフェースを提供する。GPDictatorインターフェースは、マスター・ロール・インスタンスを扱い、支配権を主張し(GPMasterモジュール535によって行われる選択において支配権を勝ち取った後のような)、支配権を解放し(フェイルオーバーの後のような)、および古い更新を避けるためのシーケンスまたはエポック番号に対する変更を扱うことができる。
[0051] GPLeaseモジュール545は、包括パーティショニング環境内部でリースを管理するインターフェースを提供する。これは、関連する記憶オブジェクト、パーティション、またはリースを得ることができる任意の他のタイプのデーター構造において、マスターまたはサーバーがリースを取得することを可能にすることを含むことができる。
基本的なマスター/サーバー管理プロトコル
[0052] パーティション・マスターがパーティション・サーバーと通信できる1つの方法は、規則的に送られるキープアライブ(「ピング」)ハートビートを介してである。このハートビートは、いずれのパーティションにもサーブしないサーバーを含む、全てのサーバーに送ることができる。サーバーは、そのサーバーが現在サーブしているパーティションのリストで、このキープアライブ・ハートビート(または他のタイプのハートビート・メッセージ)に応答することができる。ハートビート応答は、サーバー・パーティション・リースと共に使用すると、サーバーが正しいパーティションにサーブしていることをマスターに検証させることができる。サーバーが1つ以上のパーティションにサーブしているとき、このサーバーも、バイナリー・オブジェクト即ちブロブというような、それ自体のプライベート記憶オブジェクトにリースを維持する。サーバーが起動するとき、いずれのリースも保持しない。そうするのは、初期のパーティション割り当てのときだけである。記憶オブジェクト・リースも、サーバーによってサーブされるパーティションのリストを含むとよい。ハートビート応答または記憶オブジェクト・リース内の情報のいずれかが、マスターによって予期されるパーティション情報と異なる場合、パーティション情報の矛盾が存在する。
[0053] サーブされるパーティションに関して、マスターとサーバーとの間で矛盾(conflict)が発生した場合、そしてサーバーが1つ以上のパーティションにサーブしようとしている場合、この矛盾は致命的なエラーと見なされる。一例として、マスターは、サーバーがP1およびP2にサーブしていると考えるが、サーバーはP2、P4、およびP5を報告するということがあり得る。この状況では、マスターは、対応するパーティション・サーバー・ブロブにおいてサーバーのリースを中断する。次いで、マスターは警告を発し、パーティション表のために適正な状態を再構築する。これは、マスターの再開時に適正な状態が再構築されるように、マスターを終了することを伴うのでもよい。
[0054] また、マスターおよびサーバーが異なり、サーバーがサーブされているパーティションがないと報告するときも矛盾となる。しかしながら、これは致命的なエラーとは見なされない。これは、例えば、サーバーが2つのハートビート間でフェイルオーバーする場合に発生する可能性があり、またはリースを「保持している」間に1つ以上のハートビート中に停止し次いで再開して次のハートビートに応答する場合にも発生する可能性がある。サーブされているパーティションがないことをサーバーが報告して矛盾が発生した場合、パーティション・マスターは、サーバーの記憶オブジェクトを削除することを試すことができる。成功した場合、いずれのパーティションも他の利用可能なサーバーに割り当てし直すことができる。しかしながら、サーバーの記憶オブジェクトにおけるリースの削除は、サーバーの直前のインスタンスのリースがまだ失効していない場合、失敗する可能性がある。このため、リース期間までの間削除を再試行する必要がある場合もある。1リース期間後に記憶オブジェクトを削除することに失敗すると、致命的なエラーとなる。これは前述のように扱うことができる。マスターが再開するとき、パーティションの割り当てに進む前に、未知の記憶オブジェクトが全て削除されたことを確認する。
[0055] 他の起こり得る障害の状況は、サーバーがリースを保持しているが、このサーバーがあるタイムアウト期間内にハートビート(「キープアライブ」のような)に応答しないときである。この場合も、マスターは、矛盾を解決するために、サーバーの記憶オブジェクトを削除しようとすることができる。記憶オブジェクトを削除することに成功した場合、サーバーはもはや機能していない。サーバーがサーブしていたいずれのパーティションも、他のサーバーに割り当てし直すことができる。記憶オブジェクトを削除することができない場合、マスターは、記憶オブジェクトのコンテンツを読み取り、マスターとサーバーとの間におけるパーティション割り当てに関する矛盾をチェックすることができる。矛盾がない場合、サーバーはサーブし続けることができ、マスターは通常のハートビート処理によって直ちにサーバーに再度「ピング」することを試すことができる。好ましくは、記憶オブジェクトにおいてサーバーのリースを中断する前に、マスターがハートビートを介してサーバーと通信できない期間に対して制限があるとよい。矛盾が検出された場合、この矛盾は、以上で説明したように扱うことができる。
[0056] パーティション割り当てについて、マスターは、関連するパーティション・サーバーへのハートビートに、パーティション割り当て要求を同乗させる(ハートビートは、この場合、加速される)。パーティション割り当て要求は、サーバーの記憶オブジェクトの名称、およびサーブされるパーティションの完全な新たなリストを含む。例えば、パーティションP2を、現在P1にサーブしているサーバーに割り当てるには、パーティション割り当てはP1およびP2双方を含む。これは、割り当て解除(unassignment)を割り当てに対して直交にする(orthogonal)。P1およびP2をサーブするサーバーからP1を外すためには、単にP2のみを含む割り当てを送る。マスターは、パーティション割り当てが行われるときには、既にパーティション表を更新している。パーティション表は、パーティションがサーバーに割り当てられるとき(前)にのみ更新され、パーティションがサーバーから外されるときは、更新は必要とされない。
[0057] パーティション・サーバーは、記憶オブジェクト・リースを維持する。記憶オブジェクト・リースは、最初のパーティションがサーバーに割り当てられるときに開始する。記憶オブジェクト・リースは、サーバーが機能停止するまで、またはパーティション表におけるサーバーについての割り当て情報とサーバーによってマスターに報告された割り当て情報との間における矛盾のためというように、マスターがリースを強制的に中断させるまで維持される。記憶オブジェクト名称は、パーティション割り当てと共に渡される。後続の全てのパーティション割り当ては、同じ記憶オブジェクト名称を含むことになる。サーバーがパーティション割り当てを受けると、既存の記憶オブジェクト名称がないサーバーは、パーティション割り当てにおいて供給される記憶オブジェクト名称を取得する。サーバーが既に名称のある記憶オブジェクトを有する場合、このサーバーは要求において供給された名称を既存の名称と比較することができる。これらの名称が異なる場合、サーバーは警告を発し、終了することができる。これは、異なる名称がパーティション割り当て情報における矛盾を示すからである。パーティション割り当てを受けた後、サーバーは、任意の関連情報を、サーバーの記憶オブジェクトに書き込むことができる。この関連情報は、たとえば、サーブするキー範囲、ディクテーターに対するエポック番号、および/またはパーティションに対するエポック番号を含むことができる。次いで、サーバーは、パーティション割り当てを供給したマスターに応答し、任意の新たなパーティションにサーブし始め、外されたあらゆるパーティションにサーブするのを停止することができる。
[0058] パーティション割り当ての後、マスター・ロール・インスタンスは、割り当てを確認したサーバーからの応答を待つ。応答が割り当てと一致しない場合、または応答が遅れた場合、マスター・ロール・インスタンスはサーバーのリースを終了することができる。あるいは、マスター・ロール・インスタンスはサーバー・ステータスを判定するために、サーバーのブロブを調べることができる。例えば、サーバーの記憶オブジェクトが、割り当てが成功したことを示し、応答が不正確なのではなく、単に遅れたまたは失われただけの場合、マスター・ロール・インスタンスは待機して、サーバーが後続のハートビートまたは他のメッセージに正しく応答するか否か確認することができる。エラーが発見され、マスターがサーバーの記憶オブジェクト・リースを中断することができない場合、マスターは、新たなマスター・ロール・インスタンスによるパーティション・マップの再生を強制するために終了することができる。
[0059] 加えて、サーバー・ロール・インスタンスは、それがサーブしている範囲(即ち、パーティション)毎に統計を提供することができる。この統計は、総合パーティショニング・システムには不透明であり、名称/値対のプロパティ・バグとして表すことができる。これらの任意の統計は、ユーザーによって供給される負荷均衡化式を含む、負荷均衡化式に組み込むことができる。
[0060] マスターがアクティブ・マスター即ちディクテーターになったとき、最初に、リースを保持している記憶オブジェクトから新たなエポック番号を得る。次いで、そのシステムのビューを構築するために、そして一貫性がないあらゆる情報を訂正するために、3つの情報を収集する。最初に、マスターはパーティション表を読み取る。パーティション表は、どのパーティションが存在するかについての真理(truth)を含む。好ましくは、マスターは、以前のマスターによる古い書き込みを防止するために、パーティション表を読み取る前に、パーティション表の少なくとも関連部分においてリースを得るとよい。次に、マスターは、全ての既存のサーバー記憶オブジェクトのリストを得る。これは、サーバー記憶オブジェクトのリストを維持することによって、全てのサーバー記憶オブジェクトを指定位置に配置することを要求することによって、または他の便利な方法によって行うことができる。また、サーバーの現在のパーティション割り当てに関して各サーバーに問い合わせるために、ハートビートまたは他のタイプのメッセージが使用される。この問い合わせは、サーバーの記憶オブジェクトの名称を求める問い合わせを含むことができる。尚、以上のタスクは並列に進めることができることを記しておく。
[0061] 収集した情報に基づいて、マスターはパーティション表における割り当てと各サーバーによって報告された割り当てとの間においてあらゆる不一貫性を識別することができる。不一致がある場合、サーバー・オブジェクトにおけるサーバーのリースを中断しマスターを再開するというような、1つ以上の補正アクションを行うことができる。加えて、パーティション表において述べられていないサーバー記憶オブジェクトが識別された場合、これらの記憶オブジェクトをいずれも削除することができる。最後に、サーバーによって確認されていないパーティション表におけるいずれの割り当ても、新たなパーティション・サーバーへの割り当てのために、待ち行列に入れることができる。矛盾を解決した後、マスターは正常のハートビート処理、パーティションの割り当て、および任意の他のマスター機能を開始することができる。
負荷均衡化
[0062] 負荷均衡化は、大まかに3つのアクティビティに分割することができる。負荷均衡化は、パーティションをサーバー間で動かし、1つのパーティションを複数のパーティションに分割し、または複数のパーティションを1つのパーティションに併合することを含むことができる。通例、パーティションの割り当てを第1サーバーから第2サーバーに変更するのは、1つ以上のメトリックに基づいて、第1サーバーが十分な高負荷を有することに応答して行われる。1つのパーティションが大量の負荷を占める(account for)場合、このパーティションの分割を使用して、大きな負荷を複数のサーバー間で分割させることができる。パーティションの併合によって、アクティビティ量が低い方のパーティションを組み合わせることができる。これによって、データー集合のために種々のパーティションを追跡し維持するために必要なオーバーヘッドを低減する。任意に、ユーザーは名称空間に対してパーティション数に上限を定めることができる。パーティションの併合を開始するための閾値は、パーティションの数が上限に近づくに連れて、下げることができる。パーティション数の上限は動的に構成することができる。
[0063] パーティションをいつ分割するかまたは動かすか決定する一例として、名称空間の全てのパーティションを、負荷に基づいて、ソートすることができる。負荷は、パーティションに対する計算を実行することに関係する1つ以上のメトリックを指すことができる。つまり、負荷は、サーバーまたは個々のパーティションに対する全体的なCPU使用量、サーバーまたはパーティションに使用されたストレージ、サーバー全体または1つのパーティションによって受け取られた要求の数、あるいはサーバーによっておよび/または所与のパーティションに対して実行された作業量を示す任意の他の便利な値を指すことができる。負荷に基づいて、平均パーティション負荷の構成可能な倍数よりも大きな負荷を有する上位N個のパーティションを分割することができる。Nは、動的に構成可能である。例えば、これは、現在のパーティション数の対数に基づくというような、システムにおける現在のパーティション数の関数とすることができ、またはこれはシステムにおける最大許容パーティション数の関数とすることもできる。加えてまたは代わりに、各サーバーの負荷が、サーバーのパーティションの負荷を合算することによって、計算される。次いで、サーバーを負荷でソートすることができ、平均の何らかの構成可能な倍数よりも大きな負荷を有する上位N個のサーバーが、サーバー間におけるパーティションの移動のために選択される。同様に、平均負荷よりも少ない負荷を有する複数のサーバーが、それよりも負荷が高いサーバーからのパーティションを受けるために選択される。好ましくは、第1サーバーから第2サーバーへのパーティションの移動は、第1サーバーの負荷を平均負荷に近い値まで減少させるが、第1サーバーの負荷が平均負荷未満にならないように実行される。全てのパーティションがほぼ同様の負荷を有する場合には、これを行いやすくなる。以上で説明したパーティションの分割は、パーティション間における負荷の不均衡を減らすために使用することができる。
[0064] 先に記したように、パーティションに対する負荷は、サーバー・ロール・インスタンスによって収集される統計から導くことができる。この情報は、規則的な間隔のハートビート・メッセージを介してというようにして、マスター・ロール・インスタンスに渡される。好ましくは、負荷統計は、負荷メトリックが加算的になるように定められる。これによって、サーバーに対する負荷が、そのサーバーにおける個々のパーティションに対する負荷を合計することに基づいて決定することが可能になる。パーティションおよび/またはサーバーに対する負荷を決定するための1つ以上の式を、別のブロブまたは他の記憶エリアに格納することができる。パーティショニングについての規則または表現は、包括パーティショニング環境によって供給されるデフォルト規則とすることができ、あるいはユーザーが規則および/または表現を供給することができる。
[0065] ユーザーによって供給される負荷均衡化規則および/または表現について、ユーザーは、最初に、負荷均衡化メトリクスとして望まれる1つ以上のメトリクスを識別することができる。適したメトリックの例には、CPU使用量、ネットワーク帯域幅使用量、単位時間期間に処理される要求の数、または任意の他の便利なメトリックが含まれる。一部のメトリックは、パーティションに特定であってもよく、一方他のメトリックはパーティション・サーバーにおける全てのパーティションに対してある値に対応するのでもよい。所望のメトリックに基づいて、ユーザーは、次に、各サーバーにおいて所望のメトリックを収集するために1つ以上のインターフェースを提供する。任意に、CPU使用量または単位時間期間毎の要求数というような共通メトリックを、ユーザーによって簡単にアクセスされる標準的インターフェースとして供給することができる。収集されたメトリックは、次に、パーティション・サーバーから対応するマスターに、サーバーによって使用されるハートビート・メッセージのようなメッセージを使用して、サーバーのマスターとの現在のステータスを検証するために渡される。
[0066] ユーザーによって識別されたメトリック毎に、総合パーティショニング・システムによって認識された一連の値を計算することができる。一例として、総合パーティショニング・システムは「ディメンション」(dimension)を、ユーザーによって定義された変数として認識することができる。総合パーティショニング・システムにおけるディメンションは、予期されるフォーマット(expected format)を有することができる。ディメンションは、パーティションにわたるメトリックの値に対応するパーティション・メトリックのための表現を含むことができる。他の表現は、サーバー・メトリックのためであることができ、これはサーバーにおける全てのパーティションにわたるメトリックの値に対応する。更に他の表現は、メトリックに対する条件値のためであることができ、これはアクションが行われる状況を定める。
[0067] 単純な状況では、CPU使用量をディメンションとしてユーザーによって定めることができる。この例では、CPU使用量ディメンションは、サーバーが十分に忙しいのでパーティションを他のサーバーに動かすべきときを判定するために使用される。ユーザーによって定められるディメンションでは、所与のパーティションを求める要求を処理する専用の仮想マシンにおけるCPU使用率が、パーティション・メトリックとして定められる。この仮想マシンにおける全てのパーティションにわたるCPU使用率の和を、サーバー・メトリックとして定めることができる。この例では、条件は、全CPU使用量の80%よりも大きいサーバー・メトリック使用量として定めることができる。この条件が発生したとき、パーティションを他のサーバーに動かすことができる。動かすパーティションは、パーティション・メトリックに基づいて選択される。尚、パーティション・メトリックおよびサーバー・メトリックは双方ともユーザーによって定められることを記しておく。つまり、ユーザーは、サーバー・メトリックに類似するパーティション・メトリックを有する必要はない。例えば、サーバー・メトリックは、CPU使用量およびネットワーク帯域幅使用量の組み合わせであることができるが、パーティション・メトリックは単に要求率(request rate)に関係するに過ぎない。
[0068] パーティションの再割り当てのためにディメンションを定めることに加えて、ユーザーはパーティション分割をトリガーするためのディメンションも定めることができる。パーティション分割をトリガーするためのディメンションの定義は、パーティションの再割り当てのためのディメンションと同様とすることができ、または異なるディメンションのフォーマットを使用することができる。例えば、サーバー・メトリック表現は、パーティション分割をトリガーするためのディメンションには必要でない場合もある。何故なら、パーティション・メトリック表現の方が、パーティションを分割するときを決定するためには有用であることが期待できるからである。加えて、パーティション分割をトリガーするためのディメンションは、パーティションを分割する条件が満たされるときにどのようにパーティションを分割するかについてのディメンションも含むことができる。尚、パーティション分割をトリガーするためのディメンションは、2つのパーティションを併合するときを識別するのにも有用である場合があることを記しておく。あるいは、ユーザーがパーティション併合のために別のディメンションを定めることができる。
[0069] 更に一般的には、任意の便利な数の条件を、負荷均衡化アクションを行うべきときを決定するために指定することができる。この条件は、複数のディメンションに対応するメトリックというような、1つ以上のディメンションに対応するメトリックを組み込むことができる。負荷均衡化を実行する特定の順序で条件が評価されるように、条件を順序付けることができる。例えば、パーティション分割に関係する条件は、パーティションを異なるパーティション・サーバーに動かす条件よりも順番において前に置くことができる。このような例では、パーティション・サーバーにおける1つのパーティションが大きな割合の負荷を担当する場合、複数のサーバー間において負荷を均衡化するためには、他のパーティションを動かすことは有効ではないかもしれない。最初にパーティションを分割するか否かチェックすることによって、問題の原因となるパーティションを、(恐らくは)負荷が少ない部分に分割することができる。同様に、パーティションの併合は、条件の順序付けにおける早い時期に行うことが望ましいであろう。例えば、大きな複数(a large number of)の低負荷パーティションを有するパーティション・サーバーは、このサーバーにかかる負荷全体が平均よりも低くても、過剰な数のパーティションのために、利用可能ではないと考えられる。割り当てを動かす前にパーティションを併合することによって、このようなサーバーは、追加のパーティション割り当てを受けることが可能になる。
[0070] 負荷均衡化を開始する条件を指定するとき、任意の便利なタイプのメトリックを条件に含ませることができる。つまり、1つのパーティションにかかる負荷、複数のパーティションにかかる負荷、サーバーにかかる負荷、または複数のサーバーにかかる負荷に対するメトリックは、所望通りに、一緒に使用されても別々に使用されてもよい。複数のパーティションまたは複数のサーバーに関係するメトリックについて、単純な例は、平均負荷を定めるために、全てのサーバーにわたる負荷を判定することである。すると、負荷均衡化を実行する条件は、サーバー負荷の絶対値と平均負荷との差というような、サーバーにかかる負荷と平均サーバー負荷との間の差、またはサーバー負荷と平均サーバー負荷からの標準偏差との比較に関係付けることができる。複数のパーティション負荷を使用する場合、サーバーにおいて最も高い負荷がかかるある数のパーティションの負荷を互いに関して考慮することが望ましいこともある。所望の負荷均衡化アクションは、同様の負荷を有する複数のパーティションがあるパーティション・サーバーでは、負荷が大きい1つだけのパーティションがあるパーティション・サーバーとは異なる場合もある。
[0071] パーティションの再割り当て、分割、および併合のためにディメンションを定めることに加えて、ユーザーはディメンションに基づいてパーティションに対するアクションを制限するために1つ以上のフィルターを定めることもできる。例えば、サーバーが70%よりも高いCPU使用量サーバー・メトリックまたは10よりも大きいパーティション数のいずれかを有するとき、このパーティションが新たなパーティション割り当てを受けることを防止することが望ましい場合がある。このような割り当てを防止する割り当てフィルター値を定めることができる。可能なフィルターの他の例には、既存のパーティション・サーバーからのパーティションの移動を防止するフィルター、パーティションの分割を防止するフィルター、またはパーティションの併合を防止するフィルターが含まれる。フィルターのタイプに依存して、フィルターが、負荷均衡化アクションを行うことを防止するのでもよい。あるいは、フィルターが条件の考慮順序を変更することもでき、またはフィルターが、負荷均衡化計算サイクルの間ある条件を完全に飛ばさせることもできる。
[0072] 一例として、全てのサーバー要求が同じ量のリソースを消費する仮説的システムについて考える。このようなシステムでは、適度な負荷メトリックは要求率に基づくことができる。この例では、各サーバー・ロール・インスタンスは、長い時間期間にわたる要求率の平均(RR_SlowMA)と、短い期間にわたる要求率の平均(RR_FastMA)とを収集する。これらの要求率平均は、プロパティ・バッグにおける名称/値対としてマスター・ロール・インスタンスに返送される。次いで、パーティション・メトリック=max(RR_FastMA, RR_SlowMA)のような単純な負荷メトリックを、負荷均衡化規則において式として定めることができる。ディメンション「負荷」に対するパーティション・メトリックの左辺は、パーティショニング・システム内においてマスター・コンポーネントによって認識される識別子に対応する。この場合、ディメンション「負荷」は、ユーザーによって前もって識別される。右辺は、パーティション・メトリックに割り当てられる負荷値を生成する任意の表現(any arbitrary expression)とすることができる。この場合、負荷は、複数の移動平均の内の1つに基づく、要求数に対応する。パーティション負荷値および/または他の値に基づいて、パーティションが分割される、併合される、またはサーバー間で動かされるべきかに関して、1つ以上の条件を定めることができる。
[0073] 更に一般的には、ユーザーは、負荷均衡化判断を行うために、メトリックおよび表現(条件のような)の任意の組み合わせを定めることができる。負荷均衡化判断を行うためにユーザーによって定められる表現は、条件付きロジックおよび/または多ディメンション制約/最適化目標のためのサポートも含むことができる。つまり、ユーザーは判断ツリーを定めまたは他の条件付きロジックを使用して、いつどのように表現が評価されるかについて順序付けを行うことができる。例えば、ユーザーは、第1表現を評価させ、次いで第1表現の値に基づいて評価するために複数の可能な追加表現から選択することができる。これは、「if-then-else」タイプの条件付きロジック、決定された値に基づく次の表現に対する参照表、または任意の他の便利なタイプの条件付きロジックに基づくことができる。その結果、ユーザーは、負荷均衡化に使用するメトリックおよび表現のタイプを指定する柔軟性を有することになる。指定する柔軟性は、所与の表現が評価されるか否か、およびこのような表現を評価する順序を与えることを含む。尚、表現の評価順序は、以前に評価された表現の値に基づいて動的に決定することもできることを記しておく。
[0074] 負荷均衡化判断を行うためにユーザーによって定められる表現の他の例は、多ディメンション制約/最適化目標を含むことができる。例えば、ユーザーが複数のディメンション(例えば、2つ)を定めることができ、ディメンション毎に、ユーザーは別の最適化目標または制約を定めることができる。CPU利用度および要求レイテンシは2つのディメンション例である。ユーザーは、パーティション・サーバーのCPU使用量が第1閾値(例えば、90%)よりも低く、同時に定められた1組のパーティション・サーバー(例えば、全てのパーティション・サーバー)にわたって平均要求レイテンシを最小化するように、規則を指定することができる。この手法は、ユーザーがすべきことを正確に指定する「if-then-else」タイプの条件付きロジックとは異なってもよい。このモデルでは、ユーザーが制限および最適化目標を定め、これによってシステムは自動的に解決策を発見することができる。
[0075] 他の仮説的システムでは、ユーザーが評価に対して複数の条件または表現を提供することができる。これらの表現は、所与の名称空間にサーブするパーティション・サーバーに対する種々のCPU使用量メトリックに基づく。第1表現は、任意のパーティション・サーバーが、名称空間に関係して、60%よりも高いCPU使用量を有するか否か評価する。このユーザーについて、使用量が60%よりも高いCPUがない場合、ユーザーは負荷均衡化を望まない。つまり、第1表現の結果が偽である場合(即ち、CPU使用量が60%よりも高いパーティション・サーバーがない)、負荷均衡化は望まれないので、他の表現は評価されない。少なくとも1つのパーティション・サーバーが60%よりも高い使用量を有する場合、負荷均衡化アクションを実行することを決定するために、一連の表現を評価することができる。
[0076] 負荷均衡化の結果パーティションを動かすことになった場合、マスター・ロール・インスタンスに2つの割り当て要求を出させることによって、第1サーバーから第2サーバーにパーティションを動かすことができる。第1サーバーへの割り当て要求はこのパーティションを含まず、その結果、第1サーバーはそのパーティションに対するサービスを停止する。第2サーバーへの第2割り当て要求は、このパーティションを含む。
[0077] 1つのパーティションが2つ以上のパーティションに分割される状況では、マスター・ロール・インスタンスが分割キーを決定することによって、分割を開始することができる。分割キーは、新たなパーティションの1つに対する包含範囲(inclusive range)の終端を形成するキー値に対応する。分割キーは、任意の便利なやり方で選択することができる。マスターまたはサーバー・ロール・インスタンスは、パーティションの範囲の中間またはその付近でキー値を選択することによってというようにして、パーティションに基づいて分割キーを選択することができる。あるいは、サーバーは、パーティションに関する追加の統計に基づいて分割キーを選択することができる。例えば、パーティション全体に対する負荷を決定するのと同様なやり方でパーティションの種々の部分に対する負荷を追跡するために、サンプリング・ベースのバケット・メカニズム(bucket mechanism)を使用することもできる。次いで、負荷が新たなパーティションに割り当てられるバケットに対して同様となるように、分割キーを選択することができる。
[0078] 所与のロール内では、(アクティブな)マスターは負荷をパーティション・サーバー間で広げることを責務とする。好ましくは、マスターは、1つ以上のサーバーに過剰負荷がかかり、そのため要求を処理できなくなることを防止する。代替実施形態では、負荷の調節は、サーバー毎に1つのパーティション/範囲を維持し、これらの範囲を調節することによって行うことができる。代わりにパーティションを動かすことによって、影響を及ぼすサーバーの数を減らしつつ、負荷の調節を行うこともできる。
[0079] パーティション再割り当てによって負荷を円滑に動かせるように、サーバー当たり最小数のパーティションを有することが望ましい場合が多い。パーティションの数が最少レベルに減ったとき、その後の併合は行われない。同様に、余りに多いパーティションを有することも避けることが望ましい場合が多い。あるサーバーに対してパーティションが最大数に近づくに連れて、パーティションを併合する可能性は高くなるはずである。一例として、サーバー当たり5および8個の間のパーティションを維持することが望ましい場合もある。勿論、本発明の種々の実施形態は、サーバー当たり1つのパーティションからサーバー当たり100以上のパーティションまでというように、サーバー当たり任意の数のパーティションとでも動作することができる。
[0080] 好ましくは、分割および併合プロトコルは双方共ステートレスである。マスターまたは関与するサーバー(1つまたは複数)のいずれも、パーティショニング・システムにエラーを生ずることなく、いつの時点でもフェイルオーバーすることができる。言い換えると、マスターまたはサーバーのいずれかが分割または併合プロセス中に故障した場合、次のマスターまたはサーバーが、故障がいつ発生したかには関係なく、パーティション割り当ての有効なリストを作ることができる。ステートレスの分割プロトコルでは、パーティショニング・サーバーは、分割アクションを実行することを全く要求されない。一例として、パーティション表は、サーバーS1において、低キー値Dおよび高キー値Hまでの範囲を取るパーティションを含むことができる。この例では、パーティションのエポック番号は2である。ユーザー定義負荷均衡化式に基づいて、このパーティションの一部を他のサーバーに割り当てることができるように、このパーティションを分割することが決定される。マスター・ロール・インスタンスは、サーバーS1に分割キーを求める。サーバーS1は、Gのキーを分割キーとして戻す。次いで、マスターはパーティション表を変更する。以上で記した1つのエントリーの代わりに、この表は今では2つのパーティションを含む。1つは、低キー値Dおよび高キー値Gを有し、一方第2パーティションは、低キー値Gおよび高キー値Hを有する。先に記したように、低キー値および高キー値に基づくパーティション範囲定義は、低キー値を含み、高キー値を除外する。パーティション表の変更は、既存のエントリーを変更し新たなエントリーを追加することによって、既存のエントリーを除去して2つの新たなエントリーを追加することによって、または任意の他の便利な方法によって行うことができる。
[0081] 次のハートビート・サイクルにおいて、マスターはサーバーS1によってサーブされるパーティションとパーティション表における情報との間に矛盾を検出する。分割が行われたばかりなので、マスターはサーバーS1のブロブ・リースを終了しない。代わりに、マスターはパーティション範囲がDからGでエポックが3の割り当てをサーバーS1に送る。これによって、S1におけるパーティションの割り当てを、パーティション表における分割パーティションの1つと一致するように変更する。サーバーS1から新たな割り当ての承認を受けた後、マスターは第2分割パーティションを他のサーバーに割り当てることができる。第2分割パーティションは、3のエポック番号も有する。あるいは、分割パーティションの双方を最初にサーバーS1に割り当て、後の時点で負荷均衡化を実行するために一方または双方のパーティションを動かすこともできる。
[0082] また、2つのパーティションの併合もステートレスに扱うことができる。パーティションを併合するとき、最初のステップとして、併合されるパーティションが現在のサーバーから割り当て解除される。例えば、サーバーS2における第1サーバーは低キー値Kおよび高キー値Mを有することができる。この例では、第1パーティションのエポック番号は7である。サーバーS4における第2パーティションは、低キー値Mおよび高キー値Nを有することができる。この例では、第2パーティションのエポック値は9である。最初のステップとして、パーティション表がサーバーに対して未割り当て値を示すように、これらのパーティションをそれらのそれぞれのサーバーから割り当て解除することができる。次いで、2つのパーティション・エントリーは、低キーKおよび高キーNを有する1つのエントリーと置き換えられる。このパーティションに割り当てられるエポック番号は、併合されたパーティションの最高値よりも1大きく、この例では10に対応する。次いで、新たなパーティションをサーバーに割り当てることができる。
追加の例
[0083] 本発明を説明するためのコンテキストを与えるために、分散型ネットワークまたはクラウド計算環境において計算リソースを編成する例を示す。以下のクラウド計算環境の説明は、代表例として示される。尚、特許請求する発明は、代わりのタイプの編成を有する分散型ネットワーク環境と共に使用できることは当業者には認められよう。以下の定義は、この代表例において使用される。
[0084] 「クライアント」とは、名称空間またはドメインに対してアプリケーション定義インターフェースによるアクションを求める1つ以上の要求を発行するロールとして定義される。クライアントは、ユーザーまたはユーザーの代わりに開始されるプロセスに対応することができる。例えば、特定のアカウントを調べる要求は、アカウント参照を求めてアプリケーションに宛てられた要求に対応し、このアカウント参照は、所望のアカウントに対応するキーを有する全てのアカウントのドメインに対して行われる。
[0085] 「作業項目」とは、クラウド計算環境において実行されるジョブの静的表現である。作業項目は、ジョブの種々の側面を指定することができ、ジョブ・バイナリー(job binaries)、処理されるデーターへのポインター、および任意にジョブを実行するためのタスクを起動するコマンド・ラインを含む。加えて、作業項目は、再実行(reoccurrence)スケジュール、優先順位、および制約を指定することもできる。例えば、ある作業項目を毎日午後5時に起動するように指定することができる。
[0086] 「ジョブ」とは、作業項目の実行インスタンスである。ジョブは、分散型計算を実行するために一緒に動作するタスクの集合体を含む。タスクは、クラウド計算環境において1つ以上の仮想マシンにおいて実行することができる。
[0087] 「タスク」とは、ジョブの基本的な実行単位である。各タスクは、仮想マシンにおいて実行する。ユーザーは、タスク毎にデーターを入力するために、コマンド・ラインおよびポインターに対して追加の入力を指定することができる。タスクは、このタスクの実行中にこのタスクを実行する仮想マシンにおいて、その作業ディレクトリーの下でファイルの階層を作ることができる。
[0088] クラウド計算環境のユーザーは、通例、クラウド計算リソースを使用してジョブを実行することを望む。ジョブは、通例、クラウド計算環境を介してアクセス可能な位置に格納されたデーターに対してジョブを実行することを伴う。運営者がクラウド計算環境を提供する1つの方法は、この環境を複数のレイヤーとして提供することである。図1は、クラウド計算環境内部においてタスクを実行するのに適したシステムの一例を模式的に示す。図1におけるシステムは、タスク・ランタイム・レイヤー110、サード・パーティ・タスク・ランタイム・レイヤー120、リソース管理レイヤー130、ならびにスケジューリングおよび実行レイヤー140を含む。
[0089] 図1に示す実施形態では、タスク・ランタイム・レイヤー110は、ユーザー105からのタスクに対して実行環境およびセキュリティ・コンテキストを設定することを責務とする。また、タスク・ランタイム・レイヤー110は、タスクを起動し、タスクのステータスを監視することができる。タスク・ランタイム・レイヤー110は、各仮想マシンにおいて実行するシステム・エージェントの形態をなすことができる。また、タスク・ランタイム・レイヤーは、ユーザーのタスク実行可能ファイルにリンクすることができるランタイム・ライブラリーも含むことができる。ランタイム・ライブラリーをタスク・ランタイム・レイヤー110の一部として有することによって、システム・エージェントによって実行されるタスクに一層豊富な能力を提供することができる(can potentially)。ランタイム・ライブラリーの例は、タスク間で高速通信を可能にする1つ以上の効率的な通信ライブラリー、他の仮想マシンおよび/または他のタスクからファイルを読み取るための効率的なリモート・ファイル・アクセス・ライブラリー・サポート、タスクをチェックポイント(例えば、バイナリー・ラージ・オブジェクト(binary large object)に)に移動させ再開させるチェックポイント・ライブラリー、ロギング・ライブラリー、ならびに仮想マシンのプール内部で所与のタスクを実行する仮想マシンに跨がって使用される分散型ファイル・システムを提供するためのライブラリーを含む。
[0090] サード・パーティ・タスク・ランタイム・レイヤー120は、追加のランタイムを構築し、タスク・ランタイム・レイヤー110上で実行することを可能にする。また、サード・パーティ・タスク・ランタイム・レイヤー120は、ジョブに対するタスクの実行を調整する追加能力も提供することができる。その例には、仮想マシンのプール内において所与のタスクを実行する仮想マシンに跨がって使用される分散型ファイル・システムを提供するライブラリーにMapReduceランタイムを含むことができる。これによって、ユーザーは、そのユーザーのジョブまたはタスクに合わせて個別にクラウド計算環境を編成することが可能になる。実施形態では、ジョブ・マネージャ・タスクが、クラウド計算リソースを実行および/または制御するために、ユーザーにサード・パーティ・ランタイム・レイヤーを使用させ易くすることができる。
[0091] リソース管理レイヤー130は、クラウド計算環境において利用可能な計算リソースの管理を扱う。1つの選択肢は、リソース管理レイヤー130に、3つの異なるレベルでリソースを管理させることである。第1レベルにおいて、リソース管理レイヤー130はジョブ(即ち作業項目の実行)に関連する仮想マシン、ならびにタスクに関連する各仮想マシンに格納されたファイルの割り当ておよび割り当て解除を管理する。第2レベルにおいて、ジョブに関連する仮想マシンをマシンのプールに集合化することができる。プールは、1つ以上のジョブおよび/または作業項目に関連する仮想マシンを含むことができる。実施形態に依存して、1つのプールが、データー・センターにおける全ての仮想マシン・クラスタ、地理的領域内における複数のデーター・センターに跨がる複数の仮想マシン・クラスタ、または複数の地理的領域におけるデーター・センターに跨がる複数のクラスタのように、複数の仮想マシン・クラスタに跨がる範囲を占めることができる。1つのプールが、数百万というような、大きな複数の仮想マシンを含むことができる。仮想マシンは、数十億までというような、非常に大きな複数のプール内に収容することができる。第3レベルにおいて、リソース管理レイヤーは、所与のプール・グループにおけるジョブまたは作業項目との関連付けに利用可能な仮想マシンの量を管理する。これによって、システムの現在の負荷に基づいて使用される計算リソースの量の動的な調節を可能にする。加えて、現在のプール・グループによって使用されていない仮想マシンを、他のプール・グループへの組み込みのために、解放してクラウド計算環境に戻すこともできる。
[0092] 図1に示す実施形態では、スケジューリングおよび実行レイヤー140は、ユーザーによって実行されつつある作業項目、ジョブ、およびタスクを管理する。スケジューリングおよび実行レイヤー140は、スケジューリング判断を行い、ジョブおよびタスクを起動すること、および障害時の再試行を責務とする。このようなスケジューリングおよび実行レイヤー140は、種々のレベルでジョブおよび/またはタスクを管理するコンポーネントを含むことができる。
[0093] 以上で説明したレイヤーは、複数の地理的位置にプロセッサーを含むクラウド計算環境において実現することができる。図2は、1つのクラウド計算アーキテクチャー内において異なる位置にあるプロセッサーをどのように統合することができるかについての例を模式的に示す。
[0094] 図2において、仮想マシンのプールを管理するために、1つ以上のタスク・テナント(task tenant)215を使用することができる。タスク・テナント215は、1組の仮想マシンを維持することができる。1人以上のユーザーのジョブは、1つ以上の仮想マシンのプールの一部として、タスク・テナント215内部にある仮想マシンにおいて実行することができる。所与の地理的領域において、1つ以上のタスク・テナント215を使用することができる。タスク・テナント215の責務は、1組の仮想マシンを維持し、当該タスク・テナント内部におけるリソース利用度に基づいてタスク・テナントを動的に拡大または縮小させることを含むことができる。これによって、タスク・テナント215は、顧客の要求増大に応えるためにタスク・テナント内部の仮想マシンの数を増大することができる。また、これによって、タスク・テナント215は、データー・センターにおいてホストされ他の顧客のためにサービスを扱う他のサービスに仮想マシンを割り当てることができるように、使用されていない仮想マシンを解放することができる。タスク・テナント215の他の責務は、プール割り当て/割り当て解除/管理ロジックの一部を実現することとすることができる。これによって、タスク・テナント215は、顧客のためにタスクに関連するプールにどのように仮想マシンを割り当てるか決定するときに関与することができる。また、タスク・テナント215は、当該タスク・テナント内部の仮想マシンにおけるタスクのスケジューリングおよび実行も責務とすることができる。
[0095] 図2に示す実施形態では、複数のタスク・テナント215を制御する1つ以上のタスク位置情報サービス(task location service)225が設けられる。複数のタスク・テナントが、所与の地理的領域における全てのタスク・テナント、世界中からの種々のタスク・テナント、または任意の他の便利なタスク・テナントの集合体に対応することができる。図2において、タスク位置情報サービス225は、「US北」および「US南」と称する領域にサーブすることが示される。タスク位置情報サービス225の責務は、所与の地理的領域に対するタスク・アカウントの管理を含むことができる。また、タスク位置情報サービス225は、ユーザーにクラウド計算環境と相互作用させるためにアプリケーション・プログラミング・インターフェース(API)を提供することもできる。このようなAPIは、所与の地理的領域内におけるタスク・テナントにわたって、仮想マシンのプールに関連するAPIを扱うこと、プール管理ロジック、プール管理ロジックの調整を含むことができる。また、APIは、ユーザーによって提出されたタスクを扱うためのAPI、ならびにユーザーのタスクに関連する作業項目またはジョブを維持する、スケジューリングする、および終了するためのAPIも含むことができる。更に、APIは、地理的領域における全ての作業項目、ジョブ、タスク、およびプールに対する統計の収集、集計、および報告のためのAPIも含むことができる。加えて、APIは、仮想マシンのスポット・マーケットに基づいて短期のユーザーに対するプリエンプティブルな仮想マシン(preemptible virtual machines)として、利用可能な仮想マシンのオークションを可能にするAPIも含むことができる。また、APIは使用量を計測し課金サポートを提供するAPIも含むことができる。
[0096] タスク位置情報サービス225は、グローバル突き止めサービス235によって互いにリンクすることができる。グローバル突き止めサービス235は、タスク位置情報サービス・テナント225と共にタスク・アカウントを管理することを含む、アカウント作成およびアカウントの管理を責務とすることができる。これは、災害復旧を責務とすること、およびデーター・センターに甚大な災害があった場合に、作業項目およびジョブを利用可能にすることを責務とすることを含む。これは、データー・センターが何らかの理由で利用できないために、異なる位置で作業項目またはジョブを実行することを含むのでもよい。また、これは、顧客に彼らの作業項目、ジョブ、およびプールを1つのデーター・センターから他のデーター・センターに移転させることも含むことができる。通例、アクティブなグローバル突き止めサービス235は1つだけである。このアクティブなグローバル突き止めサービス235は、種々のタスク位置情報サービス225、およびデーター格納を管理するサービス・コンポーネント(図示せず)と通信することができる。グローバル突き止めサービスは、グローバル・アカウント名称空間237を維持することができる。
[0097] 図3は、タスク位置情報サービスに可能な構成を示す。図3に示す構成では、タスク位置情報サービスは、1つ以上のアカウント・サーバー321を含むことができる。アカウント・サーバーは、所与の地理的領域におけるアカウントのためにアカウント管理を扱い、作成、削除、またはプロパティ更新を含む。アカウント・フロント・エンド322は、アカウント・サービスに対するフロント・エンド・ノードとしてサーブする。アカウント・フロント・エンド322は、図に示すように、アカウント仮想IPアドレス324の背後にある。アカウント・フロント・エンド322は、アカウントを作るまたはアカウントを削除するAPI要求というような、グローバル突き止めサービスから来るアカウントAPI要求を処理する。
[0098] また、図3の構成は、1つ以上のプール・サーバー331も含む。プール・サーバー331は、所与の地理的領域における仮想マシンのプールのために、プール管理およびプール・トランザクションを扱う。プール・サーバー331は、プールの作成、削除、およびプロパティ更新を扱う。また、プール・サーバー331は、複数のタスク・テナントに跨がる上位仮想マシン割り当てアルゴリズムを管理する。仮想マシン割り当ては、所与のユーザーに対する仮想マシンのストレージとの接続性(connectivity)を考慮することができる。また、プール・サーバーは、仮想マシンの割り当てに関係する他のタスクを実行することもできる。
[0099] また、図3における構成は、1つ以上の作業項目またはジョブ・サーバー(WIJ)336も含む。WIJサーバー336は、作業項目およびジョブの作成、削除、および更新を扱う。加えて、作業項目またはジョブが開始または終了するときにユーザーがプールの自動作成および/または破壊を要求した場合、WIJサーバー336は、作業項目またはジョブに関連するプールの作成および削除を開始することができる。また、WIJサーバー336は、スケーリングのために包括パーティショニング・メカニズムも使用する。一実施形態では、各タスク位置情報サービス内に複数のWIJサーバー336があり、WIJサーバーの各々は作業項目の範囲を扱う。
[00100] プール・サーバー331およびWIJサーバー336は、ユーザーから、タスク位置情報サービス・フロント・エンド338を介して要求を受ける。タスク位置情報サービス・フロント・エンド338は、ユーザーからの要求を処理するために対応するコンポーネントをコールすることも責務とする。タスク位置情報サービス・フロント・エンド338は、図に示すように、アカウント仮想IPアドレス334の背後にある。
[00101] 図3における構成は、更に、タスク位置情報サービス・マスター(task location service master)342も含む。一実施形態では、タスク位置情報サービス・マスター342は、2つの主要な責務を有する。第1に、タスク位置情報サービス・マスター342は、タスク位置情報サービス225において対応するサーバーのためにパーティショニング・ロジックを実装するためのマスター・システムとして役割を果たす。加えて、タスク位置情報サービス・マスター342は、タスク位置情報サービスの地理的領域全体に対する各スポット期間の開始時にプリエンプティブルな仮想マシンについて新たな市場価格を計算することも責務とすることができる。これは、現在の入札およびリソース可用性情報をプール・サーバーおよびタスク・テナントから収集することができ、それに応じて新たな市場価格を計算する。あるいは、タスク位置情報サービス・マスターは、入札およびリソース可用性情報をスポット価格市場サービスに送ることができる。また、これは、地理的領域における全てのタスク・テナントにわたってプリエンプティブルな仮想マシンについての上位割り当て指針をプール・サーバーに作る。
[00102] 計算環境のアクティビティおよび挙動を追跡するために、タスク位置情報サービス・マスター342は、1つ以上の統計集計サーバー355と通信することができる。統計集計サーバーは、タスク、ジョブ、作業項目、およびプールについての詳細統計を収集し集計することを責務とする。システムにおける他のコンポーネントは、タスクおよび仮想マシンについてのきめ細かい統計(fine-grained statistics)を送る(emit)。統計集計サーバーは、これらのきめ細かい統計を、タスク・レベルまたは仮想マシン・レベル統計から、作業項目、アカウント・レベル、および/またはプール・レベルの統計に集計する。この統計は、APIを介して使用のために露出することができる。加えて、統計集計サーバーは、課金に使用するために、アカウント毎に1時間毎の計測記録を生成することも責務とする。
[00103] 更に具体的な例として、包括パーティショニングを、図3に示すタスク位置情報サービスにおけるロールおよびサブロールに適用することができる。図3において説明する最上位ロールは、タスク位置情報サービスまたはテナントである。タスク位置情報サービスの複数のインスタンスが存在する場合、これらのインスタンスの1つが、タスク位置情報サービス・マスター(即ちディクテーター)342に対応する。このテナントの内部には、アカウント・サーバー・ロール321、プール・サーバー・ロール331、および作業項目−ジョブ・サーバー・ロール336がある。これらのロールの各々も、タスク位置情報サービスのインスタンスを表すが、これらのロール・インスタンスは、テナント全体内部で1組の機能を扱う。例えば、アカウント情報の要求は、テナント内部のアカウント・サーバー・ロールによって扱われる。タスク位置情報サービスまたはテナントの複数のインスタンスが存在する場合、テナント内部のロール毎のマスターが、異なるインスタンスに対応することができる。
[00104] 図6は、複数のマスター・ロールに対してどのように冗長性を提供できるかについての従来例を示す。この従来例では、各マスター・ロールが、可用性を改善するために、2つの追加のインスタンスを有する必要がある。フォールト・ドメイン(fault domain)は、共通の障害パターンを有するノードを含み、これらは一緒に故障する可能性がある。例えば、同じ電源を共有する同じラックにあるノードは、共通の問題の結果故障するかもしれないので、共通のフォールト・ドメインにある。アップグレード・ドメインは、システム・アップグレードの間同時にオフラインに移すことができる1組のノードに対応する。これらのノードは、アップグレードまたは故障の結果共通する時点に停止しないように、図6に示すように、異なる「フォールト・ドメイン」および「アップグレード・ドメイン」に跨がって広がる。
[00105] 従来の方法の下では、タスク位置情報サービス内部における3つのロールに必要な追加のインスタンスを供給するには、ロール毎に別の追加のインスタンスを有することが必要になる。図6において、これは、マスターのタイプ毎に追加のインスタンスを供給する明示的なマシン(explicit machine)を有することによって示される。つまり、アカウント・サーバーのマスター621は、追加のインスタンス622および623を必要とする。同様に、プール・サーバーのマスター632はバックアップ・インスタンス631および633を有する。WIJサーバーのマスター643は、バックアップ・インスタンス642および641を有する。
[00106] 図8は、包括パーティショニングを使用する分散型計算環境において、ロールのために種々のインスタンスおよびマスターを提供するためには、仮想マシンをどのように編成することができるかについての例を示す。図8において、別のGPマスター821、831、および841は、それぞれ、アカウント・サーバー、プール・サーバー、およびWIJサーバーについて示される。GPマスター・モジュールおよび任意の固定インターフェースは、管理されるロールに関係なく同じであるので、バックアップ・サーバーがGPマスター821、831、および841に必要であり、1つのマシンにおいて組み合わせることができる。つまり、1つのバックアップ852を、3つのGPマスターのためのバックアップとして提供することができる。GPマスター821、831、または841の内1つに障害が起きた場合、同じGPマスター・モジュールおよび固定インターフェースを使用することができる。この例では、障害が起きたGPマスター・ロールを引き継ぐためにフェイルオーバー・バックアップによって必要とされる唯一の追加の情報タイプは、対応する名称空間および任意のアプリケーション定義インターフェースに対するキーである。同様に、1つの第2バックアップ853は、3つのGPマスター821、831、および841の全てに使用することができる。したがって、この例では、少なくとも3つのGPマスター・ロールに対して、2つのGPマスター・バックアップ・サーバー(852および853)だけが使用される。3つのGPマスター・ロールは、共通のマシンによってバックアップされるように示されるが、共通のマシンを用いて、同じユーザーまたはアカウントに属する任意の便利な数のGPマスターをバックアップすることができる。
[00107] 図11は、本発明の形態にしたがって、フォールト・ドメインおよびアップグレード・ドメインに関するマスター・ロールにバックアップ・マシンを提供する形態例を示す。図8に関して先に説明した概念と同様、複数のGPマスター・ロールを少数のサーバーにおいてバックアップすることができる。例えば、図11は、第1フォールト・ドメインおよび第1アップグレード・ドメインにおいてアカウントGPマスター1202を示し、第2フォールト・ドメインおよび第2アップグレード・ドメインにおいてプールGPマスター1204を示し、第3フォールト・ドメインおよび第3アップグレード・ドメインにおいてWIH GPマスター1210、ならびに第1GPバックアップ1206および第2GPバックアップ1208を示す。第1GPバックアップ1206および第2GPバックアップ1208は、各々、GPマスター・ロールとは異なるフォールト・ドメインおよびアップグレード・ドメインにある。この代表例では、1つの包括パーティショニング・システムが、この例では、3つのロールのためにマスターの全てをホストするために5つのサーバー(または4つのサーバーと1つのバックアップも可能である)しか必要としない。図6に示した例では、これら同じ3つのマスター・ロールのために、9つの異なるサーバーが必要な場合もある。図8に示す手法は、システムによってホストされる任意のタイプのロールに使用することができる2つの追加のサーバーの利用によって遂行することができる。したがって、バックアップ・サーバー(例えば、GPバックアップ1206)は、フォールト・ドメイン(fault domain)の障害(failure)または利用できないアップグレード・ドメインのためにマスター・ロールの内1つ以上が利用できない場合に、使用することができる。この例では必要とされるサーバーの数は少なくてよいが(図6に関して説明したものと比較して)、バックアップ・サーバーの可用性を確保するために追加のフォールト・ドメインおよびアップグレード・ドメインを実装するとよいことが考えられる。先に説明した図8と同様、形態例では、任意の数のマスター・ロールが共通マシンによってバックアップされてもよいことが考えられる。
[00108] 以上、本発明の種々の実施形態の全体像について説明したので、これより本発明を実行するのに適した動作環境例について説明する。図面全体を参照し、最初に特に図7を参照すると、本発明の実施形態を実現するための動作環境例が示され、全体的に計算デバイス700と示されている。計算デバイス700は、適した計算環境の一例に過ぎず、本発明の使用範囲や機能に関して何ら限定を示唆する意図はない。また、計算デバイス700が、図示されるコンポーネントのいずれか1つに関しても、またはその組み合わせに関しても、何らかの依存性または要件を有するというように解釈してはならない。
[00109] 本発明の実施形態の種々の形態は、コンピューター・コードまたは機械使用可能命令という一般的なコンテキストで説明することができ、コンピューター、あるいはパーソナル・データー・アシスタントまたは他のハンド・ヘルド・デバイスというような他のマシンによって実行されるプログラム・モジュールのような、コンピューター実行可能命令を含む。一般に、プログラム・モジュールは、ルーチン、プログラム、オブジェクト、コンポーネント、データー構造等を含み、特定のタスクを実行するコード、または特定の抽象データー型を実装するコードを指す。本発明は、ハンド・ヘルド・デバイス、消費者用電子機器、汎用コンピューター、更に特殊な計算デバイス等を含む、種々のシステム構成で実施することができる。また、本発明は、分散型計算環境において実施することもでき、この場合、タスクは、通信ネットワークを通じてリンクされるリモート処理デバイスによって実行される。
[00110] 図7を参照すると、計算デバイス700は、以下のデバイスを直接または間接的に結合するバス710を含む。メモリー712、1つ以上のプロセッサー714、1つ以上のプレゼンテーション・コンポーネント716、入力/出力(I/O)ポート718、I/Oコンポーネント720、および例示の電源722。バス710は、1つ以上のバス(アドレス・バス、データー・バス、またはその組み合わせ)であってもよいものを代表する。図7の種々のブロックは、明確さのために線で示されるが、実際には、種々のコンポーネントの境界分けはそれ程明確ではなく、例えて言えば、線は、更に正確にするならば、灰色および曖昧になるであろう。例えば、ディスプレイ・デバイスのようなプレゼンテーション・コンポーネントをI/Oコンポーネントであると見なす者もいると考えられる。また、多くのプロセッサーはメモリーを有する。本発明者は、このようなことは技術の本質であると認識しており、図7の図は、本発明の1つ以上の実施形態と共に使用することができる計算デバイス例を例示するに過ぎないことを繰り返しておく。「ワークステーション」、「サーバー」、「ラップトップ」、「ハンド・ヘルド・デバイス」等の間に区別は行わない。何故なら、これらは全て図7に範囲に入ると考えられ、「計算デバイス」を指すからである。
[00111] 計算デバイス700は、通例、種々のコンピューター読み取り可能媒体を含む。コンピューター読み取り可能媒体は、計算デバイス700によってアクセスすることができるいずれの入手可能な媒体とすることもでき、揮発性および不揮発性、ならびにリムーバブルおよび非リムーバブル媒体の双方を含む。一例として、そして限定ではなく、コンピューター読み取り可能媒体は、コンピューター記憶媒体および通信媒体を含むことができる。コンピューター記憶媒体は、揮発性および不揮発性、リムーバブルおよび非リムーバブル媒体を含み、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、または他のデーターというような情報の格納のための任意の方法または技術で実現される。コンピューター記憶媒体は、ランダム・アクセス・メモリー(RAM)、リード・オンリー・メモリー(ROM)、電子的消去可能プログラマブル・リード・オンリー・メモリー(EEPROM)、フラッシュ・メモリーまたは他のメモリー技術、CD−ROM、ディジタル・バーサタイル・ディスク(DVD)または他の光ディスク・ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージまたは他の磁気記憶デバイス、または所望の情報を格納するために使用することができそして計算デバイス700によってアクセスすることができる他のあらゆる媒体を含むが、これらに限定されるのではない。一実施形態では、コンピューター記憶媒体は、有形コンピューター記憶媒体から選択することができる。他の実施形態では、コンピューター記憶媒体は、非一時的コンピューター記憶媒体から選択することができる。
[00112] 通信媒体は、通例、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、または他のデーターを、搬送波のような変調データー信号または他の伝達メカニズムに具体化し、あらゆる情報配信媒体を含む。「変調データー信号」という用語は、その信号内に情報をエンコードするようなやり方で、その特性の1つ以上が設定または変更された信号を意味する。一例として、そして限定ではなく、通信媒体は、有線ネットワークまたは直接有線接続というような有線媒体と、音響、RF、赤外線、および他のワイヤレス媒体というようなワイヤレス媒体とを含む。以上のいずれの組み合わせも、コンピューター読み取り可能媒体の範囲に含まれてしかるべきである。
[00113] メモリー712は、揮発性および/または不揮発性メモリーの形態としたコンピューター記憶媒体を含むことができる。このメモリーは、リムーバブル、非リムーバブル、またはその組み合わせであってもよい。ハードウェア・デバイスの例には、ソリッド・ステート・メモリー、ハード・ドライブ、光ディスク・ドライブ等が含まれる。計算デバイス700は、メモリー712またはI/Oコンポーネント720のような種々のエンティティからデーターを読み取る1つ以上のプロセッサーを含む。プレゼンテーション・コンポーネント(1つまたは複数)716は、データー指示をユーザーまたは他のデバイスに提示する。プレゼンテーション・コンポーネントの例には、ディスプレイ・デバイス、スピーカー、印刷コンポーネント、振動コンポーネント等が含まれる。
[00114] I/Oポート718は、 計算デバイス100を、I/Oコンポーネント720を含む他のデバイスに論理的に結合することを可能にする。I/Oコンポーネント120の一部は内蔵されていてもよい。コンポーネントの例には、マイクロフォン、ジョイスティック、ゲーム・パッド、衛星ディッシュ、スキャナー、プリンター、ワイヤレス・デバイス等が含まれる。
[00115] 図9は、本発明による方法の一例を示す。図9において、1つ以上のアプリケーション定義パーティショニング・システム・インターフェースをアプリケーションまたはユーザーから受け取る(910)。例えば、アプリケーションまたはユーザーからの要求に基づいて、受け取られたアプリケーション定義パーティショニング・システム・インターフェースを含む複数のマスター・ロール・インターフェースを作る(920)。これら複数のマスター・ロール・インスタンスは、マスター記憶オブジェクトに対応する。マスター記憶オブジェクト930のリースをマスター・ロール・インターフェースの内1つに割り当てる。複数のマスター・ロール・インターフェースは、リースの割り当てを求めて競合する。リースが割り当てられたマスター・ロール・インスタンスは、ディクテーター・マスター・ロール・インターフェースになる。ディクテーター・マスター・ロール・インターフェースは、次いで、パーティションのグループを複数のパーティション・サーバーに割り当てる(940)。次いで、複数のパーティション・サーバーを使用して、アプリケーションに対応するジョブを実行する(950)。
[00116] 図10は、本発明による方法の他の例を示す。図10において、計算の要求を受ける(1010)。この計算要求は、複数の名称空間と、互いに異なる2つのマスター・ロール・インスタンスとを含む。少なくとも2つのマスター・ロール・インスタンスを作る(1020)。複数の作られたマスター・ロール・インスタンスにフェールオーバー・サービスを提供する少なくとも1つのマシンを割り当てる(1030)。フェールオーバー・サービスは、計画外フェイルオーバー、スケジューリングされた更新、計画された維持イベントというような、マスター・ロール・インスタンスが動作を停止する任意の都合がよい理由、または他の理由に対応することができる。作られたマスター・ロール・インスタンスの内1つに対するフェールオーバー・イベントを検出する(1040)。割り当てられたマシンにおいて、このフェールオーバー・イベントに対応するマスター・ロールの追加のインスタンスを作る(1050)。
[00117] 以上、特定の実施形態に関係付けて、本発明の実施形態について説明したが、これらは、あらゆる観点において限定的ではなく例示的であることを意図している。本発明の範囲から逸脱することなく、本発明に関連する技術の当業者には、代替実施形態も明白であろう。
[00118] 一実施形態では、分散型計算環境において計算を実行する方法を提供する。この方法は、1つ以上のアプリケーション定義パーティショニング・システム・インターフェースを受けるステップと、1つ以上のアプリケーション定義パーティショニング・システム・インターフェースを含む複数のマスター・ロール・インスタンスを作るステップであって、マスター・ロール・インスタンスがマスター記憶オブジェクトに対応する、ステップと、マスター記憶オブジェクトにリースを割り当てるステップであって、各マスター・ロール・インスタンスがリースを求めて競合し、リースが割り当てられるマスター・ロール・インスタンスが、ディクテーター・マスター・ロール・インスタンスになる、ステップと、ディクテーター・マスター・ロール・インスタンスによって、パーティションのグループを複数のパーティション・サーバーに割り当てるステップと、複数のパーティション・サーバーを使用して、アプリケーションに対応する1つ以上のジョブを実行するステップとを含む。
[00119] 他の実施形態では、分散型計算環境において計算を実行する方法を提供する。この方法は、複数の名称空間と少なくとも2つのマスター・ロール・インスタンスとを含む計算要求を受けるステップと、少なくとも2つのマスター・ロール・インスタンスを作るステップと、複数の作られたマスター・ロール・インスタンスにフェールオーバー・サービスを提供する少なくとも1つのマシンを割り当てるステップと、作られたマスター・ロール・インスタンスの1つに対するフェールオーバー・イベントを検出するステップと、割り当てられたマシンにおいて、検出されたフェールオーバー・イベントに対応マスター・ロールの追加のインスタンスを作るステップとを含む。
[00120] 更に他の実施形態では、分散型計算環境において計算タスクを実行するシステムを提供する。このシステムは、コンピューター使用可能命令を実行する複数のプロセッサーを含み、命令が実行されると、複数のパーティション・サーバーであって、パーティション・サーバーが、パーティション・サーバーに関連する記憶オブジェクトを管理するために少なくとも1つのパーティショニング・システム・インターフェースと、1つ以上のアプリケーション定義パーティショニング・システム・インターフェースとを有し、パーティション・サーバーが、割り当てられたパーティションに関する情報を格納するために、関連する記憶オブジェクトを有する、複数のパーティション・サーバーと、アプリケーション定義名称空間に基づいてパーティションを含むパーティション表であって、パーティションが、名称空間にわたるアプリケーション定義名称空間からのキー範囲に対応し、パーティション表が、パーティショニング・システムによってアクセス可能である、パーティション表と、パーティションのパーティション・サーバー仮想マシンへの割り当てを管理し、パーティションのパーティション・サーバー仮想マシンへのパーティション表割り当てを維持するために、固定パーティショニング・システム・インターフェースを含む第1マスター・ロール・インターフェースと、名称空間からキー値を含むクライアント要求を受け、キー値に対応するパーティション・サーバーのアドレスを戻すために、少なくとも1つの固定パーティショニング・システム・インターフェースを有するクライアント・コンポーネントとを含むシステムを提供する。
[00121] 以上のことから、本発明は、先に説明した目的(ends and objects)の全てを、自明であり本構造に固有である他の利点と共に、達成するのに適することが分かるであろう。
[00122] 尚、ある種の特徴およびサブコンビネーションは有益であり、他の特徴およびサブコンビネーションを参照しなくても採用できることは言うまでもない。これは、請求項の範囲によって想定されていることであり、その範囲に含まれることとする。

Claims (7)

  1. 分散型計算環境において計算を実行する方法であって、
    1つ以上のアプリケーション定義パーティショニング・システム・インターフェースを受けるステップと、
    前記1つ以上のアプリケーション定義パーティショニング・システム・インターフェースを含む複数のマスター・ロール・インスタンスを作るステップであって、前記マスター・ロール・インスタンスがマスター記憶オブジェクトに対応する、ステップと、
    前記マスター記憶オブジェクトにリースを割り当てるステップであって、各マスター・ロール・インスタンスが前記リースを求めて競合し、前記リースが割り当てられるマスター・ロール・インスタンスが、ディクテーター・マスター・ロール・インスタンスになる、ステップと、
    前記ディクテーター・マスター・ロール・インスタンスによって、パーティションのグループを複数のパーティション・サーバーに割り当てるステップであって、前記パーティションのグループの前記複数のパーティション・サーバーへの割り当てがパーティション表に維持される、ステップと、
    前記複数のパーティション・サーバーを使用して、アプリケーションに対応する1つ以上の計算を実行するステップと、
    第1のパーティション・サーバーからのメッセージを、前記ディクテーター・マスター・ロール・インスタンスによって受けるステップであって、前記メッセージが、前記第1のパーティション・サーバーが現在サーブしていると報告しているパーティションを含む、ステップと、
    前記ディクテーター・マスター・ロール・インスタンスによって、対応する第1の記憶オブジェクトにおいて前記第1のパーティション・サーバーのリースを中断するステップであって、前記第1のパーティション・サーバーの前記リース中断が、前記パーティション表内に維持された前記第1のパーティション・サーバーに割り当てられた1つ以上のパーティション受けた前記メッセージにおける前記ーティションとの間の矛盾により示される、前記パーティション・サーバーが現在サーブすべきでない少なくとも1つのパーティションに対し前記第1のパーティション・サーバーが現在サーブていることを、前記ディクテーター・マスター・ロール・インスタンス検出たことに応答する、ステップと、
    を含む、方法。
  2. 請求項1記載の方法であって、更に、前記ディクテーター・マスター・ロール・インスタンスによって、前記複数のパーティション・サーバーにハートビート・メッセージを送るステップを含み、前記第1のパーティション・サーバーからの前記メッセージが、前記ハートビート・メッセージに対する応答である、方法。
  3. 請求項2記載の方法であって、更に、前記ディクテーター・マスター・ロール・インスタンスが前記マスター記憶オブジェクトにリースを維持している間に、前記ディクテーター・マスター・ロール・インスタンスによって、1つ以上のパーティションを、複数のパーティション・サーバーからの第2のパーティション・サーバーに割り当てるメッセージを送るステップであって、前記ディクテーター・マスター・ロール・インスタンスからの前記メッセージがエポック番号を含む、ステップと、
    前記複数のパーティション・サーバーからの前記第2のパーティション・サーバーによって、前記ディクテーター・マスター・ロール・インスタンスから受け取られたパーティション割り当てを維持するステップと、
    を含む、方法。
  4. 請求項3記載の方法であって、更に、
    前記ディクテーター・マスター・ロール・インスタンスによって、割り当て識別子を前記1つ以上のパーティションの割り当てと関連付けるステップであって、前記ディクテーター・マスター・ロール・インスタンスが、前記割り当て識別子を前記メッセージと共に前記第2のパーティション・サーバーに送る、ステップと、
    前記第2のパーティション・サーバーによって、前記割り当て識別子を格納するために、対応する記憶オブジェクトのコンテンツを更新するステップと、
    前記第2のパーティション・サーバーによって、承認メッセージを前記ディクテーター・マスター・ロール・インスタンスに送るステップと、
    を含む、方法。
  5. 請求項3記載の方法であって、更に、
    前記ディクテーター・マスター・ロール・インスタンスによって、割り当て識別子を前記1つ以上のパーティションの割り当てと関連付けるステップであって、前記ディクテーター・マスター・ロール・インスタンスが、前記割り当て識別子を前記メッセージと共に前記第2のパーティション・サーバーに送る、ステップと、
    前記第2のパーティション・サーバーによって、前記ディクテーター・マスター・ロール・インスタンスから前記メッセージを受けるステップであって、前記ディクテーター・マスター・ロール・インスタンスに承認メッセージを送らない、ステップと、
    前記ディクテーター・マスター・ロール・インスタンスによって、対応する記憶オブジェクトにおいて前記第2のパーティション・サーバーのリースを中断するステップと、
    前記ディクテーター・マスター・ロール・インスタンスによって、前記第2のパーティション・サーバーに対応する前記記憶オブジェクトを削除するステップと、
    前記第2のパーティション・サーバーによって、前記リースの中断を検出するステップであって、前記リース中断の検出に応答して、前記第2のパーティション・サーバーが終了する、ステップと、
    を含む、方法。
  6. 請求項3記載の方法であって、更に、
    前記ディクテーター・マスター・ロール・インスタンスによって、割り当て識別子を前記1つ以上のパーティションの割り当てと関連付けるステップであって、前記ディクテーター・マスター・ロール・インスタンスが、前記割り当て識別子を前記メッセージと共に前記第2のパーティション・サーバーに送る、ステップと、
    前記第2のパーティション・サーバーによって、前記ディクテーター・マスター・ロール・インスタンスから前記メッセージを受けるステップであって、対応する記憶オブジェクトのコンテンツを更新しない、ステップと、
    前記ディクテーター・マスター・ロール・インスタンスによって、前記対応する記憶オブジェクトにおいて、前記第2のパーティション・サーバーのリースを中断するステップと、
    前記ディクテーター・マスター・ロール・インスタンスによって、前記第2のパーティション・サーバーに対応する前記記憶オブジェクトを削除するステップと、
    前記第2のパーティション・サーバーによって、前記リースの中断を検出するステップであって、前記リース中断の検出に応答して、前記第2のパーティション・サーバーが終了する、ステップと、
    を含む、方法。
  7. 分散型計算環境において計を実行するシステムであって、ンピューター使用可能命令を実行する複数のプロセッサーを含み、前記命令が実行されると、前記複数のプロセッサーに、請求項1から6のいずれかに記載の方法を実行させる、システム。
JP2014555730A 2012-02-03 2013-02-01 分散型計算環境において計算を実行する方法およびシステム Active JP6190389B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/366,039 2012-02-03
US13/366,039 US10860384B2 (en) 2012-02-03 2012-02-03 Managing partitions in a scalable environment
PCT/US2013/024242 WO2013116581A1 (en) 2012-02-03 2013-02-01 Managing partitions in a scalable environment

Publications (3)

Publication Number Publication Date
JP2015510187A JP2015510187A (ja) 2015-04-02
JP2015510187A5 JP2015510187A5 (ja) 2016-03-17
JP6190389B2 true JP6190389B2 (ja) 2017-08-30

Family

ID=48903855

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014555730A Active JP6190389B2 (ja) 2012-02-03 2013-02-01 分散型計算環境において計算を実行する方法およびシステム

Country Status (6)

Country Link
US (3) US10860384B2 (ja)
EP (1) EP2810164B1 (ja)
JP (1) JP6190389B2 (ja)
KR (1) KR102013005B1 (ja)
CN (1) CN104081354B (ja)
WO (1) WO2013116581A1 (ja)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8782434B1 (en) 2010-07-15 2014-07-15 The Research Foundation For The State University Of New York System and method for validating program execution at run-time
US9852010B2 (en) 2012-02-03 2017-12-26 Microsoft Technology Licensing, Llc Decoupling partitioning for scalability
US10225164B2 (en) * 2012-09-07 2019-03-05 Oracle International Corporation System and method for providing a cloud computing environment
US9063721B2 (en) 2012-09-14 2015-06-23 The Research Foundation For The State University Of New York Continuous run-time validation of program execution: a practical approach
US9069782B2 (en) 2012-10-01 2015-06-30 The Research Foundation For The State University Of New York System and method for security and privacy aware virtual machine checkpointing
US9489443B1 (en) * 2013-05-24 2016-11-08 Amazon Technologies, Inc. Scheduling of splits and moves of database partitions
CN105900059B (zh) 2014-01-21 2019-06-07 甲骨文国际公司 用于在应用服务器、云或其它环境中支持多租户的系统和方法
JP6357807B2 (ja) * 2014-03-05 2018-07-18 富士通株式会社 タスク割当プログラム、タスク実行プログラム、マスタサーバ、スレーブサーバおよびタスク割当方法
US11477278B2 (en) 2014-06-24 2022-10-18 Oracle International Corporation System and method for supporting partitions in a multitenant application server environment
US9819573B2 (en) 2014-09-11 2017-11-14 Microsoft Technology Licensing, Llc Method for scalable computer network partitioning
US9544225B2 (en) 2014-09-16 2017-01-10 Microsoft Technology Licensing, Llc Method for end point identification in computer networks
US10318280B2 (en) 2014-09-24 2019-06-11 Oracle International Corporation System and method for supporting patching in a multitenant application server environment
US9798634B2 (en) * 2014-10-30 2017-10-24 Sap Se Distributed failover for multi-tenant server farms based on load times of replicated tenants
US11711346B2 (en) * 2015-01-06 2023-07-25 Umbra Technologies Ltd. System and method for neutral application programming interface
US9977681B2 (en) * 2015-01-21 2018-05-22 Oracle International Corporation System and method for partition startup/shutdown in a multitenant application server environment
US10250512B2 (en) 2015-01-21 2019-04-02 Oracle International Corporation System and method for traffic director support in a multitenant application server environment
US9760370B2 (en) * 2015-01-29 2017-09-12 Oracle International Corporation Load balancing using predictable state partitioning
US10230664B1 (en) * 2015-09-21 2019-03-12 Amazon Technologies, Inc. Strategic resource allocation in a web-based computing system
EP3394751A1 (en) 2015-12-23 2018-10-31 IDAC Holdings, Inc. Methods of offloading computation from mobile device to cloud
CN106919622B (zh) * 2015-12-28 2021-10-15 伊姆西Ip控股有限责任公司 用于分布式数据处理的方法和设备
CN106230620A (zh) * 2016-07-22 2016-12-14 浪潮电子信息产业股份有限公司 一种云平台智能升级方法
US10073783B2 (en) * 2016-11-23 2018-09-11 Advanced Micro Devices, Inc. Dual mode local data store
US10268726B1 (en) * 2017-04-20 2019-04-23 Amazon Technologies, Inc. Partition key management for improved throughput
US10705883B2 (en) * 2018-06-19 2020-07-07 Microsoft Technology Licensing, Llc Dynamic hybrid computing environment
US10549189B1 (en) * 2018-12-20 2020-02-04 Sony Interactive Entertainment LLC Massive multi-player compute
US11528194B2 (en) * 2019-09-06 2022-12-13 Jpmorgan Chase Bank, N.A. Enterprise control plane for data streaming service
US11734038B1 (en) * 2019-11-21 2023-08-22 Amazon Technologies, Inc Multiple simultaneous volume attachments for live migration between cloud regions and edge locations
US11573839B1 (en) 2019-11-21 2023-02-07 Amazon Technologies, Inc. Dynamic scheduling for live migration between cloud regions and edge locations
US11341260B2 (en) 2020-03-04 2022-05-24 Red Hat, Inc. Optimizing allocation of access control identifiers to a container
US11841855B2 (en) * 2020-10-28 2023-12-12 Open Text Corporation System and method for efficient processing and managing of reports data and metrics
CN112766646B (zh) * 2020-12-30 2022-04-29 北京达佳互联信息技术有限公司 任务流程的生成、处理方法、装置、设备和存储介质

Family Cites Families (60)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6886035B2 (en) 1996-08-02 2005-04-26 Hewlett-Packard Development Company, L.P. Dynamic load balancing of a network of client and server computer
US6801949B1 (en) 1999-04-12 2004-10-05 Rainfinity, Inc. Distributed server cluster with graphical user interface
US6415323B1 (en) 1999-09-03 2002-07-02 Fastforward Networks Proximity-based redirection system for robust and scalable service-node location in an internetwork
US6922685B2 (en) 2000-05-22 2005-07-26 Mci, Inc. Method and system for managing partitioned data resources
JP4712279B2 (ja) 2000-06-20 2011-06-29 テラスプリング・インコーポレーテッド 拡張可能コンピューティングシステムの制御方法および装置
US7293255B2 (en) 2000-09-25 2007-11-06 Sun Microsystems, Inc. Apparatus and method for automated creation of resource types
US20020178262A1 (en) 2001-05-22 2002-11-28 David Bonnell System and method for dynamic load balancing
US6985464B2 (en) * 2001-07-30 2006-01-10 Starent Networks Corporation Managing packet data interconnections in mobile communications
US7356592B2 (en) 2002-01-24 2008-04-08 International Business Machines Corporation Method and apparatus for web farm traffic control
US6813637B2 (en) 2002-03-15 2004-11-02 Sun Microsystems, Inc. System and method for automatically partitioning an application between a web server and an application server
US7167678B2 (en) * 2002-12-18 2007-01-23 Microsoft Corporation Persistent peer-to-peer networking over a piconet network
US7290260B2 (en) 2003-02-20 2007-10-30 International Business Machines Corporation Dynamic processor redistribution between partitions in a computing system
US7590736B2 (en) 2003-06-30 2009-09-15 Microsoft Corporation Flexible network load balancing
US7725559B2 (en) 2003-10-08 2010-05-25 Unisys Corporation Virtual data center that allocates and manages system resources across multiple nodes
US7761514B2 (en) 2003-11-26 2010-07-20 International Business Machines Corporation Method and apparatus for providing dynamic group management for distributed interactive applications
JP2005182702A (ja) 2003-12-24 2005-07-07 Fujitsu Ltd Ipネットワークにおけるアクセス制御方式
JP4293011B2 (ja) * 2004-02-20 2009-07-08 株式会社日立製作所 障害時のサーバ決定方法
US20060168107A1 (en) 2004-03-16 2006-07-27 Balan Rajesh K Generalized on-demand service architecture for interactive applications
US7137042B2 (en) * 2004-03-17 2006-11-14 Hitachi, Ltd. Heartbeat apparatus via remote mirroring link on multi-site and method of using same
US20060080273A1 (en) 2004-10-12 2006-04-13 International Business Machines Corporation Middleware for externally applied partitioning of applications
US7979862B2 (en) 2004-12-21 2011-07-12 Hewlett-Packard Development Company, L.P. System and method for replacing an inoperable master workload management process
US20110016214A1 (en) * 2009-07-15 2011-01-20 Cluster Resources, Inc. System and method of brokering cloud computing resources
US7607129B2 (en) 2005-04-07 2009-10-20 International Business Machines Corporation Method and apparatus for using virtual machine technology for managing parallel communicating applications
US20060245433A1 (en) * 2005-04-28 2006-11-02 International Business Machines Corporation Apparatus and method for dynamic routing of messages with target validation and peer forwarding
US9418040B2 (en) * 2005-07-07 2016-08-16 Sciencelogic, Inc. Dynamically deployable self configuring distributed network management system
US20070143442A1 (en) 2005-12-20 2007-06-21 Nec Laboratories America, Inc. Scalable Publish/Subscribe Broker Network Using Active Load Balancing
US7716180B2 (en) 2005-12-29 2010-05-11 Amazon Technologies, Inc. Distributed storage system with web services client interface
US7814060B2 (en) 2005-12-30 2010-10-12 Sap Ag Apparatus and method for web service client deployment
US7840618B2 (en) * 2006-01-03 2010-11-23 Nec Laboratories America, Inc. Wide area networked file system
US20070174429A1 (en) * 2006-01-24 2007-07-26 Citrix Systems, Inc. Methods and servers for establishing a connection between a client system and a virtual machine hosting a requested computing environment
US7958216B2 (en) * 2006-03-31 2011-06-07 Sap Ag Method for implementing an unplanned shutdown of a computer system
CN101009648A (zh) 2006-12-27 2007-08-01 北京航空航天大学 多服务器的分层迭代负载平衡方法
US8201016B2 (en) 2007-06-28 2012-06-12 Alcatel Lucent Heartbeat distribution that facilitates recovery in the event of a server failure during a user dialog
US8200738B2 (en) 2007-09-30 2012-06-12 Oracle America, Inc. Virtual cluster based upon operating system virtualization
US8180747B2 (en) 2007-11-12 2012-05-15 F5 Networks, Inc. Load sharing cluster file systems
US20090172155A1 (en) 2008-01-02 2009-07-02 International Business Machines Corporation Method and system for monitoring, communicating, and handling a degraded enterprise information system
US8386540B1 (en) 2008-03-31 2013-02-26 Amazon Technologies, Inc. Scalable relational database service
US8392482B1 (en) * 2008-03-31 2013-03-05 Amazon Technologies, Inc. Versioning of database partition maps
US8296398B2 (en) * 2008-04-29 2012-10-23 Overland Storage, Inc. Peer-to-peer redundant file server system and methods
US9021071B2 (en) 2008-06-09 2015-04-28 International Business Machines Corporation Methods of federating applications providing modular data
JP5490093B2 (ja) 2008-10-10 2014-05-14 株式会社日立製作所 ストレージシステムおよびその制御方法
US9996572B2 (en) 2008-10-24 2018-06-12 Microsoft Technology Licensing, Llc Partition management in a partitioned, scalable, and available structured storage
US8495036B2 (en) * 2008-10-24 2013-07-23 Microsoft Corporation Blob manipulation in an integrated structured storage system
US8185566B2 (en) 2009-01-15 2012-05-22 Microsoft Corporation Client-based caching of remote files
US9148885B2 (en) 2009-03-16 2015-09-29 Raytheon Bbn Technologies Corp. Distributed assignment of frequency channels to transceivers over dynamic spectrum
US8122289B2 (en) 2009-04-09 2012-02-21 Telefonaktiebolaget L M Ericsson (Publ) Load balancing and high availability of compute resources
US8966017B2 (en) 2009-07-09 2015-02-24 Novell, Inc. Techniques for cloud control and management
US20110078303A1 (en) 2009-09-30 2011-03-31 Alcatel-Lucent Usa Inc. Dynamic load balancing and scaling of allocated cloud resources in an enterprise network
US8589535B2 (en) * 2009-10-26 2013-11-19 Microsoft Corporation Maintaining service performance during a cloud upgrade
US8910176B2 (en) 2010-01-15 2014-12-09 International Business Machines Corporation System for distributed task dispatch in multi-application environment based on consensus for load balancing using task partitioning and dynamic grouping of server instance
US8533337B2 (en) 2010-05-06 2013-09-10 Citrix Systems, Inc. Continuous upgrading of computers in a load balanced environment
EP2583211B1 (en) * 2010-06-15 2020-04-15 Oracle International Corporation Virtual computing infrastructure
US8364775B2 (en) * 2010-08-12 2013-01-29 International Business Machines Corporation High availability management system for stateless components in a distributed master-slave component topology
US9384116B2 (en) 2011-05-16 2016-07-05 Vmware, Inc. Graphically representing load balance in a computing cluster
US8665890B2 (en) 2011-05-20 2014-03-04 The Regents Of The University Of California Hybrid cross-layer routing protocol for MANETs
US20130311488A1 (en) * 2012-01-06 2013-11-21 Citus Data Bilgi Islemleri Ticaret A.S. Time Stamp Bounded Addition of Data to an Append-Only Distributed Database Table
US8843441B1 (en) * 2012-01-17 2014-09-23 Amazon Technologies, Inc. System and method for maintaining a master replica for reads and writes in a data store
US8868711B2 (en) 2012-02-03 2014-10-21 Microsoft Corporation Dynamic load balancing in a scalable environment
US9852010B2 (en) 2012-02-03 2017-12-26 Microsoft Technology Licensing, Llc Decoupling partitioning for scalability
US10283685B2 (en) * 2014-09-26 2019-05-07 Seoul Viosys Co., Ltd. Light emitting device and method of fabricating the same

Also Published As

Publication number Publication date
KR102013005B1 (ko) 2019-08-21
EP2810164B1 (en) 2019-07-31
CN104081354B (zh) 2018-04-24
EP2810164A1 (en) 2014-12-10
US20130204917A1 (en) 2013-08-08
CN104081354A (zh) 2014-10-01
WO2013116581A1 (en) 2013-08-08
US11561841B2 (en) 2023-01-24
JP2015510187A (ja) 2015-04-02
EP2810164A4 (en) 2016-07-27
US10860384B2 (en) 2020-12-08
US11886925B2 (en) 2024-01-30
KR20140122240A (ko) 2014-10-17
US20200364092A1 (en) 2020-11-19
US20230153167A1 (en) 2023-05-18

Similar Documents

Publication Publication Date Title
JP6190389B2 (ja) 分散型計算環境において計算を実行する方法およびシステム
JP6185486B2 (ja) 分散型計算環境において負荷均衡化を実行する方法
US10635500B2 (en) Decoupling partitioning for scalability
US11729113B2 (en) Translating high level requirements policies to distributed storage configurations
US11106508B2 (en) Elastic multi-tenant container architecture
US9460185B2 (en) Storage device selection for database partition replicas
KR101994506B1 (ko) Paas 자원들, 작업들 및 스케줄링의 분리 기법
US8386610B2 (en) System and method for automatic storage load balancing in virtual server environments
KR101976234B1 (ko) Paas 계층적 스케줄링 및 자동 스케일링 기법
AU2014311869B2 (en) Partition tolerance in cluster membership management
US9733989B1 (en) Non-disruptive load-balancing of virtual machines between data centers
US8082344B2 (en) Transaction manager virtualization
US20240168810A1 (en) On-the-fly migration of distributed object manager (dom) owner between dom servers
Μπέκας Service management in NoSQL data stores via replica-group reconfigurations
US10116540B1 (en) System, method, and computer program for managing data objects in a multiprocessor unit telecommunications network
CN115878269A (zh) 集群迁移方法、相关装置及存储介质

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160127

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160127

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170329

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170628

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170804

R150 Certificate of patent or registration of utility model

Ref document number: 6190389

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250