分散コンピューティングは、相互通信コンポーネントが異なるネットワーク上のコンピュータ上に配置されているコンピュータシステムとして定義される分散システムを研究するコンピュータサイエンスの分野です。[1] [2]
分散システムのコンポーネントは、共通の目標を達成するために、メッセージを相互に渡すことによって通信し、アクションを調整します。 分散システムの 3 つの重要な課題は、コンポーネントの同時実行性の維持、グローバル クロックの欠如の克服、コンポーネントの独立した障害の管理です。[1] 1 つのシステムのコンポーネントに障害が発生しても、システム全体に障害が発生することはありません。[3]分散システムの例は、SOA ベースのシステムからマイクロサービス、大規模マルチプレイヤー オンライン ゲーム、ピアツーピア アプリケーションまで多岐にわたります。 分散システムは、主に追加のハードウェア、サーバー、ゲートウェイ、ファイアウォール、新しいサブネット、プロキシなどのニーズが増加するため、モノリシック アーキテクチャよりも大幅にコストがかかります。[4]また、分散システムは、分散コンピューティングの誤解に陥りがちです。 一方、適切に設計された分散システムは、単一のマシンに展開されたモノリシック アプリケーションよりもスケーラブルで、耐久性があり、変更しやすく、微調整されています。[5]マーク・ブルッカーによれば、「システムは、追加ワークロードの限界費用がほぼ一定である範囲でスケーラブルである」。サーバーレス技術はこの定義に適合しますが、インフラコストだけでなく総所有コストも考慮する必要があります。[6]
分散システム内で実行されるコンピュータプログラムは分散プログラムと呼ばれ、[ 7 ]分散プログラミングはそのようなプログラムを書くプロセスです。[8]メッセージパッシングメカニズムの実装には、純粋なHTTP、 RPCのようなコネクタ、メッセージキューなど、さまざまな種類があります。[9]
分散コンピューティングは、分散システムを使用して計算上の問題を解決することも指します。分散コンピューティングでは、問題は多くのタスクに分割され、各タスクは1台以上のコンピュータによって解決され、[10]コンピュータはメッセージパッシングを介して相互に通信します。[11]
導入
「分散システム」「分散プログラミング」「分散アルゴリズム」などの用語で使われる「分散」という言葉は、もともとは個々のコンピュータが物理的に特定の地理的領域内に分散しているコンピュータネットワークを指していました。[12]この用語は現在でははるかに広い意味で使用されており、物理的に同じコンピュータ上で実行され、メッセージの受け渡しによって相互にやり取りする自律的なプロセスを指すこともあります。 [11]
分散システムには単一の定義はありませんが、[13]次のような定義特性が一般的に使用されています。
- いくつかの自律的な計算エンティティ(コンピュータまたはノード)があり、それぞれが独自のローカルメモリを持っています。[14]
- エンティティはメッセージパッシングによって互いに通信します。[15]
分散システムは、大規模な計算問題を解決するなど、共通の目標を持つ場合があります。[16]その場合、ユーザーは自律プロセッサの集合を1つのユニットとして認識します。または、各コンピュータに個別のニーズを持つユーザーがいる場合があり、分散システムの目的は、共有リソースの使用を調整したり、ユーザーに通信サービスを提供したりすることです。[17]
分散システムのその他の一般的な特性は次のとおりです。
- システムは個々のコンピュータの障害を許容する必要がある。[18]
- システムの構造(ネットワークトポロジー、ネットワーク遅延、コンピュータの数)は事前にわかっておらず、システムはさまざまな種類のコンピュータとネットワークリンクで構成されている可能性があり、分散プログラムの実行中にシステムが変化する可能性があります。[19]
- 各コンピュータはシステムについて限定的で不完全な情報しか持ちません。各コンピュータは入力の一部しか知らない可能性があります。[20]
パターン
分散コンピューティングに使用される一般的なアーキテクチャパターンは次のとおりです。 [21]
並列および分散コンピューティング

(c): 並列システム。
分散システムは、ネットワーク化されたコンピュータのグループであり、作業の目的が共通しています。「同時コンピューティング」、「並列コンピューティング」、「分散コンピューティング」という用語は重複する部分が多く、明確な区別はありません。[22]同じシステムが「並列」と「分散」の両方の特徴を持つ場合があります。一般的な分散システムのプロセッサは、同時に並列に実行されます。[23]並列コンピューティングは、分散コンピューティングの特に密結合された形式と見なすことができ、[24]分散コンピューティングは、並列コンピューティングの疎結合された形式と見なすことができます。[13]ただし、次の基準を使用して、同時システムを「並列」または「分散」として大まかに分類できます。
- 並列コンピューティングでは、すべてのプロセッサが共有メモリにアクセスしてプロセッサ間で情報を交換することができます。[25]
- 分散コンピューティングでは、各プロセッサは独自のプライベートメモリ(分散メモリ)を持ちます。情報はプロセッサ間でメッセージを渡すことによって交換されます。[26]
右の図は、分散システムと並列システムの違いを示しています。図 (a) は、一般的な分散システムの概略図です。システムは、各ノードがコンピュータであり、ノードを接続する各線が通信リンクであるネットワーク トポロジとして表されます。図 (b) は、同じ分散システムの詳細を示しています。各コンピュータには独自のローカル メモリがあり、利用可能な通信リンクを使用して 1 つのノードから別のノードにメッセージを渡すことによってのみ情報を交換できます。図 (c) は、各プロセッサが共有メモリに直接アクセスできる並列システムを示しています。
状況はさらに複雑で、並列アルゴリズムと分散アルゴリズムという用語の従来の用法は、上記の並列システムと分散システムの定義とはあまり一致しません(詳細については以下を参照)。とはいえ、経験則として、共有メモリ型マルチプロセッサでの高性能並列計算には並列アルゴリズムが使用され、大規模分散システムの調整には分散アルゴリズムが使用されます。[27]
歴史
メッセージパッシングを介して通信する並行プロセスの使用は、1960年代に研究されたオペレーティングシステムアーキテクチャにその起源があります。 [28]最初に広く普及した分散システムは、1970年代に発明されたイーサネットなどのローカルエリアネットワークでした。[29]
インターネットの前身の一つであるARPANETは1960年代後半に導入され、ARPANET電子メールは1970年代初頭に発明されました。電子メールはARPANETの最も成功したアプリケーションとなり、[30]おそらく大規模分散アプリケーションの最も初期の例です。ARPANET(およびその後継であるグローバルインターネット)に加えて、初期の世界的なコンピュータネットワークには1980年代のUsenetとFidoNetがあり、どちらも分散ディスカッションシステムをサポートするために使用されました。[31]
分散コンピューティングの研究は、1970年代後半から1980年代初頭にかけて、コンピュータサイエンスの独立した分野となりました。この分野で最初の会議である分散コンピューティングの原理に関するシンポジウム(PODC)は1982年に開催され、そのカウンターパートである分散コンピューティングに関する国際シンポジウム(DISC)は、1985年にオタワでグラフ上の分散アルゴリズムに関する国際ワークショップとして初めて開催されました。[32]
アーキテクチャ
分散コンピューティングには、さまざまなハードウェアおよびソフトウェアアーキテクチャが使用されています。低レベルでは、ネットワークが回路基板上に印刷されているか、疎結合されたデバイスとケーブルで構成されているかどうかに関係なく、複数のCPUを何らかのネットワークで相互接続する必要があります。高レベルでは、それらのCPUで実行されているプロセスを何らかの通信システムで相互接続する必要があります。[33]
これらの CPU がリソースを共有するかどうかによって、3 種類のアーキテクチャの最初の区別が決まります。
分散プログラミングは、通常、クライアント・サーバー、3層、n層、ピアツーピアなどの基本的なアーキテクチャ、または疎結合、密結合などのカテゴリのいずれかに分類されます。[34]
- クライアント サーバー: スマート クライアントがサーバーにデータを取得し、それをフォーマットしてユーザーに表示するアーキテクチャ。クライアントの入力は、永続的な変更を表す場合にサーバーにコミットされます。
- 3 層:ステートレスクライアントを使用できるように、クライアント インテリジェンスを中間層に移動するアーキテクチャ。これにより、アプリケーションの展開が簡素化されます。ほとんどの Web アプリケーションは 3 層です。
- n層: 通常は、リクエストを他のエンタープライズ サービスに転送する Web アプリケーションを指すアーキテクチャ。このタイプのアプリケーションは、アプリケーション サーバーの成功に最も貢献します。
- ピアツーピア: サービスを提供したりネットワークリソースを管理したりする特別なマシンが存在しないアーキテクチャ。[35] : 227 代わりに、すべての責任はピアと呼ばれるすべてのマシン間で均一に分割されます。ピアはクライアントとしてもサーバーとしても機能できます。[36]このアーキテクチャの例には、 BitTorrentやビットコインネットワークがあります。
分散コンピューティング アーキテクチャのもう 1 つの基本的な側面は、同時プロセス間で通信し、作業を調整する方法です。さまざまなメッセージ パッシング プロトコルを通じて、プロセスは、通常はメイン/サブの関係で直接通信できます。または、「データベース中心」アーキテクチャでは、共有データベースを使用して、直接的なプロセス間通信を行わずに分散コンピューティングを実行できます。[37]特に、データベース中心のアーキテクチャは、ライブ環境のリレーを可能にする図式的なアーキテクチャでリレーショナル処理分析を提供します。これにより、ネットワーク データベースのパラメーター内外の両方で分散コンピューティング機能が可能になります。[38]
アプリケーション
分散システムと分散コンピューティングを使用する理由としては、次のようなものが挙げられます。
- アプリケーションの性質上、複数のコンピューターを接続する通信ネットワークの使用が必要になる場合があります。たとえば、ある物理的な場所で生成されたデータが別の場所で必要になる場合などです。
- 原理的には単一のコンピュータの使用が可能な場合が多くありますが、実用上の理由から分散システムの使用が有利です。例:
例
分散システムと分散コンピューティングのアプリケーションの例には以下のものがある。[40]
- 通信ネットワーク:
- ネットワークアプリケーション:
- ワールドワイドウェブとピアツーピアネットワーク、
- 大規模マルチプレイヤーオンラインゲームや仮想現実コミュニティ、
- 分散データベースおよび分散データベース管理システム、
- ネットワークファイルシステム、
- バーストバッファなどの分散キャッシュ、
- 銀行システムや航空会社の予約システムなどの分散情報処理システム。
- リアルタイムプロセス制御:
- 並列計算:
- 科学計算(クラスターコンピューティング、グリッドコンピューティング、クラウドコンピューティングなど)[41]およびさまざまなボランティアコンピューティングプロジェクト、
- コンピュータグラフィックスにおける分散レンダリング。
- ピアツーピア
リアクティブ分散システム
リアクティブマニフェストによると、リアクティブ分散システムは、応答性、回復力、弾力性、メッセージ駆動型です。したがって、リアクティブシステムはより柔軟で、疎結合で、スケーラブルです。システムをリアクティブにするには、リアクティブ原則を実装することをお勧めします。リアクティブ原則は、クラウドネイティブアプリケーションとエッジネイティブアプリケーションをよりリアクティブにするのに役立つ一連の原則とパターンです。[42]
理論的基礎
モデル
コンピュータを使用して自動化したいタスクの多くは、質問と回答のタイプのものです。つまり、質問をすると、コンピュータが回答を生成する必要があります。理論計算機科学では、このようなタスクは計算問題と呼ばれます。正式には、計算問題はインスタンスと各インスタンスのソリューションで構成されます。インスタンスは尋ねることができる質問であり、ソリューションはこれらの質問に対する望ましい回答です。
理論計算機科学は、どの計算問題が計算機を使って解けるのか(計算可能性理論)、またどの程度効率的に解けるのか(計算複雑性理論)を理解しようとするものである。伝統的に、与えられたインスタンスに対して正しい解を出すアルゴリズムを設計できれば、その問題は計算機を使って解けると言われている。そのようなアルゴリズムは、汎用計算機上で動作する計算機プログラムとして実装できる。つまり、プログラムは入力から問題のインスタンスを読み取り、何らかの計算を行い、出力として解を出す。ランダムアクセスマシンやユニバーサルチューリングマシンなどの形式主義は、そのようなアルゴリズムを実行する逐次型汎用計算機の抽象モデルとして使用できる。[43] [44]
同時実行および分散コンピューティングの分野では、複数のコンピューター、または相互作用するプロセスのネットワークを実行するコンピューターの場合に、同様の質問を研究しています。そのようなネットワークでは、どのような計算上の問題が、どの程度効率的に解決できるでしょうか。ただし、同時実行または分散システムの場合、「問題を解決する」とはどういう意味なのかはまったく明らかではありません。たとえば、アルゴリズム設計者のタスクは何なのか、また、逐次型汎用コンピューターの同時実行または分散版とは何なのかなどです。[引用が必要]
以下の説明では複数のコンピューターの場合に焦点を当てていますが、多くの問題は単一のコンピューターで実行される同時プロセスでも同じです。
一般的に使用される 3 つの視点は次のとおりです。
- 共有メモリモデルにおける並列アルゴリズム
- すべてのプロセッサは共有メモリにアクセスできます。アルゴリズム設計者は、各プロセッサで実行されるプログラムを選択します。
- 1つの理論モデルは、並列ランダムアクセスマシン(PRAM)です。[45]しかし、古典的なPRAMモデルは、共有メモリへの同期アクセスを想定しています。
- 基盤となるオペレーティング システムがノード間の通信をカプセル化し、すべての個別システムにわたってメモリを仮想的に統合する場合、共有メモリ プログラムを分散システムに拡張できます。
- 実際のマルチプロセッサマシンの動作に近く、比較スワップ(CAS)などのマシン命令の使用を考慮したモデルは、非同期共有メモリのモデルです。このモデルについては幅広い研究が行われており、その概要は文献に記載されています。[46] [47]
- メッセージパッシングモデルにおける並列アルゴリズム
- アルゴリズム設計者は、ネットワークの構造と、各コンピューターで実行されるプログラムを選択します。
- ブール回路やソーティングネットワークなどのモデルが使用される。[48]ブール回路はコンピュータネットワークとして見ることができます。各ゲートは非常に単純なコンピュータプログラムを実行するコンピュータです。同様に、ソーティングネットワークはコンピュータネットワークとして見ることができます。各コンパレータはコンピュータです。
- メッセージパッシングモデルにおける分散アルゴリズム
- アルゴリズム設計者はコンピュータ プログラムを選択するだけです。すべてのコンピュータは同じプログラムを実行します。システムはネットワークの構造に関係なく正しく動作する必要があります。
- 一般的に使用されるモデルは、ノードごとに1 つの有限状態マシンを持つグラフです。
分散アルゴリズムの場合、計算上の問題は通常グラフに関連しています。多くの場合、コンピュータネットワークの構造を記述するグラフが問題のインスタンスとなります。これは次の例で示されています。[49]
例
与えられたグラフGの色付けを求める計算問題を考えてみましょう。分野によって次のようなアプローチが考えられます。
- 集中型アルゴリズム[49]
- グラフGは文字列としてエンコードされ、その文字列がコンピュータへの入力として与えられます。コンピュータ プログラムはグラフの色付けを見つけ、その色付けを文字列としてエンコードし、結果を出力します。
- 並列アルゴリズム
- グラフGは文字列としてエンコードされます。ただし、複数のコンピュータが同じ文字列に並行してアクセスできます。各コンピュータはグラフの一部に焦点を合わせ、その部分の色付けを生成する可能性があります。
- 主な焦点は、複数のコンピューターの処理能力を並列に活用する高性能計算にあります。
- 分散アルゴリズム
- グラフG は、コンピュータ ネットワークの構造です。 Gの各ノードには 1 台のコンピュータがあり、Gの各エッジには 1 つの通信リンクがあります。最初は、各コンピュータはグラフG内のすぐ隣のコンピュータについてのみ認識しています。コンピュータは、 Gの構造についてさらに詳しく知るために、互いにメッセージを交換する必要があります。各コンピュータは、出力として独自の色を生成する必要があります。
- 主な焦点は、任意の分散システムの操作を調整することにあります。[49]
並列アルゴリズムの分野は分散アルゴリズムの分野とは焦点が異なりますが、2つの分野の間には多くの相互作用があります。たとえば、グラフカラーリングのためのCole-Vishkinアルゴリズム[50]はもともと並列アルゴリズムとして提示されましたが、同じ手法を分散アルゴリズムとして直接使用することもできます。
さらに、並列アルゴリズムは、並列システム(共有メモリを使用)または分散システム(メッセージパッシングを使用)のいずれかで実装できます。[51]並列アルゴリズムと分散アルゴリズム間の従来の境界(適切なネットワークを選択するか、任意のネットワークで実行するか)は、並列システムと分散システム間の境界(共有メモリとメッセージパッシング)と同じ場所にはありません。
複雑さの尺度
並列アルゴリズムでは、時間と空間に加えて、コンピュータの数もリソースとなる。実際、実行時間とコンピュータの数の間にはトレードオフの関係があることが多い。並列に実行するコンピュータの数が多いほど、問題をより速く解くことができる(スピードアップを参照)。多項式数のプロセッサを使用して、決定問題が多対数時間で解ける場合、その問題はNCクラスに属すると言われる。[52] NC クラスは、PRAM 形式またはブール回路を使用して同様に定義できる。PRAM マシンはブール回路を効率的にシミュレートでき、その逆もまた同様である。[53]
分散アルゴリズムの分析では、通常、計算ステップよりも通信操作に多くの注意が払われます。おそらく、分散コンピューティングの最も単純なモデルは、すべてのノードがロックステップ方式で動作する同期システムです。このモデルは、一般に LOCAL モデルとして知られています。各通信ラウンド中に、すべてのノードが並列に (1) 近隣から最新のメッセージを受信し、(2) 任意のローカル計算を実行し、(3) 近隣に新しいメッセージを送信します。このようなシステムでは、中心的な複雑さの尺度は、タスクを完了するために必要な同期通信ラウンドの数です。[54]
この複雑性の尺度は、ネットワークの直径と密接に関係しています。ネットワークの直径をDとします。一方では、同期分散システムでは、計算可能な問題はすべて、約 2 D の通信ラウンドで簡単に解決できます。つまり、すべての情報を 1 か所に集め ( Dラウンド)、問題を解決し、各ノードに解決策を通知するだけです ( Dラウンド)。
一方、アルゴリズムの実行時間がD回の通信ラウンドよりもはるかに短い場合、ネットワーク内のノードは、ネットワークの遠隔部分に関する情報を取得する可能性がない状態で出力を生成する必要があります。言い換えると、ノードは、ローカルのD近傍で利用可能な情報に基づいて、グローバルに一貫した決定を下す必要があります。実行時間がDラウンドよりもはるかに短い分散アルゴリズムは数多く知られており、そのようなアルゴリズムでどの問題を解決できるかを理解することは、この分野の中心的な研究課題の1つです。[55]通常、ネットワークサイズの多重対数時間で問題を解決するアルゴリズムは、このモデルでは効率的であると見なされます。
もう一つのよく使われる指標は、ネットワークで送信されるビットの総数です(通信の複雑さを参照)。[56]この概念の特徴は、通常、CONGEST(B)モデルで表現されます。このモデルは、LOCALモデルと同様に定義されますが、単一のメッセージにはBビットしか含めることができません。
その他の問題
従来の計算問題では、ユーザーが質問し、コンピューター (または分散システム) が質問を処理し、答えを生成して停止するという観点が採用されています。ただし、食事哲学者問題やその他の同様の排他的問題など、システムが停止しないことが求められる問題もあります。これらの問題では、分散システムは、競合やデッドロックが発生しないように、共有リソースの使用を継続的に調整する必要があります。
分散コンピューティングに特有の基本的な課題も存在します。例えば、フォールトトレランスに関連する課題です。関連する問題の例としては、コンセンサス問題[57]、 ビザンチンフォールトトレランス[58]、自己安定化[59]などが挙げられます。
分散システムの 非同期性を理解することにも多くの研究が焦点を当てています。
- シンクロナイザーは非同期システムで同期アルゴリズムを実行するために使用できます。[60]
- 論理クロックは、イベントの因果的な発生順序を提供します。[61]
- クロック同期アルゴリズムは、グローバルに一貫した物理的なタイムスタンプを提供します。[62]
分散システムでは、 「中央値」や「平均」では誤解を招く可能性があるため、「99パーセンタイル」でレイテンシを測定する必要があることに注意してください。[63]
コーディネーター選出(またはリーダー選出)は、複数のコンピュータ(ノード)に分散されたタスクのオーガナイザーとして単一のプロセスを指定するプロセスです。タスクが開始される前は、すべてのネットワークノードは、どのノードがタスクの「コーディネーター」(またはリーダー)として機能するかを知らないか、現在のコーディネーターと通信できません。ただし、コーディネーター選出アルゴリズムが実行されると、ネットワーク全体の各ノードは、特定の一意のノードをタスクコーディネーターとして認識します。[64]
ネットワークノードは、どのノードが「コーディネーター」状態になるかを決定するために、相互に通信します。そのためには、ノード間の対称性を破る何らかの方法が必要です。たとえば、各ノードが一意で比較可能な ID を持っている場合、ノードは ID を比較し、最も高い ID を持つノードがコーディネーターであると決定できます。[64]
この問題の定義は、トークンが失われたトークンリングネットワークで新しいトークンを作成する方法として定式化したLeLannによるものとされることが多い。 [65]
コーディネータ選出アルゴリズムは、送信される総バイト数と時間の点で経済的になるように設計されています。一般的な無向グラフに対してGallager、Humblet、Spira [66]が提案したアルゴリズムは、一般的な分散アルゴリズムの設計に大きな影響を与え、分散コンピューティングにおける影響力のある論文として ダイクストラ賞を受賞しました。
他にも、無向リング、一方向リング、完全グラフ、グリッド、有向オイラーグラフなど、さまざまな種類のネットワークグラフに対して多くのアルゴリズムが提案されています。グラフファミリの問題とコーディネータ選出アルゴリズムの設計を切り離す一般的な方法は、Korach、Kutten、Moranによって提案されました。[67]
調整を実行するために、分散システムはコーディネータの概念を採用しています。コーディネータ選出問題は、分散システム内の異なるプロセッサ上のプロセスグループの中から、中央コーディネータとして機能するプロセスを選択することです。いくつかの中央コーディネータ選出アルゴリズムが存在します。[68]
分散システムの特性
これまでの焦点は、与えられた問題を解決する分散システムの設計にありました。補完的な研究課題は、与えられた分散システムの特性を研究することです。 [69] [70]
停止問題は集中計算の分野における類似の例である。コンピュータプログラムが与えられ、そのプログラムが停止するか永久に実行されるかを決定することが課題となる。停止問題は一般的なケースでは決定不可能であり、当然ながらコンピュータネットワークの動作を理解することは少なくとも1台のコンピュータの動作を理解することと同じくらい難しい。[71]
しかし、決定可能な興味深い特殊なケースも数多く存在します。特に、有限状態マシンのネットワークの動作について推論することが可能です。一例は、相互作用する(非同期かつ非決定的な)有限状態マシンのネットワークがデッドロックに達する可能性があるかどうかを判断することです。この問題はPSPACE完全です[72]。つまり、決定可能ですが、大規模ネットワークの場合に問題を解決する効率的な(集中型、並列型、分散型の)アルゴリズムが存在する可能性は低いということです。
参照
- 俳優モデル
- アプリスケール
- ボインク
- コードモビリティ
- データフロープログラミング
- 分散コンピューティング
- 分散アルゴリズム
- 分散アルゴリズムメカニズム設計
- 分散キャッシュ
- 分散型GIS
- 分散ネットワーク
- 分散オペレーティングシステム
- 最終的な一貫性
- 分散コンピューティングにおけるエドガー・W・ダイクストラ賞
- 連盟(情報技術)
- フラットな近隣ネットワーク
- フォグコンピューティング
- 自宅で折り畳む
- グリッドコンピューティング
- インフェルノ
- インターネットGIS
- ジャングルコンピューティング
- 階層型キューイングネットワーク
- ライブラリ指向アーキテクチャ(LOA)
- 分散コンピューティングカンファレンスのリスト
- ボランティアコンピューティングプロジェクトのリスト
- モデルチェック
- オープンハーモニー
- ハーモニーOS
- 並列分散処理
- 並列プログラミングモデル
- ベル研究所のプラン9
- シェアードナッシングアーキテクチャ
- ウェブGIS
注記
- ^ ab Tanenbaum, Andrew S.; Steen , Maarten van (2002). 分散システム: 原理とパラダイム。アッパーサドルリバー、ニュージャージー: ピアソンプレンティスホール。ISBN 0-13-088893-1. 2020年8月12日時点のオリジナルよりアーカイブ。2020年8月28日閲覧。
- ^ 「分散プログラム」。Texts in Computer Science 。ロンドン: Springer London。2010年。pp. 373–406。doi :10.1007/ 978-1-84882-745-5_11。ISBN 978-1-84882-744-8. ISSN 1868-0941。
システムは、プライベート ストレージを使用して独立して動作するだけでなく、明示的なメッセージ パッシングによって随時通信する、物理的に分散された多数のコンポーネントで構成されます。このようなシステムは分散システムと呼ばれます。
- ^ Dusseau & Dusseau 2016、p.1-2。
- ^ Ford, Neal (2020年3月3日)。ソフトウェアアーキテクチャの基礎:エンジニアリングアプローチ(第1版)。O'Reilly Media。pp. 146–147。ISBN 978-1492043454。
- ^ モノリスからマイクロサービスへ モノリスを変革するための進化的パターン。O'Reilly Media。ISBN 9781492047810。
- ^ Knative でのサーバーレスアプリケーションの構築。O'Reilly Media。ISBN 9781098142049。
- ^ 「分散プログラム」。Texts in Computer Science 。ロンドン: Springer London。2010年。pp. 373–406。doi :10.1007/ 978-1-84882-745-5_11。ISBN 978-1-84882-744-8. ISSN 1868-0941。
分散プログラムは、分散システムの抽象的な記述です。分散プログラムは、同時に動作し、明示的なメッセージ パッシングによって通信するプロセスの集合で構成されます。各プロセスは、他のプロセスによって変更できる変数とは分離されている一連の変数にアクセスできます。
- ^ Andrews (2000). Dolev (2000). Ghosh (2007)、p. 10。
- ^ Magnoni, L. (2015). 「分散システム向け最新メッセージング (sic)」. Journal of Physics: Conference Series . 608 (1): 012038. doi : 10.1088/1742-6596/608/1/012038 . ISSN 1742-6596.
- ^ ゴッドフリー(2002年)。
- ^ ab Andrews (2000)、p. 291–292。Dolev (2000)、p. 5。
- ^ リンチ(1996)、1ページ。
- ^ ab Ghosh (2007)、10ページ。
- ^ Andrews (2000)、pp. 8–9、291。Dolev (2000)、p. 5。Ghosh (2007)、p. 3。Lynch (1996)、p. xix、1。Peleg (2000)、p. xv。
- ^ Andrews (2000)、p. 291。Ghosh (2007)、p. 3。Peleg (2000)、p. 4。
- ^ Ghosh (2007)、p.3-4。Peleg (2000)、p.1。
- ^ Ghosh (2007)、p.4。Peleg (2000)、p.2。
- ^ Ghosh (2007)、p. 4, 8. Lynch (1996)、p. 2–3. Peleg (2000)、p. 4.
- ^ リンチ(1996)、p.2。ペレグ(2000)、p.1。
- ^ Ghosh (2007)、p. 7. Lynch (1996)、p. xix、2. Peleg (2000)、p. 4.
- ^ ソフトウェアアーキテクチャの基礎:エンジニアリングアプローチ。オライリーメディア。2020年。ISBN 978-1492043454。
- ^ ゴーシュ (2007)、p. 10. ケイダール (2008)。
- ^ リンチ(1996)、p.xix、1-2。ペレグ(2000)、p.1。
- ^ ペレグ(2000)、1ページ。
- ^ Papadimitriou (1994)、第 15 章。Keidar (2008)。
- ^ はじめにの参考文献を参照してください。
- ^ Bentaleb, A.; Yifan, L.; Xin, J.; et al. (2016). 「並列および分散アルゴリズム」(PDF)。シンガポール国立大学。2017年3月26日時点のオリジナルよりアーカイブ(PDF) 。 2018年7月20日閲覧。
- ^ アンドリュース(2000)、348ページ。
- ^ アンドリュース(2000)、32ページ。
- ^ Peter (2004)、電子メールの歴史、Wayback Machineで2009年4月15日にアーカイブ。
- ^ Banks, M. (2012). ウェブへの道: インターネットとその創始者の秘密の歴史。Apress。pp. 44–5。ISBN 9781430250746. 2023年1月20日時点のオリジナルよりアーカイブ。2018年7月20日閲覧。
- ^ Tel, G. (2000). 分散アルゴリズム入門. ケンブリッジ大学出版局. pp. 35–36. ISBN 9780521794831. 2023年1月20日時点のオリジナルよりアーカイブ。2018年7月20日閲覧。
- ^ Ohlídal, M.; Jaroš, J.; Schwarz, J.; et al. (2006). 「相互接続ネットワークの OAB および AAB 通信スケジュールの進化的設計」。Rothlauf, F.; Branke, J.; Cagnoni, S. (編)。進化的コンピューティングの応用。Springer Science & Business Media。pp. 267–78。ISBN 9783540332374。
- ^ 「リアルタイムおよび分散コンピューティングシステム」(PDF)。ISSN 2278-0661 。 2017年1月10日時点の オリジナル(PDF)からアーカイブ。 2017年1月9日閲覧。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)が必要です - ^ Vigna P、Casey MJ。暗号通貨の時代:ビットコインとブロックチェーンが世界経済秩序に挑む方法St. Martin's Press 2015年1月27日ISBN 9781250065636
- ^ Quang Hieu Vu、Mihai Lupu、Beng Chin Ooi (2010)。ピアツーピアコンピューティング:原理とアプリケーション。ハイデルベルク:Springer。p. 16。ISBN 9783642035135. OCLC 663093862.
- ^ Lind P, Alm M (2006)、「データベース中心の仮想化学システム」、J Chem Inf Model、46 (3): 1034–9、doi :10.1021/ci050360b、PMID 16711722。
- ^ Chiu, G (1990)。「分散コンピューティング システムにおける最適なデータベース割り当てのモデル」議事録。IEEE INFOCOM'90: IEEE コンピュータおよび通信学会第 9 回年次合同会議。
- ^ Elmasri & Navathe (2000)、セクション 24.1.2。
- ^ アンドリュース (2000)、p. 10-11。ゴーシュ (2007)、p. 4~6。リンチ (1996)、p. xix、1. Peleg (2000)、p. 15. Elmasri & Navathe (2000)、セクション 24。
- ^ Haussmann, J. (2019). 「クラウドコンピューティング環境 における不規則構造の問題のコスト効率の高い並列処理」。Journal of Cluster Computing。22 ( 3): 887–909。doi : 10.1007 /s10586-018-2879-3。S2CID 54447518。
- ^ リアクティブアプリケーション開発。マニング。2018年。ISBN 9781638355816。
- ^ Toomarian, NB; Barhen, J.; Gulati, S. (1992)。「リアルタイム ロボット アプリケーション向けニューラル ネットワーク」。Fijany, A.、Bejczy, A. (編)。ロボット工学向け並列計算システム: アルゴリズムとアーキテクチャ。World Scientific。p. 214。ISBN 9789814506175. 2020年8月1日時点のオリジナルよりアーカイブ。2018年7月20日閲覧。
- ^ サベージ、JE (1998)。計算モデル: 計算の力を探る。アディソン・ウェスリー。p. 209。ISBN 9780201895391。
- ^ コーメン、ライザーソン、リベスト (1990)、セクション 30。
- ^ Herlihy & Shavit (2008)、第2章~第6章。
- ^ リンチ(1996)
- ^ Cormen、Leiserson、Rivest (1990)、セクション 28 および 29。
- ^ abc TULSIRAMJI GAIKWAD-PATIL ナグプール工科大学 情報技術学科 分散システム入門[1]
- ^ Cole & Vishkin (1986). Cormen, Leiserson & Rivest (1990)、セクション30.5。
- ^ アンドリュース(2000)、p.ix。
- ^ Arora & Barak (2009)、セクション 6.7。パパディミトリウ (1994)、セクション 15.3。
- ^ パパディミトリウ (1994)、セクション 15.2。
- ^ リンチ(1996)、17-23頁。
- ^ Peleg (2000)、セクション 2.3 および 7。Linial (1992)。ナオールとストックマイヤー (1995)。
- ^ Schneider, J.; Wattenhofer, R. (2011). 「分散アルゴリズムの取引ビット、メッセージ、および時間計算量」。 Peleg, D. (編)。分散コンピューティング。 Springer Science & Business Media。 pp. 51–65。ISBN 9783642240997. 2020年8月1日時点のオリジナルよりアーカイブ。2018年7月20日閲覧。
- ^ リンチ(1996)、セクション5〜7。ゴーシュ(2007)、第13章。
- ^ リンチ(1996)、p.99-102。ゴーシュ(2007)、p.192-193。
- ^ Dolev (2000). Ghosh (2007)、第17章。
- ^ リンチ(1996)、第16節。ペレグ(2000)、第6節。
- ^ Lynch (1996)、第18節。Ghosh (2007)、第6.2~6.3節。
- ^ Ghosh (2007)、セクション6.4。
- ^ データ集約型アプリケーションの基礎 大規模データ分析の裏側2021年ISBN 9781119713012。
- ^ ab ハロイ、S. (2015). Apache ZooKeeper の必需品。 Packt Publishing Ltd.、100 ~ 101 ページ。ISBN 9781784398323. 2023年1月20日時点のオリジナルよりアーカイブ。2018年7月20日閲覧。
- ^ LeLann, G. (1977). 「分散システム - 形式的アプローチに向けて」.情報処理. 77 : 155·160 – Elsevier 経由.
- ^ RG Gallager、PA Humblet、PM Spira (1983 年 1 月)。「最小重量スパニング ツリーの分散アルゴリズム」(PDF)。ACM Transactions on Programming Languages and Systems。5 ( 1): 66–77。doi : 10.1145 /357195.357200。S2CID 2758285。2017年 9 月 26 日のオリジナルから アーカイブ( PDF) 。
{{cite journal}}: CS1 maint: 複数の名前: 著者リスト (リンク) - ^ Korach, Ephraim; Kutten, Shay ; Moran, Shlomo (1990). 「効率的な分散リーダー発見アルゴリズムの設計のためのモジュール式手法」(PDF) . ACM Transactions on Programming Languages and Systems . 12 (1): 84–101. CiteSeerX 10.1.1.139.7342 . doi :10.1145/77606.77610. S2CID 9175968. 2007-04-18 にオリジナルからアーカイブ(PDF)されました。
- ^ ハミルトン、ハワード。「分散アルゴリズム」。2012年11月24日時点のオリジナルよりアーカイブ。2013年3月3日閲覧。
- ^ 「分散システムにおける主要な未解決の問題?」cstheory.stackexchange.com。 2023年1月20日時点のオリジナルよりアーカイブ。2018年3月16日閲覧。
- ^ 「ビッグデータと分散システムは、従来のスケーラビリティ問題をどのように解決するか」。theserverside.com。2018年3月17日時点のオリジナルよりアーカイブ。2018年3月16日閲覧。
- ^ Svozil, K. (2011). 「物理学による不確定性とランダム性」 Hector, Z. (編)計算によるランダム性: いくつかの答えとさらなる疑問World Scientific. pp. 112–3. ISBN 9789814462631. 2020年8月1日時点のオリジナルよりアーカイブ。2018年7月20日閲覧。
- ^ パパディミトリウ (1994)、セクション 19.3。
参考文献
- 書籍
- アンドリュース、グレゴリー R. (2000)、「マルチスレッド、並列、分散プログラミングの基礎」、アディソン・ウェズレー、ISBN 978-0-201-35752-3。
- アローラ、サンジーヴ、バラク、ボアズ(2009)、計算複雑性 - 現代的アプローチ、ケンブリッジ、ISBN 978-0-521-42426-4。
- トーマス・H・コーメン;チャールズ・E・ライザーソン; Rivest、Ronald L. (1990)、アルゴリズム入門(第 1 版)、MIT Press、ISBN 978-0-262-03141-7。
- Dolev, Shlomi (2000)、自己安定化、MIT Press、ISBN 978-0-262-04178-2。
- Elmasri, Ramez; Navathe, Shamkant B. (2000)、『データベースシステムの基礎』(第3版)、Addison–Wesley、ISBN 978-0-201-54263-9。
- ゴーシュ、スクマール(2007)、分散システム - アルゴリズム的アプローチ、チャップマン&ホール/CRC、ISBN 978-1-58488-564-1。
- リンチ、ナンシー A. (1996)、分散アルゴリズム、モーガン カウフマン、ISBN 978-1-55860-348-6。
- Herlihy, Maurice P. ; Shavit, Nir N. (2008)、『マルチプロセッサプログラミングの技法』、Morgan Kaufmann、ISBN 978-0-12-370591-4。
- パパディミトリウ、クリストス H. (1994)、計算複雑性、アディソン・ウェズリー、ISBN 978-0-201-53082-7。
- ペレグ、デイビッド(2000)、分散コンピューティング:局所性を考慮したアプローチ、SIAM、ISBN 978-0-89871-464-7、2009年8月6日にオリジナルからアーカイブされ、2009年7月16日に取得。
- 記事
- コール、リチャード;ヴィシュキン、ウジ(1986)、「決定論的コイントスと最適並列リストランキングへの応用」、情報制御、70 (1): 32–53、doi : 10.1016/S0019-9958(86)80023-7。
- Keidar, Idit (2008)、「分散コンピューティングコラム 32 – 1 年を振り返る」、ACM SIGACT News、39 (4): 53–54、CiteSeerX 10.1.1.116.1285、doi :10.1145/1466390.1466402、S2CID 7607391、2014-01-16 にオリジナルからアーカイブ、2009-08-20 に取得。
- リニアル、ネイサン(1992)、「分散グラフアルゴリズムの局所性」、SIAM Journal on Computing、21(1):193–201、CiteSeerX 10.1.1.471.6378、doi:10.1137/0221015。
- Naor, Moni ; Stockmeyer, Larry (1995)、「ローカルで計算できるものは何ですか?」(PDF)、SIAM Journal on Computing、24 (6): 1259–1277、CiteSeerX 10.1.1.29.669、doi :10.1137/S0097539793254571、2013-01-08にオリジナルからアーカイブ(PDF)。
- ウェブサイト
- Godfrey, Bill (2002). 「分散コンピューティング入門」。2021年5月13日時点のオリジナルよりアーカイブ。2021年5月13日閲覧。
- Peter, Ian (2004)。「Ian Peter のインターネットの歴史」。2010 年 1 月 20 日時点のオリジナルよりアーカイブ。2009年 8 月 4 日閲覧。
さらに読む
- 書籍
- Attiya、Hagit、Jennifer Welch (2004)、『分散コンピューティング: 基礎、シミュレーション、高度なトピック』、Wiley-Interscience 原題:Isbn 0-471-45324-2。
- クリスチャン・カチン。ラシッド・ゲラウィ。 Luís Rodrigues (2011)、信頼性が高く安全な分散プログラミング入門(第 2 版)、Springer、Bibcode :2011itra.book....C、ISBN 978-3-642-15259-7
- Coulouris, George; et al. (2011)、分散システム: 概念と設計 (第 5 版)、Addison-Wesley 原題:ISBN 0-132-14301-1。
- Faber, Jim (1998)、Java Distributed Computing、O'Reilly、2010-08-24 にオリジナルからアーカイブ、2010-09-29 に取得: Java Distributed Computing、Jim Faber著、1998年、Wayback Machineに2010年8月24日アーカイブ
- Garg, Vijay K. (2002)、分散コンピューティングの要素、Wiley-IEEE プレス 原題:Isbn 0-471-03600-5。
- テル、ジェラード(1994)、分散アルゴリズム入門、ケンブリッジ大学出版局
- Chandy, Mani他 (1988)、並列プログラム設計、Addison-Wesley 0201058669出版社
- Dusseau, Remzi H.; Dusseau, Andrea (2016). オペレーティングシステム: Three Easy Pieces、第48章 分散システム(PDF) 。 2021年8月31日時点のオリジナル(PDF)からアーカイブ。 2021年10月8日閲覧。
- 記事
- Keidar, Idit、Rajsbaum, Sergio 編 (2000–2009)、「Distributed computing column」、ACM SIGACT News、2014-01-16 にオリジナルからアーカイブ、2009-08-16 に取得。
- Birrell, AD; Levin, R.; Schroeder, MD; Needham , RM (1982 年 4 月)。「Grapevine: 分散コンピューティングの実践」(PDF)。Communications of the ACM。25 ( 4): 260–274。doi : 10.1145 /358468.358487。S2CID 16066616。2016年 7 月 30 日にオリジナルから アーカイブ(PDF) 。
- 会議論文
