導入 「分散システム」、「分散プログラミング」、「分散アルゴリズム」などの用語における 「分散 」という言葉は、元々は個々のコンピュータが物理的に地理的な領域内に分散しているコンピュータネットワークを指していました。[ 12 ] 現在では、これらの用語ははるかに広い意味で使用されており、同じ物理コンピュータ上で実行され、メッセージパッシング によって相互にやり取りする自律的なプロセス を指す場合もあります。[ 11 ]
分散システムには単一の定義はないが、[ 13 ] 一般的に2つの共通の特性が挙げられている。
自律的な計算エンティティ(コンピュータ またはノード )が複数存在し、それぞれが独自のローカルメモリ を持っています。[ 14 ] これらのエンティティはメッセージパッシングによって互いに通信します。[ 15 ] 分散システムは、大規模な計算問題を解決するなど、共通の目標を持つ場合があります。[ 16 ] この場合、ユーザーは自律的なプロセッサの集合を一つの単位として認識します。あるいは、各コンピュータに個別のニーズを持つユーザーがいて、分散システムの目的は共有リソースの使用を調整したり、ユーザーに通信サービスを提供したりすることです。[ 17 ]
分散システムのその他の典型的な特性は以下のとおりです。
システムは個々のコンピュータの障害 に耐えられる必要がある。[ 18 ] システムの構造(ネットワークトポロジー、ネットワーク遅延、コンピュータの数)は事前に分かっていません。 システムは、さまざまな種類のコンピュータとネットワークリンクで構成される可能性がある。 分散プログラムの実行中にシステムが変化する可能性がある。[ 19 ] 各コンピュータは、システム全体について限定的かつ不完全な情報しか持ち合わせていない。 各コンピュータは入力の一部しか認識できない可能性がある。[ 20 ]
イベントとメッセージ 分散システムでは、イベントは 事実または状態の変化(例:OrderPlaced )を表し、通常は複数のコンシューマーに非同期的にブロードキャストされ、疎結合とスケーラビリティを促進します。イベントは一般的に即時の応答を期待しませんが、確認メカニズムは、イベントパターン自体に内在するものではなく、インフラストラクチャ レベルで実装されることがよくあります(例:Kafka コミット オフセット、SNS 配信ステータス)。[ 22 ] [ 23 ]
対照的に、メッセージは より広い役割を果たし、コマンド(例: ProcessPayment )、イベント(例: PaymentProcessed )、およびドキュメント(例: DataPayload )を含みます。イベントとメッセージの両方は、テクノロジースタックと実装に応じて、少なくとも1回、最大1回、正確に1回など、さまざまな配信保証をサポートできます。ただし、正確に1回の配信は、真のインフラストラクチャレベルの正確に1回セマンティクスではなく、冪等性メカニズムによって実現されることがよくあります。[ 22 ] [ 23 ]
イベントとメッセージの両方の配信パターンには、パブリッシュ/サブスクライブ(1対多)とポイントツーポイント(1対1)があります。リクエスト/リプライは技術的には可能ですが、純粋なイベント駆動システムよりもメッセージングパターンに関連付けられることが多いです。イベントは状態伝播と疎結合通知に優れており、メッセージはコマンド実行、ワークフローオーケストレーション、明示的な調整に適しています。[ 22 ] [ 23 ]
現代のアーキテクチャでは、分散状態変化通知にはイベントを、特定のタイミング、順序、配信要件に基づくターゲットコマンド実行と構造化ワークフローにはメッセージを、両方のアプローチを組み合わせるのが一般的です。[ 22 ] [ 23 ]
並列分散コンピューティング (a)、(b):分散システム。(c):並列システム。 分散システムとは、共通の作業目標を共有するネットワーク接続されたコンピュータのグループです。「同時実行コンピューティング 」、「並列コンピューティング 」、「分散コンピューティング」という用語は重複する部分が多く、明確な区別はありません。[ 24 ] 同じシステムが「並列」と「分散」の両方として特徴付けられる場合があり、典型的な分散システムのプロセッサは並列に同時実行されます。[ 25 ] 並列コンピューティングは、分散コンピューティングの特に密結合な形態と見なされる場合があり、[ 26 ] 分散コンピューティングは、並列コンピューティングの疎結合な形態と見なされる場合があります。[ 13 ] それにもかかわらず、次の基準を使用して、同時実行システムを「並列」または「分散」に大まかに分類することは可能です。
並列コンピューティングでは、すべてのプロセッサが共有メモリ にアクセスしてプロセッサ間で情報を交換することができます。[ 27 ] 分散コンピューティングでは、各プロセッサは独自のプライベートメモリ(分散メモリ )を持っています。情報はプロセッサ間でメッセージを渡すことによって交換されます。[ 28 ] 右の図は、分散システムと並列システムの違いを示しています。図(a)は、典型的な分散システムの概略図です。このシステムは、各ノードがコンピュータであり、ノード間を接続する各線が通信リンクであるネットワークトポロジーとして表されています。図(b)は、同じ分散システムの詳細を示しています。各コンピュータは独自のローカルメモリを持ち、利用可能な通信リンクを使用してノード間でメッセージを渡すことによってのみ情報を交換できます。図(c)は、各プロセッサが共有メモリに直接アクセスできる並列システムを示しています。
並列アルゴリズムと分散アルゴリズム という用語の従来の用法が、上記の並列システムと分散システム の定義と完全に一致しないため、状況はさらに複雑になります(詳細については後述を参照) 。しかしながら、経験則として、共有メモリマルチプロセッサにおける高性能並列計算では並列アルゴリズムが使用され、大規模分散システムの協調では分散アルゴリズムが使用されます。[ 29 ]
分散コンピューティングアーキテクチャ 分散コンピューティングには、さまざまなハードウェアおよびソフトウェアアーキテクチャが使用されます。低レベルでは、回路基板上に印刷されたネットワークであろうと、疎結合されたデバイスとケーブルで構成されているネットワークであろうと、何らかのネットワークで複数のCPUを相互接続する必要があります。高レベルでは、これらのCPU上で実行されている プロセスを 何らかの通信システム で相互接続する必要があります。[ 35 ]
これらのCPUがリソースを共有するかどうかによって、3種類のアーキテクチャが最初に区別される。
分散プログラミングは通常、クライアント/サーバー 、3層 、n 層 、ピアツーピア などのいくつかの基本的なアーキテクチャ、または疎結合 、密結合 などのカテゴリに分類されます。[ 36 ]
分散コンピューティングアーキテクチャのもう1つの基本的な側面は、並行プロセス間での通信と作業の調整方法です。さまざまなメッセージパッシングプロトコルを介して、プロセスは、通常、メイン/サブの関係で、互いに直接通信することができます。あるいは、「データベース中心」アーキテクチャでは、共有 データベース を利用することで、プロセス間の 直接通信を一切行わずに分散コンピューティングを実行できます。[ 39 ] 特にデータベース中心アーキテクチャは、ライブ環境リレーを可能にする概略アーキテクチャでリレーショナル処理分析を提供します。これにより、ネットワークデータベースのパラメータ内外で分散コンピューティング機能が可能になります。[ 40 ]
細胞ベースのアーキテクチャ セルベースアーキテクチャは、計算リソースをセルと呼ばれる自己完結型のユニットに編成する分散コンピューティングのアプローチです。各セルは独立して動作し、スケーラビリティ、障害分離、可用性を維持しながら要求を処理します。[ 41 ] [ 42 ] [ 43 ]
セルは通常、複数のサービスまたはアプリケーション コンポーネントで構成され、自律的な単位として機能します。実装によっては、サービス セット全体を複数のセルに複製するものもあれば、ワークロードをセル間で分割するものもあります。複製モデルでは、別のセルで障害が発生した場合、リクエストを稼働中のセルに再ルーティングすることができます。この設計は、局所的な障害の影響を軽減することで、システムの回復力を高めることを目的としています。[ 44 ] [ 45 ] [ 46 ]
一部の実装では、セル内およびセル間でサーキットブレーカー が使用されています。セル内では、サーキットブレーカーを使用してサービス間の連鎖的な障害を防ぐことができます。一方、セル間サーキットブレーカーは、障害が発生したセルを隔離し、トラフィックを稼働中のセルにリダイレクトすることができます。[ 47 ] [ 48 ] [ 49 ]
セルベースアーキテクチャは、特にクラウドネイティブ環境や高可用性環境など、障害分離と冗長性が重要な設計上の考慮事項となる大規模分散システムで採用されています。その実装は、システム要件、インフラストラクチャの制約、運用目標によって異なります。[ 50 ] [ 51 ] [ 52 ]
アプリケーション 分散システムや分散コンピューティングを利用する理由としては、以下のようなものが挙げられます。
アプリケーションの性質上、複数のコンピュータを接続する通信ネットワークの使用が必要となる 場合がある。例えば、ある場所で生成されたデータが別の場所で必要とされる場合などである。 原理的には単一のコンピュータの使用が可能な場合でも、実際的な理由から分散システムの使用が有利となる ケースは数多く存在する。例えば、以下のような場合である。 これにより、単一のマシンよりもはるかに大容量のストレージとメモリ、高速な演算処理、そして高い帯域幅を実現できます。 分散システムは単一障害点 がないため、非分散システムよりも高い信頼性を提供できます。さらに、分散システムは、単一プロセッサのモノリシックシステムよりも拡張や管理が容易になる可能性があります。[ 53 ] 高性能なコンピュータ1台を使用するよりも、低性能なコンピュータを複数台組み合わせたクラスタを 使用する方が、必要な性能レベルを達成する上でコスト効率が良い場合がある。
例 分散システムと分散コンピューティングの応用例には、次のものがあります。[ 54 ]
リアクティブ分散システム リアクティブマニフェストによれば、リアクティブ分散システムは応答性、回復力、弾力性、メッセージ駆動型です。その結果、リアクティブシステムはより柔軟で、疎結合で、スケーラブルです。システムをリアクティブにするには、リアクティブ原則を実装することをお勧めします。リアクティブ原則は、クラウドネイティブアプリケーションとエッジネイティブアプリケーションをよりリアクティブにするのに役立つ一連の原則とパターンです。[ 56 ]
理論的基礎
モデル コンピュータを使って自動化したいタスクの多くは、質問と回答のやり取りを伴うものです。つまり、私たちが質問を投げかけ、コンピュータがそれに答えるというものです。理論計算機科学では、このようなタスクは 計算問題 と呼ばれます。厳密に言えば、計算問題は、インスタンス と、それぞれのインスタンスに対する解 から構成されます。インスタンスとは、私たちが投げかけることができる質問であり、解とは、これらの質問に対する望ましい回答です。
理論計算機科学は、どの計算問題をコンピュータで解決できるか(計算可能性理論 )と、その効率性(計算複雑性理論)を理解しようとします。従来、与えられたインスタンスに対して正しい解を生成する アルゴリズム を設計できれば、問題はコンピュータで解決できると言われてきました。このようなアルゴリズムは、汎用コンピュータ上で実行されるコンピュータプログラム として実装できます。プログラムは、入力 から問題インスタンスを読み込み、何らかの計算を実行し、出力 として解を生成します。ランダムアクセスマシン やユニバーサルチューリングマシン などの形式体系は、このようなアルゴリズムを実行する逐次汎用コンピュータの抽象モデルとして使用できます。[ 57 ] [ 58 ]
並行分散コンピューティングの分野では、複数のコンピュータの場合、あるいは相互作用するプロセスのネットワークを実行するコンピュータの場合において、同様の疑問が研究されています。すなわち、そのようなネットワークではどのような計算問題を、どの程度効率的に解決できるのか、という問題です。しかし、並行システムや分散システムにおいて「問題を解決する」とはどういう意味なのかは、必ずしも明らかではありません。例えば、アルゴリズム設計者の役割とは何でしょうか?また、逐次的な汎用コンピュータに相当する並行システムや分散システムにおける役割とは何でしょうか?
以下の議論は複数のコンピュータの場合に焦点を当てていますが、多くの問題点は単一のコンピュータ上で並行して実行されるプロセスにも共通しています。
一般的に用いられる視点は3つあります。
共有メモリモデルにおける並列アルゴリズム すべてのプロセッサは共有メモリにアクセスできます。アルゴリズム設計者は、各プロセッサで実行されるプログラムを選択します。 理論モデルの一つとして、並列ランダムアクセスマシン (PRAM)が用いられている。[ 59 ] しかし、古典的なPRAMモデルは、共有メモリへの同期アクセスを前提としている。 共有メモリプログラムは、基盤となるオペレーティングシステムがノード間の通信をカプセル化し、すべての個々のシステム間でメモリを事実上統合する場合、分散システムに拡張することができる。 実際のマルチプロセッサマシンの動作により近く、比較交換 (CAS)などのマシン命令の使用を考慮したモデルは、非同期共有メモリ のモデルです。このモデルについては多くの研究があり、その概要は文献に記載されています。[ 60 ] [ 61 ] メッセージパッシングモデルにおける並列アルゴリズム アルゴリズム設計者は、ネットワークの構造と、各コンピュータで実行されるプログラムを選択する。 ブール回路 やソートネットワーク などのモデルが使用されています。[ 62 ] ブール回路はコンピュータネットワークと見なすことができます。各ゲートは、非常に単純なコンピュータプログラムを実行するコンピュータです。同様に、ソートネットワークもコンピュータネットワークと見なすことができます。各比較器はコンピュータです。メッセージパッシングモデルにおける分散アルゴリズム アルゴリズム設計者はコンピュータプログラムを選択するだけで、すべてのコンピュータは同じプログラムを実行します。システムはネットワークの構造に関係なく正しく動作する必要があります。 一般的に用いられるモデルは、ノードごとに1つの有限状態機械 を持つグラフである。 分散アルゴリズムの場合、計算問題は一般的にグラフに関連しています。多くの場合、コンピュータネットワークの構造を記述するグラフが問題のインスタンスとなります。これは次の例で示されています。 [ 63 ]
例 与えられたグラフG の彩色を求める計算上の問題を考えてみましょう。さまざまな分野では、次のようなアプローチが取られる可能性があります。
集中型アルゴリズム[ 63 ] グラフG は文字列として符号化され、その文字列がコンピュータへの入力として与えられる。コンピュータプログラムはグラフの彩色を見つけ、その彩色を文字列として符号化し、結果を出力する。 並列アルゴリズム ここでも、グラフG は文字列としてエンコードされています。ただし、複数のコンピュータが同じ文字列に並行してアクセスできます。各コンピュータはグラフの特定の部分に焦点を当て、その部分の色付けを行う可能性があります。 主な焦点は、複数のコンピュータの処理能力を並列に活用する高性能計算にある。 分散アルゴリズム グラフG はコンピュータネットワークの構造を表します。Gの各ノードには1台のコンピュータが対応し、 G の各エッジには1つの通信リンクが対応します。初期状態では、各コンピュータはグラフG における自身の隣接ノードの情報しか知りません。コンピュータ同士がメッセージを交換することで、 G の構造に関するより多くの情報を得ることができます。各コンピュータは、出力として自身の色を生成する必要があります。 主な焦点は、任意の分散システムの運用を調整することにある。[ 63 ] 並列アルゴリズムの分野は分散アルゴリズムの分野とは異なる焦点を持っていますが、両分野の間には多くの相互作用があります。たとえば、グラフ彩色のためのコール・ヴィシュキンアルゴリズム [ 64 ] は元々並列アルゴリズムとして発表されましたが、同じ手法を分散アルゴリズムとして直接使用することもできます。
さらに、並列アルゴリズムは、並列システム(共有メモリを使用)または分散システム(メッセージパッシングを使用)のいずれでも実装できます。[ 65 ] 並列アルゴリズムと分散アルゴリズムの従来の境界(適切なネットワークを選択するか、任意のネットワークで実行するか)は、並列システムと分散システム(共有メモリとメッセージパッシング)の境界と同じ場所にはありません。
複雑性尺度 並列アルゴリズムでは、時間と空間に加えて、コンピュータの数もリソースとなります。実際、実行時間とコンピュータの数の間にはトレードオフが存在することがよくあります。並列に実行されるコンピュータの数が多いほど、問題はより速く解決できます(スピードアップを参照)。多項式数のプロセッサを使用して決定問題を多 対数時間 で解決できる場合、その問題はクラスNC に属すると言われます。[ 66 ] クラス NC は、PRAM 形式またはブール回路を使用して同様に定義できます。PRAM マシンはブール回路を効率的にシミュレートでき、その逆も同様です。[ 67 ]
分散アルゴリズムの分析では、通常、計算ステップよりも通信操作に重点が置かれます。分散コンピューティングの最も単純なモデルは、すべてのノードが同期して動作する同期システムです。このモデルは一般にローカルモデルとして知られています。各通信ラウンド では、すべてのノードが並列に (1) 隣接ノードから最新のメッセージを受信し、(2) 任意のローカル計算を実行し、(3) 隣接ノードに新しいメッセージを送信します。このようなシステムでは、中心的な複雑性尺度は、タスクを完了するために必要な同期通信ラウンドの数です。[ 68 ]
この複雑度尺度は、ネットワークの直径と密接に関係しています。D を ネットワークの直径とします。一方では、同期分散システムでは、計算可能な問題であれば何でも、約 2 D 回の通信ラウンドで簡単に解決できます。つまり、すべての情報を 1 つの場所に集め ( D ラウンド)、問題を解決し、各ノードに解決策を通知する ( D ラウンド) だけです。
一方、アルゴリズムの実行時間がD 回の 通信ラウンドよりはるかに短い場合、ネットワーク内のノードは、ネットワークの遠隔部分に関する情報を取得する可能性なしに、出力を生成する必要があります。言い換えれば、ノードは、ローカルの D 近傍 で利用可能な情報に基づいて、グローバルに一貫した決定を下す必要があります。実行時間がD ラウンドよりはるかに短い分散アルゴリズムは多数知られており、そのようなアルゴリズムで解決できる問題を理解することは、この分野の中心的な研究課題の 1 つです。[ 69 ] 通常、ネットワークサイズに対して多対数時間で問題を解決するアルゴリズムは、このモデルでは効率的であると考えられています。
もう1つのよく使われる尺度は、ネットワークで送信されるビットの総数です(通信の複雑さ を参照)。[ 70 ] この概念の特徴は、通常、CONGEST(B) モデルで捉えられます。これは LOCAL モデルと同様に定義されますが、単一のメッセージには B ビットしか含めることができません。
コーディネーター選出 (またはリーダー選出)とは、複数のコンピュータ(ノード)に分散されたタスクのオーガナイザーとして単一の プロセス を指定するプロセスです。タスクが開始される前は、すべてのネットワークノードは、どのノードがタスクの「コーディネーター」(またはリーダー)として機能するのかを知らないか、現在のコーディネーターと通信できません。しかし、コーディネーター選出アルゴリズムが実行されると、ネットワーク全体の各ノードは、特定の固有のノードをタスクコーディネーターとして認識します。[ 78 ]
ネットワークノードは、どのノードが「コーディネーター」状態になるかを決定するために、互いに通信します。そのためには、ノード間の対称性を破る何らかの方法が必要です。たとえば、各ノードが一意で比較可能な識別子を持っている場合、ノードは自身の識別子を比較し、最も高い識別子を持つノードをコーディネーターと決定することができます。[ 78 ]
この問題の定義は、トークンが失われたトークンリングネットワーク で新しいトークンを作成する方法として形式化されたLeLannによるものとされることが多い。 [ 79 ]
コーディネーター選出アルゴリズムは、送信されるバイト 総数と時間の点で経済的になるように設計されています。Gallager、Humblet、Spira [ 80 ] が提案した一般的な無向グラフ向けのアルゴリズムは、分散アルゴリズム全般の設計に大きな影響を与え、分散コンピューティングにおける影響力のある論文としてダイクストラ賞 を受賞しました。
無向リング、単方向リング、完全グラフ、グリッド、有向オイラーグラフなど、さまざまな種類のネットワークグラフ に対して、他にも多くのアルゴリズムが提案されました。グラフファミリーの問題をコーディネーター選出アルゴリズムの設計から切り離す一般的な方法は、Korach、Kutten、およびMoranによって提案されました。[ 81 ]
分散システムでは、協調動作を行うためにコーディネータの概念が用いられます。コーディネータ選出問題とは、分散システム内の異なるプロセッサ上のプロセス群の中から、中央コーディネータとして機能するプロセスを選択することです。中央コーディネータ選出アルゴリズムはいくつか存在します。[ 82 ]
分散システムの特性 これまでのところ、焦点は与えられた問題を解決する分散システムの設計 に置かれてきた。補完的な研究課題は、与えられた分散システムの特性を研究することである。 [ 83 ] [ 84 ]
停止問題は 、集中型計算の分野における類似の例です。コンピュータプログラムが与えられ、それが停止するか、永遠に実行されるかを判定することが課題です。停止問題は一般的には決定不能で あり、当然ながら、コンピュータネットワークの動作を理解することは、少なくとも1台のコンピュータの動作を理解することと同じくらい困難です。[ 85 ]
しかし、決定可能な興味深い特殊なケースは数多く存在します。特に、有限状態機械のネットワークの挙動について推論することが可能です。一例として、相互作用する(非同期かつ非決定的な)有限状態機械のネットワークがデッドロックに達する可能性があるかどうかを判定することが挙げられます。この問題はPSPACE完全問題 [ 86 ] 、すなわち決定可能ですが、大規模ネットワークの場合にこの問題を解決する効率的な(集中型、並列型、または分散型の)アルゴリズムが存在する可能性は低いと考えられます。
注記 1 2 Tanenbaum, Andrew S.; Steen, Maarten van (2002).分散システム:原理とパラダイム . Upper Saddle River, NJ: Pearson Prentice Hall. ISBN 0-13-088893-1 2020年8月12日にオリジナルからアーカイブされました。2020年8月28日 に取得 。 ↑ 「分散プログラム」. コンピュータサイエンステキスト . ロンドン: Springer London. 2010. pp. 373–406 . doi : 10.1007/978-1-84882-745-5_11 . ISBN 978-1-84882-744-8 ISSN 1868-0941 .システムは、物理的に分散した複数のコンポーネントで構成され、各コンポーネントは独自のストレージを使用して独立して動作しますが、明示的なメッセージパッシングによって時折通信を行います。このようなシステムは分散システムと呼ばれます。 ↑ Ford, Neal (2020年3月3日). ソフトウェアアーキテクチャの基礎:エンジニアリングアプローチ (第1 版). O'Reilly Media. pp. 146–147 . ISBN 978-1-4920-4345-4 。↑ モノリスからマイクロサービスへ:モノリスを変革する進化パターン 。O'Reilly Media。ISBN 978-1-4920-4781-0 。↑ Knative 上でのサーバーレスアプリケーションの構築 。O'Reilly Media。ISBN 978-1-0981-4204-9 。↑ 「分散プログラム」. コンピュータサイエンステキスト . ロンドン: 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. Bibcode : 2015JPhCS.608a2038M . doi : 10.1088/1742-6596/608/1/012038 . ISSN 1742-6596 . ↑ ゴッドフリー (2002) 。1 2 Andrews (2000) 、p. 291–292。 Dolev (2000) 、p. 5。↑ リンチ (1996) 、p. 1。1 2 ゴッシュ (2007) 、p. 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。↑ ゴッシュ (2007) 、3-4頁。ペレグ (2000) 、1頁。↑ ゴッシュ (2007) 、p. 4。ペレグ (2000) 、p. 2。↑ ゴッシュ (2007) 、p. 4、8。リンチ (1996) 、p. 2–3。ペレグ (2000) 、p. 4。↑ リンチ (1996) 、p. 2。ペレグ (2000) 、p. 1。↑ ゴッシュ (2007) 、p. 7。リンチ (1996) 、p. xix、2。ペレグ (2000) 、p. 4。↑ ソフトウェアアーキテクチャの基礎:エンジニアリングアプローチ 。O'Reilly Media。2020年 。ISBN 978-1-4920-4345-4 。1 2 3 4 クレップマン、マーティン(2017)。 データ集約型アプリケーションの設計:信頼性、拡張性、保守性に優れたシステムの背後にある重要なアイデア 。オライリーメディア 。ISBN 978-1-4493-7332-0 。1 2 3 4 イベント駆動型マイクロサービスの構築:大規模な組織データの 活用 ISBN 978-1-4920-5789-5 。↑ ゴーシュ (2007) 、p. 10.ケイダール (2008 )↑ Lynch (1996) 、p. xix、1–2。Peleg (2000) 、p. 1。↑ ペレグ (2000) 、p. 1。↑ パパディミトリウ (1994) 、第 15 章。ケイダル (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-04-15 に アーカイブ済み。↑ バンクス、M. (2012). 『ウェブへの道:インターネットとその創始者たちの秘史』 Apress. pp. 44–5 . ISBN 978-1-4302-5074-6 2023年1月20日にオリジナルからアーカイブされました。2018年7月20日 に取得 。↑ Tel, G. (2000). 分散アルゴリズム入門 . Cambridge University Press. pp. 35–36 . ISBN 978-0-521-79483-1 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 978-3-540-33237-4 。↑ 「リアルタイムおよび分散コンピューティングシステム」 (PDF) 。ISSN 2278-0661 。2017年1月10 日 に オリジナル (PDF) からアーカイブ 。 2017年1月9日 に取得。 ↑ Vigna P、Casey MJ。『暗号通貨の時代:ビットコインとブロックチェーンはいかにして世界経済秩序に挑戦しているか』 St. Martin's Press、2015年1月27日、 ISBN 9781250065636 ↑ Quang Hieu Vu; Mihai Lupu; Beng Chin Ooi (2010). Peer-to-peer computing: principles and applications . Heidelberg: Springer. p. 16. ISBN 978-3-642-03513-5 OCLC 663093862 ↑ Lind P、Alm M (2006)、「データベース中心の仮想化学システム」、 J Chem Inf Model 、 46 (3): 1034–9 、 doi : 10.1021/ci050360b 、 PMID 16711722 。 ↑ Chiu, G (1990). "分散コンピューティングシステムにおける最適なデータベース割り当てのモデル". Proceedings. IEEE INFOCOM'90: Ninth Annual Joint Conference of the IEEE Computer and Communications Societies . ↑ ニューマン、サム(2015年2月20日)。 マイクロサービスの構築 。オライリーメディア 。ISBN 978-1-4919-5035-7 。↑ リチャードソン、クリス(2019)。 マイクロサービスパターン:Javaの例付き 。ニューヨーク州シェルターアイランド:マニング出版 。ISBN 978-1-61729-454-9 。↑ Christudas, Binildas (2019). Practical Microservices Architectural Patterns: Event-Based Java Microservices with Spring Boot and Spring Cloud . Berkeley, CA: Apress LP ISBN 978-1-4842-4501-9 。↑ ニューマン、サム(2015年2月20日)。 マイクロサービスの構築 。オライリーメディア 。ISBN 978-1-4919-5035-7 。↑ リチャードソン、クリス(2019)。 マイクロサービスパターン:Javaの例付き 。ニューヨーク州シェルターアイランド:マニング出版 。ISBN 978-1-61729-454-9 。↑ Christudas, Binildas (2019). Practical Microservices Architectural Patterns: Event-Based Java Microservices with Spring Boot and Spring Cloud . Berkeley, CA: Apress LP ISBN 978-1-4842-4501-9 。↑ ニューマン、サム(2015年2月20日)。 マイクロサービスの構築 。オライリーメディア 。ISBN 978-1-4919-5035-7 。↑ リチャードソン、クリス(2019)。 マイクロサービスパターン:Javaの例付き 。ニューヨーク州シェルターアイランド:マニング出版 。ISBN 978-1-61729-454-9 。↑ Christudas, Binildas (2019). Practical Microservices Architectural Patterns: Event-Based Java Microservices with Spring Boot and Spring Cloud . Berkeley, CA: Apress LP ISBN 978-1-4842-4501-9 。↑ ニューマン、サム(2015年2月20日)。 マイクロサービスの構築 。オライリーメディア 。ISBN 978-1-4919-5035-7 。↑ リチャードソン、クリス(2019)。 マイクロサービスパターン:Javaの例付き 。ニューヨーク州シェルターアイランド:マニング出版 。ISBN 978-1-61729-454-9 。↑ Christudas, Binildas (2019). Practical Microservices Architectural Patterns: Event-Based Java Microservices with Spring Boot and Spring Cloud . Berkeley, CA: Apress LP ISBN 978-1-4842-4501-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 978-1-63835-581-6 。↑ Toomarian, NB; Barhen, J.; Gulati, S. (1992). "リアルタイムロボットアプリケーションのためのニューラルネットワーク" . In Fijany, A.; Bejczy, A. (eds.). Parallel Computation Systems For Robotics: Algorithms And Architectures . World Scientific. p. 214. ISBN 978-981-4506-17-5 2020年8月1日にオリジナルからアーカイブされました。2018年7月20日 に取得 。↑ Savage, JE (1998). Models of Computation: Exploring the Power of Computing . Addison Wesley. p. 209. ISBN 978-0-201-89539-1 。↑ Cormen、Leiserson 、 Rivest (1990) 、セクション 30。↑ Herlihy & Shavit (2008) 、第2章~第6章。↑ リンチ (1996) ↑ Cormen、Leiserson 、 Rivest (1990) 、セクション 28 および 29。1 2 3 トゥルシラムジ・ガイカワド・パティル工科大学(ナグプール)情報技術学部 分散システム入門 ↑ 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 978-3-642-24099-7 2020年8月1日にオリジナルからアーカイブされました。2018年7月20日 に取得 。↑ リンチ (1996) 、第 5~7 節。ゴッシュ (2007) 、第 13 章。↑ リンチ (1996) 、99-102頁。ゴッシュ (2007) 、192-193頁。↑ ドレフ (2000) 。ゴッシュ (2007) 、第 17 章。↑ リンチ (1996) 、第 16 節。ペレグ (2000) 、第 6 節。↑ Lynch (1996) 、第18節。Ghosh (2007) 、第6.2~6.3節。↑ ゴッシュ (2007) 、第 6.4 節。↑ Kamburugamuve, Supun; Ekanayake, Saliya (2021). Foundations of Data Intensive Applications Large Scale Data Analytics Under the Hood . John Wiley & Sons. ISBN 978-1-119-71301-2 。1 2 Haloi, S. (2015). Apache ZooKeeper Essentials . Packt Publishing Ltd. pp. 100–101 . ISBN 978-1-78439-832-3 2023年1月20日にオリジナルからアーカイブされました。2018年7月20日 に取得 。↑ LeLann, G. (1977). "分散システム - 形式的アプローチに向けて". Information Processing . 77 : 155·160 – via 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年4月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 978-981-4462-63-1 2020年8月1日にオリジナルからアーカイブされました。2018年7月20日 に取得 。↑ パパディミトリウ (1994) 、セクション 19.3。
参考文献 本 アンドリュース、グレゴリー R. (2000)、『マルチスレッド、並列、分散プログラミングの基礎』 、アディソン・ウェスリー 、ISBN 978-0-201-35752-3 。Arora, Sanjeev ; Barak, Boaz (2009), Computational Complexity – A Modern Approach , Cambridge , ISBN 978-0-521-42426-4 。トーマス・H・コーメン ;チャールズ・E・ライザーソン ; Rivest、Ronald L. (1990)、アルゴリズム入門 (第 1 版)、MIT Press 、Bibcode : 1990ita..book....C、ISBN 978-0-262-03141-7 。ドレフ、シュロミ (2000)、『自己安定化』 、MIT Press 、ISBN 978-0-262-04178-2 。Elmasri, Ramez; Navathe, Shamkant B. (2000), Fundamentals of Database Systems (3rd ed.), Addison–Wesley , ISBN 978-0-201-54263-9 。Ghosh, Sukumar (2007),分散システム – アルゴリズム的アプローチ , Chapman & Hall/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 。Peleg, David (2000),分散コンピューティング:局所性重視のアプローチ 、SIAM 、ISBN 978-0-89871-464-7 2009年8月6日にオリジナルからアーカイブされ、 2009年7月16日 に取得されました。 。記事 コール、リチャード、ヴィシュキン、ウジ (1986)「最適並列リストランキングへの応用を伴う決定論的コイン投げ」、Information and Control 、70 (1):32–53 、doi :10.1016/S0019-9958(86)80023-7 。Keidar, Idit (2008)、「分散コンピューティングコラム32 – 年間レビュー」、ACM SIGACT News 、39 (4): 53–54 、CiteSeerX 10.1.1.116.1285 、doi : 10.1145/1466390.1466402、S2CID 7607391、2014年1月16日にオリジナルからアーカイブ、2009年8月20日 取得 。Linial, Nathan (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年1月8日にオリジナルからアーカイブされた(PDF) 。ウェブサイト ゴッドフリー、ビル(2002)。「分散コンピューティング入門」。2021年5月13日にオリジナルからアーカイブ。2021年5月13日 に取得。 ピーター、イアン(2004)。「イアン・ピーターのインターネットの歴史」。2010年1月20日のオリジナルからアーカイブ。2009年8月4日 取得。
さらに読む 本 アティヤ、ハギット 、ジェニファー・ウェルチ(2004)『分散コンピューティング:基礎、シミュレーション、および高度なトピック』 、ワイリー・インターサイエンスISBN 0-471-45324-2 。クリスチャン・カチン。ラシッド・ゲラウィ。 Luís Rodrigues (2011)、信頼性が高く安全な分散プログラミング入門 (第 2 版)、Springer、Bibcode : 2011itra.book....C、ISBN 978-3-642-15259-7 Coulouris, George; 他 (2011),分散システム:概念と設計(第5版) , Addison-Wesley ISBN 0-132-14301-1 。Faber, Jim (1998), Java Distributed Computing , O'Reilly, 2010年8月24日にオリジナルからアーカイブされ、2010年9月29日に取得されました。 :ジム・フェイバー著『Java分散コンピューティング』(1998年) 2010年8月24日にウェイバックマシン にアーカイブ済みGarg, Vijay K. (2002), 『分散コンピューティングの要素』 、Wiley-IEEE Press ISBN 0-471-03600-5 。テル、ジェラール(1994)、『分散アルゴリズム入門』 、ケンブリッジ大学出版局 Chandy, Mani 他 (1988)、『並列プログラム設計 』、Addison-WesleyISBN 0201058669 Dusseau, Remzi H.; Dusseau, Andrea (2016). Operating Systems: Three Easy Pieces, Chapter 48 Distributed Systems (PDF) . 2021年8月31日にオリジナル(PDF)からアーカイブ済み。 2021年 10月8日 に取得 。 記事 Keidar, Idit; Rajsbaum, Sergio 編 (2000–2009)、「分散コンピューティングコラム」、ACM SIGACT News 、 2014年1月16日のオリジナルからアーカイブ、2009年8月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) 。 会議論文 Rodriguez, Carlos; Villagra, Marcos; Baran, Benjamin (2007). "Asynchronous team algorithms for Boolean Satisfiability". 2007 2nd Bio-Inspired Models of Network, Information and Computing Systems . pp. 66–69 . doi : 10.1109/BIMNICS.2007.4610083 . S2CID 15185219 .
外部リンク ウィキメディア・コモンズにある 分散コンピューティング関連のメディア