JP2015520440A - 分散合意プロトコルにおいてcrud型のプロトコルをバインドする - Google Patents

分散合意プロトコルにおいてcrud型のプロトコルをバインドする Download PDF

Info

Publication number
JP2015520440A
JP2015520440A JP2015507075A JP2015507075A JP2015520440A JP 2015520440 A JP2015520440 A JP 2015520440A JP 2015507075 A JP2015507075 A JP 2015507075A JP 2015507075 A JP2015507075 A JP 2015507075A JP 2015520440 A JP2015520440 A JP 2015520440A
Authority
JP
Japan
Prior art keywords
protocol
proposal
distributed
value
acceptor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2015507075A
Other languages
English (en)
Other versions
JP6275693B2 (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 JP2015520440A publication Critical patent/JP2015520440A/ja
Application granted granted Critical
Publication of JP6275693B2 publication Critical patent/JP6275693B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/40Support for services or applications
    • 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/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • 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
    • 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/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/30Definitions, standards or architectural aspects of layered protocol stacks
    • H04L69/32Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/30Definitions, standards or architectural aspects of layered protocol stacks
    • H04L69/32Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
    • H04L69/322Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
    • H04L69/323Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the physical layer [OSI layer 1]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/18Error detection or correction of the data by redundancy in hardware using passive fault-masking of the redundant circuits
    • G06F11/182Error detection or correction of the data by redundancy in hardware using passive fault-masking of the redundant circuits based on mutual exchange of the output between redundant processing components

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • Computer And Data Communications (AREA)
  • Hardware Redundancy (AREA)

Abstract

様々な実施形態により、「クラウド」サービスのような、冗長サービスまたはレプリカサービスが、地理的に分散された場所で実行されることが可能になる。各レプリカは、一般的に、すべてのレプリカにわたって全く同じように行われる操作を行うことができる。1つの場所において中断が発生した場合、他の場所にあるサービスが、迅速に、かつ自動的に、操作を引き継ぐことができる。1つまたは複数の実施形態では、分散合意プロトコルが使用されて、CRUD型プロトコルを状態機械としてバインドする。バインドは、サービスが分散される場所のそれぞれに配置されたリバースプロキシを使用することにより行われる。少なくとも一部の実施形態では、分散合意プロトコルは、Paxosプロトコルもしくはその変形物として実装される、および/またはCRUD型プロトコルは、HTTPプロトコルを含む。

Description

本願発明の一実施例は、例えば、分散合意プロトコルにおいてCRUD型のプロトコルをバインドすることに関する。
[0001]インターネットを通じて提供されるサービス、例えばいわゆる「クラウド」サービスなどは、ユーザー体験を低下させる恐れのある中断を経験する可能性がある。このような中断は、ユーザー体験を低下させることに加えて、実際の金銭の損失ならびに信用の損失など、ビジネスコストに関して多大な組織的影響を与える可能性がある。
本願発明の一実施例は、例えば、分散合意プロトコルにおいてCRUD型のプロトコルをバインドすることに関する。
[0002]この発明の概要により、以下の発明を実施するための形態でさらに説明する概念の抜粋を簡略化して紹介する。この発明の概要は、特許請求の範囲に記載する主題の主要な特徴または本質的特徴を特定するものではない。
[0003]様々な実施形態により、「クラウド」サービスのような、冗長サービスまたはレプリカサービスが、地理的に分散された場所で実行されることが可能になる。各レプリカは、一般的に、すべてのレプリカにわたって全く同じように行われる操作を行うことができる。1つの場所において中断が発生した場合、他の場所にあるサービスが、迅速に、かつ自動的に、操作を引き継ぐことができる。
[0004]1つまたは複数の実施形態では、分散合意プロトコルが使用されて、CRUD型プロトコルを状態機械としてバインドする。バインドは、サービスが分散される場所のそれぞれに配置されたリバースプロキシを使用することにより行われる。少なくとも一部の実施形態では、分散合意プロトコルは、Paxosプロトコルもしくはその変形物として実装される、および/またはCRUD型プロトコルは、ハイパーテキストトランスポートプロトコル(Hypertext Transport Protocol:HTTP)を含む。
[0005]図面を通して同じ番号が使用されて、同様の特徴に参照符号を付ける。
[0006]1つまたは複数の実施形態に従った例示的動作環境を示す図である。 [0007]1つまたは複数の実施形態に従った例示的動作環境を示す図である。 [0008]1つまたは複数の実施形態に従った方法のステップを説明する流れ図である。 [0009]1つまたは複数の実施形態に従った例示的システムを示す図である。 [0010]1つまたは複数の実施形態に従った例示的デバイスを示す図である。
概説
[0011]様々な実施形態により、「クラウド」サービスのような、冗長サービスまたはレプリカサービスが、地理的に分散された場所で実行されることが可能になる。各レプリカは、一般的に、すべてのレプリカにわたって全く同じように行われる操作を行うことができる。1つの場所において中断が発生した場合、他の場所にあるサービスが、迅速に、かつ自動的に、操作を引き継ぐことができる。
[0012]1つまたは複数の実施形態では、分散合意プロトコルが使用されて、CRUD型プロトコルを状態機械としてバインドする。バインドは、サービスが分散される場所のそれぞれに配置されたリバースプロキシを使用することにより行われる。少なくとも一部の実施形態では、分散合意プロトコルは、Paxosプロトコルもしくはその変形物として実装される、および/またはCRUD型プロトコルは、ハイパーテキストトランスポートプロトコル(HTTP)を含む。しかしながら、この文書に記載する技法は、任意の好適なステートレスREST(Representational State Transfer)プロトコルに関連して使用されることが可能であることは認識され、理解されよう。当業者には認識されるように、RESTは、一連のアーキテクチャ理念を定義し、それによりウェブサービスは、異なる言語で書かれた広範なクライアントによりHTTPを通じてリソース状態がアドレス指定され、転送される方法を含み、システムのリソースに焦点を当てるように設計されることが可能である。当業者には認識されるように、REST型アーキテクチャは、クライアントおよびサーバーと関連して利用される。一般的にクライアントが、サーバーへの要求を開始し、その後サーバーが要求を処理し、適切な応答を返す。要求および応答は、リソースの表現の転送を中心に構築される。リソースは、アドレス指定されることが可能な、任意の首尾一貫した有意味な概念を含むことができる。リソースの表現は、通常、リソースの現在の、または意図される状態を記録するドキュメントである。クライアントは、新しい状態へ遷移する用意ができているとき、要求を送信することによって通信を開始する。1つまたは複数の要求が未処理である間、クライアントは遷移中であるとみなされる。各状態の表現は、リンクを含むことができ、クライアントが次に新しい状態遷移を開始することを選択するとき、これを使用することができる。
[0013]次の説明では最初に、本明細書に記載する技法を使用することができる例示的環境について述べる。次に、例示的環境ならびに他の環境で行われることが可能である例示的手順について述べる。その結果として、例示的手順の実行は、例示的環境に限定されず、例示的環境は、例示的手順の実行に限定されない。
例示的環境
[0014]図1は、全体として100において、1つまたは複数の実施形態に従った例示的動作環境を示す。環境100は、1つまたは複数のプロセッサ104と、1つまたは複数のコンピューター可読記憶媒体106と、コンピューター可読記憶媒体上にあり、プロセッサ104によって実行される1つまたは複数のアプリケーション108とを有するローカルクライアントマシンの形式のコンピューティングデバイス102を含む。またコンピューティングデバイス102は、ウェブブラウザー110と、以下に述べるように動作するオペレーティングシステム111とを含む。
[0015]コンピューティングデバイス102は、例として、限定ではないが、デスクトップコンピューター、ポータブルコンピューター、携帯情報端末(PDA)のようなハンドヘルドコンピューター、携帯電話、テレビ、タブレットコンピューターなど、任意の好適なコンピューティングデバイスとして具体化されることが可能である。コンピューターデバイス102の多種多様な例の1つが、図4および5に示され、説明される。
[0016]アプリケーション108は、任意の好適なタイプのアプリケーションを含むことができる。ウェブブラウザー110は、ネットワーク112を介してナビゲートするように構成される。ネットワーク112は、インターネットとして図示されているが、ネットワークは、幅広い構成を想定することができる。例えば、ネットワーク112は、ワイドエリアネットワーク(WAN)、ローカルエリアネットワーク(LAN)、無線網、公衆電話網、イントラネットなどを含むことができる。さらに、単一のネットワーク112が示されているが、ネットワーク112は、複数のネットワークを含むように構成されることが可能である。
[0017]ブラウザーは、ウェブサーバーのような1つまたは複数のサーバー114から入手できるコンテンツと対話する、ならびに1つまたは複数のサーバー114にデータを伝える、例えばダウンロードおよびアップロードを行うために、ネットワーク112を介してナビゲートするように構成されることが可能である。サーバー114は、ネットワーク112を介してアクセス可能であり、コンピューティングデバイス102によって消費されることが可能である、ウェブサービス(「クラウドサービス」とも呼ばれる)のような、1つまたは複数のサービスを提供するように構成されることが可能である。このようなサービスの例には、地図サービス、電子メール、ウェブページ、写真共有サイト、ソーシャルネットワーク、コンテンツ共有サービス、メディアストリーミングサービス、データ検索および/または表示サービスなどが含まれる。
[0018]アプリケーション108の1つまたは複数は、例えば自ら直接に、および/またはブラウザーを介して、ネットワーク112にアクセスするように構成されることも可能である。例えば、アプリケーション108の1つまたは複数は、電子メール、インスタントメッセージなどのメッセージを伝えるように構成されることが可能である。さらなる例では、例えばアプリケーション108は、ソーシャルネットワークにアクセスする、天気の更新を取得する、ウェブサーバー114の1つまたは複数によって実装される書店サービスと対話する、文書処理を支援する、スプレッドシート機能を提供する、プレゼンテーションの作成および出力を支援するなどを行うように構成されることが可能である。
[0019]したがって、アプリケーション108は、直接または間接のネットワーク112アクセスを伴うことがある様々な機能に合わせて構成されることも可能である。例えば、アプリケーション108は、アプリケーション108によってローカルに利用されるとともに、別のコンピューティングデバイス上で実行されるアプリケーションと同期されることが可能である、構成設定および他のデータを含むことができる。このようにして、これらの設定は、デバイスによって共有されることが可能である。様々な他の例もまた検討される。したがって、コンピューティングデバイス102は、多種多様なソースから様々な方法でコンテンツと対話することができる。
[0020]図示され説明される実施形態では、サーバー114が、冗長ウェブサービスであるウェブサービスをそれぞれ支援することができる。すなわち、各冗長ウェブサービスは、他のウェブサービスのコピーまたはレプリカである。これらのウェブサービスは、地理的に分散された場所で運営される、または実行されることが可能であり、通常そのようにされる。各レプリカサービスは、一般的に、すべてのレプリカにわたって全く同じように行われる操作を行うことができる。1つの場所において中断が発生した場合、他の場所にあるサービスが、迅速に、かつ自動的に、操作を引き継ぐことができる。
[0021]1つまたは複数の実施形態では、分散合意プロトコルが使用されて、CRUD型プロトコルを状態機械としてバインドする。バインドは、サービスが分散される場所のそれぞれに配置されたリバースプロキシを使用することにより行われる。少なくとも一部の実施形態では、分散合意プロトコルは、Paxosプロトコルもしくはその変形物として実装される、および/またはCRUD型プロトコルは、以下で明らかになるように、HTTPプロトコルを含む。
[0022]一般的に、本明細書に記載する機能のいずれも、ソフトウェア、ファームウェア、ハードウェア(例えば固定論理回路)、またはこれらの実装の組合せを使用して、実装されることが可能である。本明細書で使用する「モジュール」、「機能」、および「論理」という用語は、一般的に、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組合せを表す。ソフトウェア実装の場合、モジュール、機能、または論理は、プロセッサ(例えば、1つまたは複数のCPU)で実行されると指定されたタスクを行うプログラムコードを表す。プログラムコードは、1つまたは複数のコンピューター可読メモリ装置に格納されることが可能である。以下に記載する技法の特徴は、プラットフォームに依存しないことであり、この技法は、様々なプロセッサを有する様々な商用コンピューティングプラットフォーム上に実装可能であることを意味する。
[0023]例えば、コンピューティングデバイス102は、コンピューティングデバイス102のハードウェアまたは仮想マシンに、例えばプロセッサ、機能ブロックなど、操作を行わせるエンティティ(例えばソフトウェア)を含むこともできる。例えば、コンピューティングデバイス102は、コンピューティングデバイス、より詳細にはコンピューティングデバイス102のオペレーティングシステムおよび関連するハードウェアに操作を行わせる命令を保持するように構成されることが可能であるコンピューター可読媒体を含むことができる。したがって、命令は、オペレーティングシステムおよび関連するハードウェアを、その操作を行う構成にするように機能し、このようにして結果的に、オペレーションシステムおよび関連するハードウェアが機能を行うように変換される。命令は、コンピューター可読媒体によって、多種多様な構成によりコンピューティングデバイス102に提供されることが可能である。
[0024]コンピューター可読媒体のそのような1つの構成が、信号伝送媒体(signal bearing medium)であり、したがって、例えばネットワークを介してコンピューティングデバイスに命令を(例えば、搬送波として)送信するように構成される。コンピューター可読媒体は、コンピューター可読記憶媒体として構成されることも可能であり、したがって信号伝送媒体ではない。コンピューター可読記憶媒体の例には、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、光ディスク、フラッシュメモリ、ハードディスクメモリ、ならびに磁気式、光学式、および他の技法を使用して命令およびその他のデータを格納することができる他のメモリデバイスが含まれる。
[0025]例示的環境を説明したが、次に、分散合意プロトコル(DAP)について、およびそのようなDAPがどのように、HTTPプロトコルのようなCRUD型プロトコルとともに利用されて、CRUD型プロトコルを状態機械としてバインドすることができるかについて検討する。
分散合意プロトコル
[0026]分散型システムの本質から示唆される拡張可能性、自律性、およびフォールトトレランスのような利点のために、情報システムが、ますます分散型アーキテクチャに移行されるにつれて、そのような分散型システム内の組織および同期を維持することの問題はさらに難しくなっている。分散型システムの1つの目標は、特定の合意条件を満たす1つの共通の値に関する合意を、効率的にかつ柔軟に行うためにピアとして働くそれぞれのプロセッサまたはノードを有することである。
[0027]分散合意プロトコルは、分散型システム内のノードが効率的にそのような共通の値に合意できるようにするために、利用されることが可能である。そのような1つの分散合意プロトコルが、以下に説明するPaxosプロトコルである。Paxosプロトコルは、この文書に記載する様々な実施形態において利用されることが可能である。しかしながら、特許請求の範囲に記載する主題の趣旨および範囲を逸脱することなく、他の分散合意プロトコルが利用される可能性があることを認識され、理解されたい。例えば、当業者には認識されるように、このような1つの分散合意プロトコルが、クエリ/更新(Q/U)プロトコルである。
Paxosプロトコル
[0028]次の説明は、Paxosプロトコル内の状態機械として、例えばHTTPなどCRUD型プロトコルをバインドするために使用することができる分散合意プロトコルの単に1つの例として、一般的に、Paxosプロトコルについて述べる。
[0029]Paxosプロトコルは、フォールトトレラントな分散型システムを実装するために使用される。次の記述は、分散型システムを構築するための状態機械手法に対するコンセンサスのアプリケーションによって取得されるPaxosアルゴリズムまたはプロトコルを説明する。最初に、問題の状況におけるコンセンサスアルゴリズムについて考える。値を提案することができるプロセスの集まりを仮定する。コンセンサスアルゴリズムにより、提案された値の中の単一の値が選ばれることを確保する。値が提案されない場合、値は選択されないはずである。値が選択された場合、プロセスは、選択された値を知ることができるはずである。コンセンサスに対する安全性検討事項は、(1)提案された値のみが選択可能であること、(2)単一の値のみが選択されること、(3)プロセスは、値が実際に選択されない限り、値が選択されたことを知らないことである。目標は、提案されたある値が、最終的に選択されることを確保することであり、値が選択された場合、プロセスは、最終的にその値を知ることができる。
[0030]コンセンサスアルゴリズムにおける3つの役割は、エージェントの3つのクラス、すなわちプロポーザー(proposer)、アクセプター(acceptor)、ラーナー(learner)によって行われる。実装においては、単一プロセスが、2つ以上のエージェントとして働く可能性がある。またエージェントは、メッセージを送信することによって互いと通信することができると仮定する。この説明の状況では、慣例的な非同期の、非ビザンチン(non−Byzantine)モデルが使用され、このモデルでは、(1)エージェントが任意の速度で動作し、停止によって機能しなくなる可能性があり、再起動する可能性がある。すべてのエージェントは、値が選択された後に機能しなくなり、その後再起動する可能性があるので、機能しなくなり、再起動したエージェントによって一部の情報が記憶できていない限り、解決は不可能である、(2)メッセージは、配信されるのに任意の時間がかかる可能性があり、複製される可能性があり、失われる可能性があるが、メッセージは破損していない。
[0031]次に、値を選択するという概念について考える。値を選択する最も簡単な方法は、単一のアクセプターエージェントを有することである。プロポーザーが、アクセプターに提案を送信し、アクセプターは、アクセプターが受け取る最初に提案された値を選択する。単純であるが、この解決法は、アクセプターの障害によりさらなる進行が不可能になるので、満足のできるものではない。単一のアクセプターの代わりに、複数のアクセプターエージェントを使用することができる。プロポーザーが、提案する値をアクセプターの集合に送信する。アクセプターは、提案された値を受け取ることができる。アクセプターの十分に大きい集合が値を選択したとき、値は選択される。十分に大きいとはどのくらい大きいか?単一の値のみが選択されることを確保するために、十分に大きい集合をエージェントの任意の過半数からなるとすることができる。任意の2つの過半数は、少なくとも1つのアクセプターを共通に有するので、アクセプターが最大1つの値を受諾することができる場合、これは機能する。障害またはメッセージ損失がないとき、単一プロポーザーによってただ1つの値が提案される場合でも、値が選択されることを望む。これは、以下の要件を示唆する:
P1.アクセプターは、アクセプターが受け取る最初の提案を受諾しなければならない。
[0032]しかしながら、この要件は、問題を起こす。いくつかの値は、ほぼ同じ時間に異なるプロポーザーによって提案される可能性があり、すべてのアクセプターが値を受諾したが、アクセプターの過半数によって受諾された単一の値はない状況を招く。提案された値が単に2つであっても、それぞれがアクセプターの約半分によって受諾される場合、たった1つのアクセプターの障害が、値のどちらが選択されたかを知ることを不可能にする可能性がある。
[0033]P1および値はアクセプターの過半数によって受諾されるときだけ選択されるという要件は、アクセプターが2つ以上の提案を受諾することを可能にされなければならないということを示す。これを可能にするために、各提案に(自然)数を割り当て、したがって提案が、提案番号および値で構成されることにより、アクセプターが受諾することができる異なる提案の記録を付ける。混乱を避けるために、提案ごとに異なる番号を持つ必要がある。これを達成する方法は、実装次第であり、したがってここでは説明のために単にこれを仮定する。値は、その値を持つ単一の提案がアクセプターの過半数によって受諾されたとき、選択される。その場合、提案(ならびにその値)は選択されたと言う。
[0034]複数の提案が選択されることを可能にすることができるが、選択される提案がすべて同じ値を持つことを保証しなければならない。提案番号についての帰納法によって、以下を保証すれば十分である:
P2.値vを持つ提案が選択される場合、選択される、より高い番号のすべての提案が、値vを持つ。
[0035]番号は、全順序であるので、条件P2は、単一の値のみが選択されるという安全特性を保証する。
[0036]選択されるためには、提案が少なくとも1つのアクセプターによって受諾されなければならない。
したがって、以下を満たすことによって、P2を満たすことができる:
P2.値vを持つ提案が選択される場合、任意のアクセプターによって選択される、より高い番号のすべての提案が、値vを持つ。
[0037]さらにP1を維持して、ある提案が選択されることを確保する。通信は非同期であるので、いかなる提案も受信していないある特定のアクセプターcで、提案が選択される可能性がある。新しいプロポーザーが「ウェイクアップ」し、異なる値を持つ、より高い番号の提案を出すものと仮定する。P1はcに、P2に反するこの提案を受諾するよう求める。P1とP2の両方を維持することは、P2を以下のように強化することを必要とする:
P2.値vを持つ提案が選択される場合、任意のプロポーザーによって出される、より高い番号のすべての提案が、値vを持つ。
[0038]提案は、アクセプターによって受諾されることが可能になる前に、プロポーザーによって出されなければならないので、P2はP2の意味を含み、P2はP2の意味を含む。
[0039]P2を満たす方法を発見するために、P2が有効であることを証明する方法を検討する。番号mおよび値vを持つある提案が選択されたと仮定し、番号n>mを有して出されたいかなる提案もまた、値vを持つことを示す。nについて帰納法を用いることによって、証明をより簡単にし、したがって、m...(n−1)中の番号を有して出されるすべての提案は値vを持つというさらなる仮定の下で、提案番号nは、値vを持つことを証明する。ここで、i..jは、iからjの一連の番号を示す。番号mの提案が選択されるには、C中のすべてのアクセプターが提案を受諾したような、アクセプターの過半数からなるある集合Cが存在していなければならない。これを帰納法の仮定と組み合わせて、mが選択されるという仮説は、以下の意味を含む:
C中のすべてのアクセプターは、番号m..(n−1)を持つ提案を受諾しており、任意のアクセプターによって受諾されるm..(n−1)中の番号を持つすべての提案は、値vを持つ。
[0040]アクセプターの過半数からなる任意の集合Sは、Cの少なくとも1つの要素を含んでいるので、次の不変式(invariant)が維持されることを確保することによって、番号nの提案は、値vを持つと結論づけることができる:
P2.任意のvおよびnについて、値vおよび番号nを持つ提案が出される場合、アクセプターの過半数からなる集合Sが存在し、(a)S中のアクセプターは、nより小さい番号を付けられたどのような提案をも受諾していない、または(b)vは、S中のアクセプターによって受諾された、nより小さい番号のすべての提案の中で最も高い番号の提案の値である。
[0041]したがって、P2の不変性を維持することによって、P2を満たすことができる。
[0042]P2の不変性を維持するには、番号nの提案を出すことを希望するプロポーザーが、存在する場合は、アクセプターのある過半数の各アクセプターによって受諾されている、または受諾されることになる、nより小さい番号を持つ、最も高い番号の提案を知らなければならない。すでに受諾された提案に関して知ることは全く容易であるが、将来の受諾を予測することは困難である。将来を予測しようとする代わりに、プロポーザーは、このような受諾が存在することはないという約束(promise)を引き出すことによってこれを制御する。言い換えれば、プロポーザーは、アクセプターがnより小さい番号の提案をそれ以上受諾しないことを要求する。これが、提案を出すための次のアルゴリズムにつながる。
1.プロポーザーが、新しい提案番号nを選択し、アクセプターのある集合の各要素に要求を送信し、各要素に以下のように応答することを求める:
(a)nより小さい番号の提案を二度と受諾しないという約束
(b)存在する場合は、受諾したnよりも小さい、最も高い番号の提案。
このような要求は、番号nを持つ「準備要求(prepare request)」と呼ばれる。
2.プロポーザーが、アクセプターの過半数から要求した応答を受信する場合、プロポーザーは、番号nおよび値vを持つ提案を出すことができる。ここでvは、応答の中で最も高い番号の提案の値である、または応答側が提案を報告しなかった場合、プロポーザーによって選択される任意の値である。
[0043]プロポーザーが、アクセプターのある集合に、提案が受諾されることを求める要求を送信することによって提案を出す。(これは、最初の要求に応答したものと同じアクセプターの集合である必要はない。)これは、受諾要求(accept request)と呼ぶことにする。
[0044]アクセプターは、プロポーザーから2種類の要求、すなわち準備要求と受諾要求を受信することができる。アクセプターは、安全性を損なうことなく、要求を無視することができる。したがって、アクセプターが要求に応答することを可能にされているときだけ伝える必要がある。アクセプターは、準備要求に常に応答することができる。アクセプターは、提案を受諾しない約束をしていない場合、かつその場合に限り、受諾要求に応答し、提案を受諾することができる。言い換えれば、以下のようになる:
P1.アクセプターは、nより大きい番号を持つ準備要求に応答していない場合、かつその場合に限り、番号nの提案を受諾することができる。
[0045]P1がP1を包含することに注目する。ここで、一意の提案番号を想定すると、求められる安全特性を満たす値を選択するための完全なアルゴリズムが得られる。最終的なアルゴリズムは、1度の小規模な最適化を行うことによって取得される。アクセプターが、番号nの準備要求を受信するが、アクセプターは、nより大きい番号の準備要求にすでに応答しており、それによって、番号nの新しい提案を受諾しないと約束すると考える。そこでアクセプターには、新しい準備要求に応答する理由がない。アクセプターは、プロポーザーが出すことを望む番号nの提案を受諾しないからである。したがって、アクセプターにこのような準備要求を無視させる。またアクセプターに、すでに受諾した提案の準備要求を無視させる。
[0046]この最適化を用いると、アクセプターは、これまでに受諾した最も高い番号の提案、およびアクセプターが応答した最も高い番号の準備要求の番号だけを記憶していればよい。P2は、障害にかかわらず、不変に維持されなければならないので、アクセプターは、機能しなくなり、その後再起動する場合でも、この情報を記憶していなければならない。プロポーザーは、同じ番号の別の提案を出そうとすることがない限り、常に提案を破棄し、提案に関するすべてを忘れることができることに留意されたい。
[0047]プロポーザーとアクセプターのアクションを合わせると、アルゴリズムは、次の2つの段階で動作することがわかる。
段階1
(a)プロポーザーが、提案番号nを選び、番号nを持つ準備要求をアクセプターの過半数に送信する。
(b)アクセプターが、すでに応答したいかなる準備要求の番号よりも大きい番号nを持つ準備要求を受信する場合、アクセプターは、nより小さい番号の提案をそれ以上受諾しないという約束とともに、および(ある場合は)受諾した最も高い番号の提案とともに、要求に応答する。
段階2
(a)プロポーザーが、アクセプターの過半数から(番号nの)その準備要求への応答を受信する場合、プロポーザーは、値vを持つ番号nの提案に対してそれらのアクセプターのそれぞれに受諾要求を送信する。ここでvは、応答の中の最も高い番号の提案の値である、または応答が提案を報告しなかった場合、任意の値である。
(b)アクセプターが、番号nの提案に対する受諾要求を受信する場合、アクセプターは、nより大きい番号を持つ準備要求にすでに応答していない限り、提案を受諾する。
[0048]プロポーザーは、各提案に対するアルゴリズムに従う限り、複数の提案を行うことができる。プロポーザーは、プロトコルの途中でいつでも提案を破棄することができる。提案が破棄された後にしばらくして、提案に対する要求および/または応答がそれらの宛先に到着することがあっても、正確さは維持される。あるプロポーザーがより高い番号の提案を出そうとし始めた場合、提案を破棄することが得策である可能性が高い。したがって、アクセプターが、より高い番号を持つ準備要求をすでに受信しているという理由で、準備要求または受諾要求を無視する場合、アクセプターは、プロポーザーに知らせるべきである可能性が高く、プロポーザーはその後その提案を破棄すべきである。これは、正確さに影響を与えないパフォーマンス最適化である。
[0049]次に、選択した値を学習するという概念について考える。値が選択されたことを知るには、ラーナーが、アクセプターの過半数によって提案が受諾されたことを見出す。これを行う1つの方法は、各アクセプターに、提案を受諾するときは必ずすべてのラーナーに対して応答させ、すべてのラーナーに提案を送信することである。これにより、ラーナーは、できる限り速やかに選択された値について見出すことが可能になるが、これは、各アクセプターが各ラーナーに応答することを必要とし、応答の数は、アクセプターの数とラーナーの数の積に等しくなる。
[0050]非ビザンチン障害の仮定により、あるラーナーが別のラーナーから、値が受諾されたことを見出すことが容易になる。識別されたラーナーに対して、アクセプターにその受諾とともに応答させることができ、識別されたラーナーは、値が選択されたとき他のラーナーに知らせる。この手法は、すべてのラーナーが選択された値を発見するために余分なラウンドを必要とする。識別されたラーナーが機能しなくなる可能性があるので、これもまた信頼性が低い。しかしこれは、アクセプターの数とラーナーの数の和に等しい応答の数しか必要としない。
[0051]より一般的には、アクセプターは、識別されたラーナーのある集合に対してアクセプターの受諾とともに応答することができ、識別されたラーナーのそれぞれが、その後、値が選択されたときすべてのラーナーに知らせることができる。識別されたラーナーのより大きい集合を使用すると、通信複雑度が大きくなるという犠牲を払って、より大きな信頼性がもたらされる。
[0052]メッセージを失ったために、ラーナーがそれまで見出していない値が選択される可能性がある。ラーナーは、アクセプターがどの提案を受諾したかをアクセプターに尋ねることができるが、アクセプターの障害により、過半数が特定の提案を受諾したかどうかを知ることが不可能になる可能性がある。その場合、ラーナーは、新たな提案が選択されるときのみ、どの値が選択されているかを見出すことになる。ラーナーが、値が選択されているかどうかを知る必要がある場合、ラーナーは、プロポーザーに提案を出させ、上述のアルゴリズムを使用することができる。
[0053]次に、進捗の論点、およびアルゴリズムの進行が生産的な方法で進むことを保証する方法を検討する。2つのプロポーザーがそれぞれ、増加する番号を持つ一連の提案を出し続け、それらのうちのどれも絶対に選択されないシナリオを考える。プロポーザーpが、提案番号nに対する段階1を完了する。次いで別のプロポーザーqが、提案番号n>nに対する段階1を完了する。提案番号nに対するプロポーザーpの段階2の受諾要求は無視される。アクセプターはすべて、nよりも小さい番号の新しい提案を受け入れない約束をしているからである。そこで、プロポーザーpは次に、新しい提案番号n>nに対して段階1を開始して完了し、プロポーザーqの第2の段階2の受諾要求が無視されるようにする、その他同様となる。
[0054]進捗を保証するには、識別されたプロポーザーが、提案を出すことを試みる唯一のプロポーザーとして選択される。識別されたプロポーザーが、アクセプターの過半数と無事に通信できる場合、および識別されたプロポーザーが、すでに使用したどのものより大きい番号の提案を使用する場合、識別されたプロポーザーは、受諾された提案を出すことに成功することになる。識別されたプロポーザーがより高い提案番号の何らかの要求について知っている場合、提案を破棄し、再び試みることによって、識別されたプロポーザーは、最終的に十分に高い提案番号を選択することになる。
[0055]システム(プロポーザー、アクセプター、および通信網)の十分な部分が適切に機能している場合、単一の識別されたプロポーザーを選ぶことによって、活性化(liveness)が実現される可能性がある。プロポーザーを選ぶための信頼できるアルゴリズムは、例えばタイムアウトを使用することによって、無作為性またはリアルタイム性を利用することができる。しかしながら、安全性は、選択の成功または失敗にかかわらず確保される。
[0056]次にいくつかの実装問題を検討する。Paxosアルゴリズムは、プロセスのネットワークを想定する。そのコンセンサスアルゴリズムにおいて、各プロセスは、プロポーザー、アクセプター、およびラーナーの役割を演じる。アルゴリズムは、リーダーを選び、リーダーは、識別されたプロポーザーおよび識別されたラーナーの役割を演じる。Paxosコンセンサスアルゴリズムは、上述のアルゴリズムであり、要求および応答が、通常のメッセージとして送信される。応答メッセージは、混乱を避けるために、対応する提案番号をタグ付けされる。障害中に保護される、安定したストレージが使用されて、アクセプターが記憶しておかねばならない情報を保持する。アクセプターは、実際に応答を送信する前に、その意図される応答を安定したストレージに記録する。
[0057]残っているのは、2つの提案が同じ番号で出されないことを保証するためのメカニズムを説明することだけである。異なるプロポーザーは、その番号を、番号の互いに素な集合から選択し、したがって2つの異なるプロポーザーは、決して同じ番号の提案を出さない。各プロポーザーは、安定したストレージに、出そうと試みた最も高い番号の提案を記憶し、すでに使用したどれよりも高い提案番号で段階1を開始する。
[0058]次に、Paxosアルゴリズムを背景にして状態機械の実装を検討する。
[0059]説明するシステムを実装する1つの方法は、セントラルサーバーにコマンドを出すクライアントの集まりとするものである。サーバーは、ある順序でクライアントのコマンドを実行する決定性状態機械として説明されることが可能である。状態機械は、現在の状態を有し、入力としてコマンドを取り込み、出力および新しい状態を生成することによってステップを行う。例えば、分散型銀行システムのクライアントは、現金自動預け払い機(teller)であり、状態機械の状態は、すべての利用者の口座残高からなることができる。引き出しは、残高が引き出し額よりも大きい場合、かつその場合に限り、口座残高を減少させる状態機械コマンドを実行することによって行われ、出力として以前の残高および新しい残高を生成する。単一のセントラルサーバーを使用する実装は、サーバーが機能しなくなる場合、機能しなくなる。したがって、代わりにサーバーの集まりを使用し、各サーバーが独立して状態機械を実装する。状態機械は決定性であるので、すべてのサーバーは、同じシーケンスのコマンドを実行する場合、同じシーケンスの状態および出力を生成することになる。コマンドを出しているクライアントは、その後、任意のサーバーによってそのコマンドについて生成された出力を使用することができる。
[0060]すべてのサーバーが同じシーケンスの状態機械コマンドを実行することを保証するために、Paxosコンセンサスアルゴリズムの別個のインスタンスのシーケンスを実装し、i番目のインスタンスによって選択される値が、シーケンスのi番目の状態機械コマンドとなる。各サーバーは、アルゴリズムの各インスタンスにおいて、すべての役割(プロポーザー、アクセプター、およびラーナー)を演じる。この例のために、サーバーの集合は固定され、したがってコンセンサスアルゴリズムのすべてのインスタンスが、エージェントの同じ集合を使用すると仮定する。
[0061]通常の動作では、単一サーバーがリーダーとなるように選ばれ、コンセンサスアルゴリズムのすべてのインスタンスにおいて識別されたプロポーザー(すなわち、提案を出そうと試みる唯一のプロポーザー)として働く。クライアントが、リーダーにコマンドを送信し、リーダーは、シーケンス中のどこに各コマンドが表示されるべきかを判断する。ある特定のクライアントコマンドが135番目のコマンドとなるべきであると、リーダーが判断する場合、リーダーは、そのコマンドがコンセンサスアルゴリズムの135番目のインスタンスの値として選ばれるように試みる。通常は成功する。障害のために、または別のサーバーもまた自身をリーダーであると考え、135番目のコマンドが何であるべきかについて異なる考えを有するという理由で、失敗する可能性がある。しかし、コンセンサスアルゴリズムは、135番目のコマンドとして、最大でも1つのコマンドが選択可能であることを確保する。
[0062]この手法の効率は、Paxosコンセンサスアルゴリズムにおいて強化される。提案される値は、段階2まで選択されないからである。プロポーザーのアルゴリズムの段階1を完了した後、提案される値が決定されるか、あるいはプロポーザーは、任意の値を自由に提案することを思い出されたい。
[0063]次にPaxos状態機械の実装が通常動作中にどのように機能するかを検討する。先のリーダーが機能しなくなったばかりであって、新しいリーダーが選ばれたとき、何が起きるかを検討する。新しいリーダーは、コンセンサスアルゴリズムのすべてのインスタンスにおけるラーナーであり、すでに選択されたコマンドの大部分を知っているべきである。新しいリーダーが、コマンド1〜134、138、および139、すなわちコンセンサスアルゴリズムのインスタンス1〜134、138、および139で選択された値を知っていると仮定する。新しいリーダーは、次いでインスタンス135〜137、および139より大きいすべてのインスタンスの段階1を実行する。これらの実行の結果が、インスタンス135および140で提案される値を決定すると仮定するが、提案される値は他のすべてのインスタンスにおいて制約されないままである。リーダーは次に、インスタンス135および140の段階2を実行し、それによりコマンド135および140を選択する。
[0064]リーダー、ならびにリーダーが知っているすべてのコマンドを知るいかなる他のサーバーも、次にコマンド1〜135を実行することができる。しかしながら、リーダーは、やはり知っているコマンド138〜140を実行することができない。コマンド136および137がまだ選択されていないからである。リーダーは、クライアントによって要求される次の2つのコマンドをコマンド136および137であると受け取ることができる。代わりに、コマンド136および137として、状態が変更されないようにしておく特別な「noop」コマンドを提案することによって、リーダーに即座にギャップを埋めさせる。リーダーは、コンセンサスアルゴリズムのインスタンス136および137の段階2を実行することによってこれを行う。この「noop」コマンドが選択されると、コマンド138〜140が実行できる。
[0065]現在、コマンド1〜140が選択されている。リーダーは、コンセンサスアルゴリズムの140より大きいすべてのインスタンスに対する段階1もまた完了し、リーダーは、これらのインスタンスの段階2において任意の値を自由に提案できる。リーダーは、クライアントによって要求された次のコマンドにコマンド番号141を割り当て、コンセンサスアルゴリズムのインスタンス141の段階2における値としてこれを提案する。リーダーは、受信する次のクライアントコマンドをコマンド142として提案し、以下同様である。
[0066]リーダーは、リーダーが提案したコマンド141が選択されたことを知る前に、コマンド142を提案する可能性がある。コマンド141を提案する際にリーダーが送信したすべてのメッセージが失われ、リーダーがコマンド141として何を提案したかを任意の他のサーバーが知る前に、コマンド142が選択される可能性がある。リーダーが、インスタンス141においてその段階2のメッセージへの期待される応答を受信に失敗するとき、リーダーは、それらのメッセージを再送信する。すべてが順調に進む場合、リーダーの提案したコマンドは選択される。しかしながら、最初に失敗し、選択されたコマンドのシーケンスにギャップを残す可能性がある。一般に、リーダーは、コマンドを進めることができる、すなわちリーダーは、コマンド1からコマンドiが選択された後に、コマンドi+1からコマンドi+αを提案することができると仮定する。そこで最大α−1コマンドのギャップが発生する可能性がある。
[0067]新しく選択されたリーダーが、コンセンサスアルゴリズムの無限に多くのインスタンスに対して、上記のシナリオではインスタンス135〜137、および139より大きいすべてのインスタンスに対して、段階1を実行する。すべてのインスタンスに対して同じ提案番号を使用すると、リーダーは、単一のかなり短いメッセージを他のサーバーに送信することによってこれを行うことができる。段階1において、アクセプターは、あるプロポーザーから段階2メッセージをすでに受信していた場合に限り、単純なOK以上の応答をする。このシナリオでは、インスタンス135およびインスタンス140のみがこれに当たる。したがって、サーバーは、アクセプターとして働き、すべてのインスタンスに対して単一のかなり短いメッセージで応答することができる。したがって段階1のこうした無限に多くのインスタンスを実行することは、問題にならない。
[0068]リーダーの障害および新しいリーダーの選出はまれな事象であるはずなので、状態機械コマンドを実行する、すなわちコマンド/値に関するコンセンサスを実現する事実上のコストは、コンセンサスアルゴリズムの段階2のみを実行するコストである。Paxosコンセンサスアルゴリズムの段階2は、障害の存在下で合意に到達するための任意のアルゴリズムの最小限のコストを有することを示すことができる。ゆえに、Paxosアルゴリズムは、本質的に最適である。
[0069]システムの通常の動作のこの説明は、現在のリーダーの障害と新しいリーダーの選出との間の短い期間を除き、常に単一のリーダーが存在すると仮定する。正常でない環境において、リーダーの選出は失敗する可能性がある。リーダーとして働くサーバーがない場合、新しいコマンドは提案されない。複数のサーバーがリーダーであると考える場合、複数のサーバーはすべて、コンセンサスアルゴリズムの同じインスタンスにおいて値を提案する可能性があり、これによりいずれの値も選択されないようになる可能性がある。しかしながら、安全性は保たれ、2つの異なるサーバーは、i番目の状態機械コマンドとして選択された値について一致しないことは決してない。単一のリーダーの選出は、進捗を確保するためにのみ必要とされる。
[0070]サーバーの集合が変化する可能性がある場合、どのサーバーがコンセンサスアルゴリズムのどのインスタンスを実行するかを決定する何らかの方法が存在しなければならない。これを行う最も簡単な方法は、状態機械自体によるものである。サーバーの現在の集合は、状態の一部にされることが可能であり、通常の状態機械コマンドで変更されることが可能である。コンセンサスアルゴリズムのインスタンスi+αを実行するサーバーの集合を、i番目の状態機械コマンドの実行後の状態によって指定されるようにすることによって、リーダーがコマンドを進めることができるようにすることができる。これにより、任意に高性能化された再構成アルゴリズムの単純な実行が可能になる。
[0071]上記の説明は、いかにしてPaxosアルゴリズムを使用してフォールトトレラントな分散型システムを実装することができるかについての記述となる。Paxosプロトコルは、本明細書に記載する実施形態に関連して利用されることが可能である他のファミリーメンバーまたは変形物を含む。こうした他のファミリーメンバーには、例として、限定ではないが、いわゆるMulti−Paxos、Cheap Paxos、Fast Paxos、およびByzantine Paxosが含まれる。こうした他のファミリーメンバーは、以下に説明する様々な実施形態で利用されることが可能である。
[0072]分散合意プロトコルについて説明し、特定のプロトコルの例、すなわちPaxosプロトコルおよびその関連するファミリーメンバーの例を示したが、次に、CRUD(Create、Read、Update、Delete:作成、読み取り、更新、削除)プロトコル、および詳細にはハイパーテキストトランスポートプロトコル(HTTP)の簡単な説明を検討する。
HTTPを含むCRUDプロトコル
[0073]CRUD(Create、Read、Update、Delete)プロトコルは、リソースの作成、読み取り、更新、および削除を可能にするプロトコルのファミリーを指す。CRUDプロトコルの1つのタイプが、ハイパーテキスト転送プロトコル(HTTP)である。ハイパーテキスト転送プロトコル(HTTP)は、分散協調型ハイパーメディア情報システムのアプリケーションプロトコルであり、ワールドワイドウェブのデータ通信の基盤である。
[0074]HTTPは、クライアント−サーバーコンピューティングモデルにおいて要求−応答プロトコルとして機能する。HTTPでは、例えばウェブブラウザーが、クライアントとして働き、ウェブサイトをホストしているコンピューター上で起動中のアプリケーションが、サーバーとして機能する。クライアントは、HTTP要求メッセージをサーバーにサブミットする。サーバーは、コンテンツを格納する、またはHTMLファイルなどのリソースを提供する、またはクライアントの代わりに動作し、クライアントに応答メッセージを返す。応答は、要求に関する完了ステータス情報を含み、そのメッセージ本文にクライアントによって要求された任意のコンテンツを含むことができる。
[0075]ウェブブラウザー(またはクライアント)は、ユーザーエージェント(UA)と呼ばれることが多い。他のユーザーエージェントは、ウェブクローラー(web crawler)、または双方向音声ユーザーインターフェイスを有する音声ブラウザーのようなウェブブラウザーの変形物として知られる、検索プロバイダーによって使用されるインデックス作成ソフトウェアを含むことができる。
[0076]HTTPは、インターネットプロトコルスイートの枠組み内で設計されたアプリケーション層プロトコルである。プロトコル定義は、ホスト間のデータ転送のための信頼性のあるトランスポート層プロトコルを想定する。伝送制御プロトコル(TCP)は、このために使用されている主要なプロトコルである。しかしながら、HTTPは、ユーザーデータグラムプロトコル(UDP)のような他のプロトコル、およびシンプルサービス発見プロトコル(Simple Service Discovery Protocol:SSDP)のようなメソッドとともに使用されることが可能である。
[0077]HTTPリソースは、httpまたはhttps URI方式を使用する、統一資源識別子(URI)、または、より詳細には統一資源位置指定子(URL)によって識別され、ネットワーク上に配置される。URIおよびハイパーテキストマークアップ言語(HTML)が、インターネット上に、ハイパーテキスト文書と呼ばれる、相互リンクされたリソースのシステムを形成する。
[0078]HTTPセッションが、ネットワーク要求−応答トランザクションのシーケンスである。HTTPクライアントが、サーバー上の特定のポートへの転送制御プロトコル(TCP)接続を確立することによって要求を開始する。そのポートをリッスンしているHTTPサーバーが、クライアントの要求メッセージを待つ。要求を受信すると、サーバーは、HTTP/200 「OK」のようなステータスライン、および独自のメッセージを返送する。このメッセージの本文は、通常、要求されるリソースであるが、エラーメッセージまたは他の情報も返されることもある。
[0079]HTTPが、識別されたリソース上で行われるべき所望のアクションを示す9つのメソッド(「動詞(verb)」と呼ばれることもある)を定義する。このリソースが何を表すかは、既存のデータであれ、動的に生成されるデータであれ、サーバーの実装によって決まる。多くの場合リソースは、サーバー上にある実行ファイルのファイルまたは出力に対応する。
Figure 2015520440
[0080]HTTPプロトコルの様々な態様を説明したが、次に分散合意プロトコルを使用して、CRUD型プロトコルが状態機械としてどのようにバインドされることが可能であるかを検討する。
CRUD型プロトコルを状態機械としてバインドする
[0081]図2は、全体として200において、1つまたは複数の実施形態に従って分散合意プロトコルを使用して、CRUD型プロトコルが状態機械としてバインドされることが可能であるシステムを示す。次の説明では、同様の構成要素を示すために、図1の実施形態からの同様の数字が使用される。しかしながら、本文書に記載する技法は、任意の好適なステートレスREST(Representational State Transfer)プロトコルに関連して使用されることが可能であることは、認識され、理解されよう。
[0082]この例では、コンピューティングデバイス102が、ネットワーク112を介して1つまたは複数のサーバー114と通信する。コンピューティングデバイス102がサーバー114と通信できるようにするために、任意の好適なプロトコルが使用されることが可能である。図示され説明される実施形態では、通信は、CRUD型プロトコルを使用して行われることが可能である。特定の実施においては、CRUD型プロトコルは、HTTPを含む。
[0083]各サーバーは、この特定の例では、リバースプロキシ202を含む。リバースプロキシは、DAPモジュール204の形式で存在する分散合意プロトコル(DAP)のインスタンスを実行する。さらに、各サーバー114は、ここではサービス206で表される、ウェブまたは「クラウド」サービスのような、1つまたは複数のウェブサービスを実行する。個々のサーバーによって実行される各サービス206は、レプリカまたは冗長サービスを構成する。
[0084]動作中、各サーバー114は、サービス206が提供される分散型システムにおけるノードを構成する。常にではないが一般的にサーバーは、異なる物理的位置に地理的に分散されている。例えば、個々のサーバーは、特定の国全域にわたる、または世界中に分散されたデータセンターに配置されたサーバーを含むことがある。あるいはサーバーは、単一ラック内の個々のブレードサーバーを構成することがある。各サーバーは、そのDAPモジュール204を通して、分散合意プロトコルのインスタンスにおいて動作する。少なくとも一部の実施形態では、分散合意プロトコルは、Paxosプロトコルを含む。
[0085]HTTPのようなCRUD型プロトコルを使用して、コンピューティングデバイス102は、例えば特定のプロトコルと関連付けられた動詞を使用して操作を出す。HTTPの文脈では、このような動詞は、GET、PUT、POST、PATCH、DELETEなどを含むことができる。クライアントコンピューティングデバイス102は、分散型システムにおいて任意のノード、すなわちサーバー114と通信することができる。サーバー114がコンピューティングデバイス102から操作を受信すると、サーバー114は操作を取り込み、DAPモジュール204を使用することにより、操作の順序を選択する。詳細には、分散合意プロトコルを使用して、各サーバー上のリバースプロキシ202間で通信が行われる。サーバー間の通信により、分散合意プロトコルが使用されて、行われる操作の順序に関してコンセンサスに至る。
[0086]例えば上述のPaxosプロトコルを使用して操作の順序が合意されると、各ノード、すなわちサーバーは、サービス206の文脈において合意された順序で操作を実行することができる。このように、この例ではHTTPであるCRUD型プロトコルは、分散合意プロトコルを使用して状態機械としてバインドされる。
[0087]そこで本質的には、分散合意プロトコルにより、広く分散されている可能性がある様々なクライアントからの操作の受信が可能になる。操作は、任意の順序で届く可能性があり、いかなるサービス、すなわち「クラウドサービス」とも関連している可能性がある。分散合意プロトコルを使用すると、サーバーが、複数の異なるサーバー間で操作の順序を構築することができ、サーバーまたはノードのすべてにわたって同じ順序は同じであることを確保する。結果として、各ノードは、行われる、または行われた操作に関して同じ状態となる。
[0088]CRUD型プロトコルを使用して実行されるウェブサービスと関連して分散合意プロトコルを使用すると、例えば、分散型システム内の個々のノードまたはサーバーが動作不能になりうるとき、操作を容易にすることができる。
[0089]上述の技法を使用して実行されることが可能であるウェブサービスの例として、個々のユーザーの連絡先リストを管理するウェブサービスを検討する。この特定の連絡先リストサービスでは、ユーザーが新しい連絡先を書き入れる、連絡先を閲覧する、連絡先を更新する、および連絡先を削除することができる。また連絡先リストサービスは、上述のサーバーのようなサーバーを使用して、分散された方法で実行されると仮定する。またユーザーは、複数の異なるタイプのクライアントデバイスを使用して、連絡先リストサービスと対話することができると仮定する。例えば、例として、ユーザーが、パーソナルコンピューター、電話、ウェブブラウザー、または任意のタイプのクライアントへの連絡先リストサービスとの対話を望むことがある。
[0090]それらの特定の連絡先リストと対話するために、クライアントデバイスは、HTTP動詞の形式で操作を出す。例えば、ユーザーが、適切に構成されたユーザーインターフェイスによって、それらの連絡先のすべてを閲覧することを希望する場合、ユーザーは、HTTP GET操作が出されるようにする。同様に、連絡先を更新するには、HTTP MERGE操作が出される。連絡先を削除することは、HTTP DLELTE動作により行われ、新しい連絡先を書き入れることは、POST操作を出すことにより行われる。
[0091]連絡先リストサービスは、複数の異なるサーバー上で分散された方法で実行されるので、クライアントデバイスによって操作が出されたとき、各サーバーによって、またはより正確には各サーバー上のリバースプロキシによって実行される分散合意プロトコルが、合意された順序の操作が各サーバーで行われることを確保する。このようにして、ユーザーの連絡先リストが、分散型システムにおいてノード、すなわちサーバー全体にわたって同期された状態を維持することができる。
[0092]分散合意プロトコルを使用してCRUD型プロトコルが状態機械としてどのようにバインドされることが可能であるかを検討したが、次に、1つまたは複数の実施形態に従った例示的方法を検討する。
例示的方法
[0093]図3は、1つまたは複数の実施形態に従った方法のステップを説明する流れ図である。この方法は、任意の好適なハードウェア、ソフトウェア、ファームウェア、またはその組合せと関連して実行されることが可能である。少なくとも一部の実施形態では、この方法は、少なくとも部分的に、適切に構成されたクライアントデバイス、および1つもしくは複数の適切に構成されたサーバーによって実行されることが可能である。このために、図示した流れ図の一部は、「クライアントデバイス」として示されて、クライアントデバイスによって行われる動作を表している。同様に、流れ図の別の部分は、「リバースプロキシ」として示されて、上述のようなリバースプロキシによって、またはこれに代わって行われることが可能である動作、または動作の少なくとも一部を示す。
[0094]ステップ300は、ウェブサービスと関連する操作を出す。任意の好適な操作が、任意の好適なウェブサービスと関連して出されることが可能である。少なくとも一部の実施形態では、操作は、CRUD型操作と関連付けられる。特定の実行では、操作は、上述のようなHTTP操作と関連付けられる。ステップ302は、RESTfulウェブサーバー、すなわち、CRUD型プロトコルのようなRestfulプロトコルに準拠する、またはこれを使用するウェブサーバーに操作を伝える。図示され説明される実施形態では、ウェブサーバーは、ウェブサービスを実行し、1つまたは複数の他のウェブサーバーがウェブサービスの冗長またはレプリカを実行する分散型システムの一部を含む。
[0095]ステップ340は、RESTfulウェブサーバーへの通信を傍受する、または受信する。上記のように、このステップは、適切に構成されたリバースプロキシによって行われることが可能である。図示され説明される実施形態では、リバースプロキシは、上述のような分散合意プロトコルを支援する、あるいはそうでなければこれを使用するように構成される。特定の実行では、分散合意プロトコルは、Paxosプロトコルを含む。ステップ306は、1つまたは複数のノードで分散合意プロトコルを開始する。このステップは、任意の好適な方法で行われることが可能である。図示され説明される実施形態では、各ノードが、上述の冗長ウェブサービスを行う別のRESTfulウェブサーバーに対応する。ステップ308は、分散合意プロトコルを使用して、操作に関してコンセンサスに達する。分散合意プロトコルの利用は、冗長ウェブサービスを支援する、または受けさせる様々なサーバー間の内部通信(intra−communication)により行われることが可能である。このような内部通信の例を上に挙げている。分散合意プロトコルを使用してコンセンサスに達すると、ステップ310は、関連する操作の実行を行う、または可能にする。操作の実行は、RESTfulウェブサーバー、またはより正確には各ウェブサーバーによって使用されるリバースプロキシ間のコンセンサスによって確認された順序で行われる。操作を行うと、ステップ312は、適切な応答をクライアントデバイスに返す。いかなる適切な応答が返されることも可能である。少なくとも一部の実施形態では、返される応答は、HTTP応答の形式で存在する。
[0096]ステップ314は、クライアントデバイスにおいて、応答を受信し、通常の方法で応答を処理する。
[0097]上述の方法を使用すると、状態は、冗長ウェブサービスを実行する複数の異なるサーバー間で維持されることが可能である。RESTful型プロトコル、例えばCRUD型プロトコルと関連する分散合意プロトコルの使用により、RESTfulウェブサーバーは、状態を保存し、ウェブサーバー全体にわたって行われる操作に関して同期された状態を維持するように足並みを揃えて操作されることが可能である。
[0098]様々な実施形態を検討したが、次に、上述の実施形態を実行するために利用されることが可能である例示的システムおよびデバイスを検討する。
例示的システムおよびデバイス
[0099]図4は、図1を参照して説明したコンピューティングデバイス102を含んだ例示的システム400を示す。例示的システム400は、パーソナルコンピューター(PC)、テレビ装置、および/またはモバイルデバイスでアプリケーションを実行時のシームレスなユーザー体験のためのユビキタス環境を可能にする。アプリケーションを使用する、ビデオゲームをプレイする、ビデオを観る、その他を行いながら、あるデバイスから次のデバイスへ移るとき、サービスおよびアプリケーションが、一般的なユーザー体験に対する3つの環境すべてにおいて、実質的に同様に動作する。
[00100]例示的システム400では、複数のデバイスが、中央コンピューティングデバイスを介して相互接続される。中央コンピューティングデバイスは、複数のデバイスに対してローカルにあることがある、または複数のデバイスからリモートに位置していることがある。1つの実施形態では、中央コンピューティングデバイスは、ネットワーク、インターネット、または他のデータ通信リンクを介して複数のデバイスに接続されている1つまたは複数のサーバーコンピューターのクラウドとすることができる。1つの実施形態では、この相互接続アーキテクチャにより、複数のデバイスにわたって機能が配信されて、複数のデバイスのユーザーに共通の、シームレスな体験を提供することができるようになる。複数のデバイスのそれぞれは、異なる物理的要件および能力を有する可能性があり、中央コンピューティングデバイスは、デバイスに合わせられ、なおかつすべてのデバイスに共通の、デバイスへの体験の配信を可能にするプラットフォームを使用する。1つの実施形態では、ターゲットデバイスのクラスが作成され、体験は、デバイスの汎用クラス(generic class)に合わせられる。デバイスのクラスは、物理的特徴、使用のタイプ、またはデバイスの他の共通の特徴によって定義されることが可能である。
[00101]様々な実行において、コンピューティングデバイス102は、コンピューター402利用、モバイル404利用、およびテレビ406利用のためなど、様々な異なる構成を想定することができる。これらの構成のそれぞれが、一般的に異なる構成および能力を有する可能性があるデバイスを含み、したがって、コンピューティングデバイス102は、異なるデバイスクラスの1つまたは複数に従って構成されることが可能である。例えば、コンピューティングデバイス102は、パーソナルコンピューター、デスクトップコンピューター、マルチスクリーンコンピューター、ラップトップコンピューター、ネットブックなどを含むコンピューター402クラスのデバイスとして実装されることが可能である。これらの異なる構成のそれぞれが、(1つまたは複数の)アプリケーション108、ウェブブラウザー110、およびオペレーティングシステム111を含めることにより説明されるように、本明細書に記載する技法を使用することができる。
[00102]コンピューティングデバイス102は、携帯電話、携帯音楽プレーヤー、携帯ゲーム機、タブレットコンピューター、マルチスクリーンコンピューターなどのモバイルデバイスを含むモバイル404クラスのデバイスとして実装されることも可能である。コンピューティングデバイス102は、不定期の視聴環境で一般的により大きい画面を有する、またはこれに接続されたデバイスを含むテレビ406クラスのデバイスとして実装されることも可能である。これらのデバイスは、テレビ、セットトップボックス、ゲーム機本体などを含む。本明細書に記載する技法は、これらの様々な構成のコンピューティングデバイス102によって支援されることが可能であり、本明細書に記載する特定の例の技法に限定されない。
[00103]クラウド408は、コンテンツサービス412のためのプラットフォーム410を含む、および/またはプラットフォーム410を表すものである。プラットフォーム410は、クラウド408のハードウェア(例えば、サーバー)およびソフトウェアリソースの基本的な機能を抽象化する。コンテンツサービス412は、コンピューターデバイス102から遠く離れているサーバー上でコンピューター処理が行われる間に利用されることが可能であるアプリケーションおよび/またはデータを含むことができる。コンテンツサービス412(例えば、クラウドサービスまたはウェブサービス)は、インターネットを通じたおよび/またはセルラー網もしくはWi−Fi網のような加入者網を介したサービスとして提供されることが可能である。
[00104]プラットフォーム410は、リソースおよび機能を抽象化して、コンピューティングデバイス102を他のコンピューティングデバイスと接続することができる。プラットフォーム410は、リソースのスケーリングを抽象化するのに役立ち、プラットフォーム410を介して実装されるコンテンツサービス412の生じた需要に、対応するレベルのスケールを提供することもできる。したがって、相互接続されたデバイスの実施形態では、本明細書に記載する機能の実装は、システム400全体にわたって分散されることが可能である。例えば、機能は、部分的にはコンピューティングデバイス102に、ならびにクラウド408の機能を抽象化するプラットフォーム410を介して、実装されることが可能である。
[00105]図5は、本明細書に記載する技法の実施形態を実装する上述の任意のタイプのコンピューティングデバイスとして実装されることが可能である例示的デバイス500の様々な構成要素を示す。デバイス500は、デバイスデータ504(例えば、受信されたデータ、受信中のデータ、ブロードキャストをスケジュールされたデータ、データのデータパケットなど)の有線および/または無線通信を可能にする通信デバイス502を含む。デバイスデータ504、または他のデバイスコンテンツは、デバイスの構成設定、デバイス上に格納されたメディアコンテンツ、および/またはデバイスのユーザーと関連する情報を含むことができる。デバイス500に格納されたメディアコンテンツは、任意のタイプの音声、映像、および/または画像データを含むことができる。デバイス500は、1つまたは複数のデータ入力装置506を含み、これを介して、ユーザーが選択可能な入力、メッセージ、音楽、テレビメディアコンテンツ、録画コンテンツ、ならびに任意のコンテンツおよび/またはデータソースから受信されるその他のタイプの音声、映像、および/または画像データなど、任意の他のタイプのデータ、メディアコンテンツ、および/または入力が受信されることが可能である。
[00106]デバイス500は、シリアルおよび/またはパラレルインターフェイス、無線インターフェイス、任意のタイプのネットワークインターフェイス、モデムのうちのいずれか1つまたは複数として、および任意の他のタイプの通信インターフェイスとして実装されることが可能である通信インターフェイス508もまた含む。通信インターフェイス508は、デバイス500と、通信網との間に、接続リンクおよび/または通信リンクを提供し、これにより他の電子装置、コンピューティング装置、および通信装置は、デバイス500とデータを通信する。
[00107]デバイス500は、デバイス500の動作を制御するための、および本明細書に記載した技法の実施形態を実行するための、様々なコンピューター実行可能な命令を処理する1つまたは複数のプロセッサ510(例えば、マイクロプロセッサ、コントローラーなどのいずれか)を含む。代替的に、または追加として、デバイス500は、全体的に512で識別される処理回路および制御回路と関連して実装されるハードウェア、ファームウェア、または固定論理回路のいずれか1つまたは組合せで実装されることが可能である。図示していないが、デバイス500は、デバイス内の様々な構成要素を結合するシステムバスまたはデータ転送システムを含むことができる。システムバスは、メモリバスもしくはメモリコントローラー、周辺機器用バス、ユニバーサルシリアルバス、および/または様々なバスアーキテクチャのいずれかを使用するプロセッサバスもしくはローカルバスなど、様々なバス構造のいずれか1つまたは組合せを含むことができる。
[00108]デバイス500は、1つまたは複数のメモリ要素などのコンピューター可読媒体514もまた含み、その例には、ランダムアクセスメモリ(RAM)、不揮発性メモリ(例えば、リードオンリーメモリ(ROM)、フラッシュメモリ、EPROM、EEPROMなどのうち任意の1つまたは複数)、およびディスク記憶装置が含まれる。ディスク記憶装置は、ハードディスクドライブ、記録可能および/または書き換え可能コンパクトディスク(CD)、任意のタイプのデジタル多用途ディスク(DVD)などのような、任意のタイプの磁気記憶装置または光記憶装置として実装されることが可能である。デバイス500は、大容量記憶媒体装置516を含むこともできる。
[00109]コンピューター可読媒体514は、デバイスデータ504、ならびに様々なデバイスアプリケーション518、およびデバイス500の操作面に関する任意のその他のタイプの情報および/またはデータを格納するためのデータ記憶機構を提供する。例えば、オペレーティングシステム520は、コンピューター可読媒体514とともにコンピューターアプリケーションとして管理され、プロセッサ510上で実行されることが可能である。デバイスアプリケーション518は、デバイスマネージャ(例えば、制御アプリケーション、ソフトウェアアプリケーション、信号処理および制御モジュール、特定のデバイスに固有のコード、特定のデバイスのハードウェアアブストラクションレイヤなど)を含むことができる。デバイスアプリケーション518は、本明細書に記載する技法の実施形態を実行する任意のシステム構成要素またはモジュールもまた含む。この例では、デバイスアプリケーション518は、ソフトウェアモジュールおよび/またはコンピューターアプリケーションとして示されるインターフェイスアプリケーション522および入力/出力モジュール524を含む。入力/出力モジュール524は、タッチスクリーン、トラックパッド、カメラ、マイクなど、入力を取り込むように構成されたデバイスとのインターフェイスを提供するように使用されるソフトウェアを表す。代替的に、または追加として、インターフェイスアプリケーション522および入力/出力モジュール524は、ハードウェア、ソフトウェア、ファームウェア、またはその任意の組合せとして実装されることが可能である。さらに、入力/出力モジュール524は、視覚入力および音声入力をそれぞれ取り込むための別個のデバイスなど、複数の入力デバイスを支援するように構成されることが可能である。
[00110]デバイス500は、音声データを音声システム528に提供する、および/または映像データを表示システム530に提供する、音声および/または映像入力−出力システム526もまた含む。音声システム528および/または表示システム530は、音声、映像、および画像データを処理する、表示する、および/または他の場合はレンダリングするいかなるデバイスも含むことができる。映像信号および音声信号は、RF(高周波)リンク、S映像リンク、コンポジット映像リンク、コンポーネント映像リンク、DVI(デジタルビデオインターフェイス)、アナログ音声接続、または他の同様の通信リンクを介して、装置500から音声デバイスへ、および/または表示装置へ通信されることが可能である。一実施形態では、音声システム528および/または表示システム530は、デバイス500の外部構成要素として実装される。あるいは、音声システム528および/または表示システム530は、例示のデバイス500の内蔵構成要素として実装される。
結論
[00111]様々な実施形態により、「クラウド」サービスのような、冗長サービスまたはレプリカサービスが、地理的に分散された場所で実行されることが可能になる。各レプリカは、一般的に、すべてのレプリカにわたって全く同じように行われる操作を行うことができる。1つの場所において中断が発生した場合、他の場所にあるサービスが、迅速に、かつ自動的に、操作を引き継ぐことができる。
[00112]1つまたは複数の実施形態では、分散合意プロトコルが使用されて、CRUD型プロトコルを状態機械としてバインドする。バインドは、サービスが分散される場所のそれぞれに配置されたリバースプロキシを使用することにより行われる。少なくとも一部の実施形態では、分散合意プロトコルは、Paxosプロトコルもしくはその変形物として実装される、および/またはCRUD型プロトコルは、HTTPプロトコルを含む。
[00113]主題について、構造的特徴および/または方法論的動作に特有の言語で説明したが、添付の特許請求の範囲において定義される主題は、必ずしも上記の特定の特徴または動作に限定されないことを理解されたい。むしろ上記の特定の特徴および動作は、特許請求の範囲を実施する例示的な形態として開示される。

Claims (10)

  1. コンピューターにより実行される方法であって、
    RESTfulウェブサーバーに向けられた、前記RESTfulウェブサーバーによって実行されるウェブサービスによって行われる操作と関連する通信を受信するステップと、
    前記受信するステップに応答して、1つまたは複数のノードと分散合意(distributed agreement)プロトコルを開始するステップと、
    前記分散合意プロトコルを使用して、前記ノードの間で前記操作に関連してコンセンサス(consensus)に達するステップと、
    前記操作の実行を可能にするステップと
    を含む方法。
  2. 各ノードが、前記ウェブサービスを実行する異なるRESTfulウェブサーバーに対応する、請求項1に記載の方法。
  3. 各ノードが、前記ウェブサービスを実行する異なる地理的位置(geographically-located)のRESTfulウェブサーバーに対応する、請求項1に記載の方法。
  4. 前記操作が、CRUD型操作、またはHTTP操作のうちの1つを含む、請求項1に記載の方法。
  5. 前記分散合意プロトコルが、Paxosプロトコルを含む、請求項1に記載の方法。
  6. 前記受信するステップが、リバースプロキシ構成要素(component)によって行われる、請求項1に記載の方法。
  7. 前記操作が、HTTP操作を含み、前記分散合意プロトコルが、Paxosプロトコルを含む、請求項1に記載の方法。
  8. コンピューター可読命令を具体化する(embodying)1つまたは複数のコンピューター可読記憶媒体であって、実行されるとき、
    RESTfulウェブサーバーに向けられた、前記RESTfulウェブサーバーによって実行されるウェブサービスによって行われる操作と関連する通信を受信するステップと、
    前記受信するステップに応答して、1つまたは複数のノードと分散合意プロトコルを開始するステップであって、各ノードが、前記ウェブサービスを実行する異なるRESTfulウェブサーバーに対応するステップと、
    前記分散合意プロトコルを使用して、前記ノードの間で前記操作に関連してコンセンサスに達するステップと、
    前記操作の実行を可能にするステップと
    を含む方法を実行する、1つまたは複数のコンピューター可読記憶媒体。
  9. 前記操作が、CRUD型操作を含み、前記分散合意プロトコルが、Paxosプロトコルを含む、請求項8に記載の1つまたは複数のコンピューター可読記憶媒体。
  10. 前記操作が、HTTP型操作を含み、前記分散合意プロトコルが、Paxosプロトコルを含む、請求項8に記載の1つまたは複数のコンピューター可読記憶媒体。
JP2015507075A 2012-04-20 2013-04-15 分散合意プロトコルにおいてcrud型のプロトコルをバインドする Active JP6275693B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/452,433 US9313252B2 (en) 2012-04-20 2012-04-20 Binding crud-type protocols in distributed agreement protocols
US13/452,433 2012-04-20
PCT/US2013/036519 WO2013158514A1 (en) 2012-04-20 2013-04-15 Binding crud-type protocols in distributed agreement protocols

Publications (2)

Publication Number Publication Date
JP2015520440A true JP2015520440A (ja) 2015-07-16
JP6275693B2 JP6275693B2 (ja) 2018-02-07

Family

ID=48184522

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015507075A Active JP6275693B2 (ja) 2012-04-20 2013-04-15 分散合意プロトコルにおいてcrud型のプロトコルをバインドする

Country Status (6)

Country Link
US (2) US9313252B2 (ja)
EP (2) EP2839629B1 (ja)
JP (1) JP6275693B2 (ja)
KR (1) KR101996624B1 (ja)
CN (1) CN104247380B (ja)
WO (1) WO2013158514A1 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9313252B2 (en) * 2012-04-20 2016-04-12 Microsoft Technology Licensing, Llc Binding crud-type protocols in distributed agreement protocols
US9215131B2 (en) * 2012-06-29 2015-12-15 Cisco Technology, Inc. Methods for exchanging network management messages using UDP over HTTP protocol
US9329950B2 (en) * 2014-01-01 2016-05-03 International Business Machines Corporation Efficient fail-over in replicated systems
US10369461B2 (en) 2014-01-24 2019-08-06 Nvidia Corporation Cloud gaming system and method of initiating a gaming session
US10362059B2 (en) 2014-09-24 2019-07-23 Oracle International Corporation Proxy servers within computer subnetworks
CN105577711B (zh) * 2014-10-08 2019-05-03 华为技术有限公司 消息处理方法、装置及消息处理***
EP3062260B1 (en) 2015-02-27 2017-05-31 Sap Se A method for controlling access to electronic documents using locks
US9934092B2 (en) * 2016-07-12 2018-04-03 International Business Machines Corporation Manipulating a distributed agreement protocol to identify a desired set of storage units
US11100086B2 (en) * 2018-09-25 2021-08-24 Wandisco, Inc. Methods, devices and systems for real-time checking of data consistency in a distributed heterogenous storage system
FR3088159A1 (fr) * 2018-11-05 2020-05-08 Orange Gestion d'une communication entre un terminal de communication appelant, disposant d'un identifiant d'appel principal et d'un identifiant d'appel secondaire, et un terminal de communication appele.
US11451465B1 (en) 2021-03-04 2022-09-20 Cisco Technology, Inc. In-order fault tolerant consensus logs for replicated services
US11909528B2 (en) 2021-03-04 2024-02-20 Cisco Technology, Inc. Safely overwriting decided slots
JP7225298B2 (ja) * 2021-04-07 2023-02-20 株式会社日立製作所 分散合意方法、分散システム及び分散合意プログラム

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010122773A (ja) * 2008-11-18 2010-06-03 Hitachi Ltd 分散処理システム、処理割当方法、および情報処理装置
JP2010191706A (ja) * 2009-02-18 2010-09-02 Nippon Telegr & Teleph Corp <Ntt> Webシステムにおける分散処理方法およびwebシステムにおける分散処理システム
JP2012048679A (ja) * 2010-08-30 2012-03-08 Fujitsu Ltd 中継装置、中継方法及び中継プログラム

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7409431B2 (en) * 2002-09-13 2008-08-05 Canon Kabushiki Kaisha Server apparatus, communications method, program for making computer execute the communications method, and computer-readable storage medium containing the program
US20150088982A1 (en) * 2006-09-25 2015-03-26 Weaved, Inc. Load balanced inter-device messaging
US7987471B2 (en) * 2007-01-26 2011-07-26 Microsoft Corporation Mobile device management proxy system
US8352482B2 (en) 2009-07-21 2013-01-08 Vmware, Inc. System and method for replicating disk images in a cloud computing based virtual machine file system
US8234518B2 (en) 2009-07-21 2012-07-31 Vmware, Inc. Method for voting with secret shares in a distributed system
US8335765B2 (en) 2009-10-26 2012-12-18 Amazon Technologies, Inc. Provisioning and managing replicated data instances
JP5123961B2 (ja) * 2010-02-04 2013-01-23 株式会社トライテック 分散コンピューティングシステム、分散コンピューティング方法及び分散コンピューティング用プログラム
US8745272B2 (en) 2010-03-12 2014-06-03 Salesforce.Com, Inc. Service cloud console
US9483570B2 (en) * 2010-12-30 2016-11-01 International Business Machines Corporation Driving a user experience of a web application using rules that establish or change requests based on user behavior
US20120331038A1 (en) * 2011-06-23 2012-12-27 Lin Yang Systems and methods for processing web service piped network requests
US9313252B2 (en) * 2012-04-20 2016-04-12 Microsoft Technology Licensing, Llc Binding crud-type protocols in distributed agreement protocols

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010122773A (ja) * 2008-11-18 2010-06-03 Hitachi Ltd 分散処理システム、処理割当方法、および情報処理装置
JP2010191706A (ja) * 2009-02-18 2010-09-02 Nippon Telegr & Teleph Corp <Ntt> Webシステムにおける分散処理方法およびwebシステムにおける分散処理システム
JP2012048679A (ja) * 2010-08-30 2012-03-08 Fujitsu Ltd 中継装置、中継方法及び中継プログラム

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
斉藤 賢哉: "思いのままにアプリケーション連携 RESTful Webサービスを実現するJAX−RSの使い方", DB MAGAZINE, vol. 第20巻 第5号, JPN6017015034, 27 July 2010 (2010-07-27), JP, pages 028〜033 *
柿崎 淑郎: "SCIMによる異認証技術間相互運用性の検討", 電子情報通信学会2012年総合大会講演論文集, JPN6017015037, 22 March 2012 (2012-03-22), JP, pages 211 *

Also Published As

Publication number Publication date
CN104247380B (zh) 2018-02-06
KR101996624B1 (ko) 2019-07-04
CN104247380A (zh) 2014-12-24
US20130282789A1 (en) 2013-10-24
US9313252B2 (en) 2016-04-12
EP3624426A1 (en) 2020-03-18
JP6275693B2 (ja) 2018-02-07
EP2839629B1 (en) 2019-06-26
US10193951B2 (en) 2019-01-29
KR20150005547A (ko) 2015-01-14
EP3624426B1 (en) 2021-05-26
EP2839629A1 (en) 2015-02-25
WO2013158514A1 (en) 2013-10-24
US20160197976A1 (en) 2016-07-07

Similar Documents

Publication Publication Date Title
JP6275693B2 (ja) 分散合意プロトコルにおいてcrud型のプロトコルをバインドする
JP6220338B2 (ja) フォールトトレラント外部アプリケーションサーバ
US10491523B2 (en) Load distribution in data networks
CN102467723B (zh) 用于在查看型社交网络中向用户提供推荐的***和方法
US10002141B2 (en) Distributed database in software driven networks
JP4900982B2 (ja) サーバ・クラスタにおいてフェイルオーバを管理するための方法、フェイルオーバ・サーバ及びコンピュータ・プログラム
US7167678B2 (en) Persistent peer-to-peer networking over a piconet network
US7987266B2 (en) Failover in proxy server networks
CN105579960B (zh) 计算会话的管理
US11539803B2 (en) Highly available private cloud service
US8082351B1 (en) Software load balancing for session requests that maintain state information
US11265183B1 (en) Asynchronous meeting management for collaboration solutions
WO2014063658A1 (zh) 一种内容同步的方法和装置
JP2018512084A (ja) 高度にスケーラブルでフォールトトレラントなリモートアクセスアーキテクチャと、当該リモートアクセスアーキテクチャに接続する方法
WO2013024342A1 (en) Method for flow control and for reliable communication in a collaborative environment
US8821296B1 (en) Network gaming system and casino management system link
JP2017513151A (ja) プライベートクラウド接続装置クラスタアーキテクチャ
US8627412B2 (en) Transparent database connection reconnect
CN112540827A (zh) 一种基于k8s平台的负载均衡***及实现方法
CN103581176A (zh) 会话初始协议sip消息注册刷新的方法及装置
JP2012108909A (ja) モバイルメッセージングサービスにおけるファイル送信をサポートするファイル送信管理システム及びファイル送信管理方法
Sedivy et al. Mcsync-distributed, decentralized database for mobile devices
JP2013516900A (ja) ピアツーピアコンピュータ環境の資源の利用
JP4224037B2 (ja) サービス提供方法、及びデータ処理装置
Islam et al. AOE: a mobile operating environment for Web-based applications

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160309

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170428

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170713

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20171004

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20171004

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180110

R150 Certificate of patent or registration of utility model

Ref document number: 6275693

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250