この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
出典検索?: "分散コンピューティング"
分散コンピューティング(ぶんさんコンピューティング、英: distributed computing)とは、プログラムの個々の部分が同時並行的に複数のコンピュータ上で実行され、各々がネットワークを介して互いに通信を行いながら全体として処理が進行する計算手法のことである。複雑な計算などをネットワークを介して複数のコンピュータを利用して行うことで、一台のコンピュータで計算するよりスループットを上げようとする取り組み、またはそれを実現する為の仕組みである。分散処理(ぶんさんしょり)ともいう。並列コンピューティングの一形態に分類されるが、一般に並列コンピューティングと言えば、同時並行に実行する主体は同じコンピュータシステム内のCPU群である。ただし、どちらもプログラムの分割(同時に実行できる部分にプログラムを分けること)が必須である。分散コンピューティングではさらに、それぞれの部分が異なる環境でも動作できるようにしなければならない[要検証 – ノート]。例えば、2台の異なるハードウェアを使ったコンピュータで、それぞれ異なるファイルシステム構成であっても動作するよう配慮する必要がある。
問題を複数の部分問題に分けて各コンピュータに実行させるのが基本であり、素数探索や数多く試してみる以外に解決できない問題の対処として用いられているものが多い。分散コンピューティングの例としてBOINCがある。これは、大きな問題を多数の小さな問題に分割し、多数のコンピュータに分配するフレームワークである。その後、それぞれの結果を集めて大きな解を得る。一般的に処理を分散すると一台のコンピュータで計算する場合と比べ、問題データの分配、収集、集計するためのネットワークの負荷が増加し、問題解決の為のボトルネックとなるため、部分問題間の依存関係を減らすことが重要な課題となる。
分散コンピューティングは、コンピュータ同士をネットワーク接続し、効率的に通信できるよう努力した結果として自然に生まれた。しかし、分散コンピューティングはコンピュータネットワークと同義ではない。単にコンピュータネットワークと言った場合、複数のコンピュータが互いにやり取りするが、単一のプログラムの処理を共有することはない。World Wide Web はコンピュータネットワークの例であるが、分散コンピューティングの例ではない。
分散処理を構築するための様々な技術や標準が存在し、一部はその目的に特化して設計されている。例えば、遠隔手続き呼出し (RPC)、Java Remote Method Invocation (Java RMI)、.NET Remoting などがある。 コンピュータ同士の相互のやり取りを組織して系統立てることが重要である。様々なコンピュータを利用可能とするには、通信プロトコルや通信経路に特定のマシンが認識できない情報が含まれていてはならない。メッセージが正しく配布されるよう特に注意を払う必要があり、不正なメッセージがあるとシステムやネットワークが動作不能となる危険性があるため、それを拒絶しなければならない。 もう1つの重要な要因は、ソフトウェアをコンピュータからコンピュータへ送信する機能であり、それによって送られたコンピュータが既存のネットワークとやり取りできるようになる。アーキテクチャが異なっているとこれができない場合があり、クロスコンパイラなどを使った移植が必要になる。 この節には独自研究が含まれているおそれがあります。問題箇所を検証し出典を追加して、記事の改善にご協力ください。議論はノートを参照してください。(2023年5月) 分散コンピューティング・システムには様々な形態がある。分散コンピューティングの主な目標は、透過的でオープンでスケーラブルな方法でユーザー群とリソース群を結びつけることである。理想的には、スタンドアローンシステム群の単なる組合せよりも、よりフォールトトレラントでより強力なシステムとなることが期待される。 次のような利点があるとされる。 分散システムのオープン性とは、各サブシステムが他のシステムとの相互作用について継続的にオープンであることをいう(参考文献参照)。Webサービスプロトコルは、分散システムを拡張・拡大することを可能にする標準である。一般に、拡張性のあるオープンシステムは、自己完結型の完全にクローズなシステムよりも優れている。 オープンな分散システムは以下のような特性を持つ。 この節には独自研究が含まれているおそれがあります。問題箇所を検証し出典を追加して、記事の改善にご協力ください。議論はノートを参照してください。(2013年5月) 計画に不備があると、分散システムは全体の計算の信頼性が低下し、ノードのダウンによって他のノードも動作不能に陥る可能性がある。レスリー・ランポートは、「分散システムは、そんな障害があるとは思ってもみなかった障害によって利用不能になるシステムである」と述べている[1]。 分散システムにおけるトラブルシューティングや診断はますます困難になりつつある。問題の原因を突き止めようとすれば、遠隔ノードへの接続が必要であり、ノード間の通信内容を調べる必要がある。 分散環境に適さない計算の種類も多い。特に通信量が多くなるものや同期が必要なものは適さない。必要な帯域幅があまりに大きくレイテンシが少ないほどよいという場合は、分散コンピューティングは不適切であり、分散でない環境の方が性能がよいと予想される。 分散コンピューティングでは、様々なハードウェアおよびソフトウェアの設計思想(アーキテクチャ)が使われる。大きく分けると低レベルと高レベルに分けられる。
構成
目標と利点
高信頼
故障部分以外は稼動可能
安価
グロッシュの法則(コンピュータの能力 ∝ コスト2)が破れ、ハードウェアとソフトウェアのコストが逆転。
オープン性
単調性
オープンシステム上で何かが公開されれば、それを取り消すことはできない。
複数性
オープンな分散システムの個々のサブシステムは、異質で重複し、場合によっては競合するような情報を含む。中心となる調停機能はオープンな分散システムには存在しない。
無制限の非決定性
オープンな分散システムでは、個々のサブシステムは非同期的に立ち上がったりダウンしたりし、サブシステム間の通信リンクも非同期に接続されたり切断されたりする。従って、ある処理が完了する時間を予測することはできない。
欠点と問題
「分散コンピューティングの落とし穴」も参照
不特定多数、または特定多数のコンピューターに処理させるためにセキュリティ面で脆弱になりやすい
上記されているように問題データの分配、収集、集計するためのネットワークの負荷が増加する
一般参加者を募る場合、志願者が少ないとその分処理も遅れる
技術的問題
設計思想(アーキテクチャ)
分散コンピューティングでの設計思想(アーキテクチャ)
低レベルでの設計思想(アーキテクチャ)
複数のCPUを何らかのネットワークで相互接続する必要がある(そのネットワークは、基板上にプリントされた回路かもしれないし、疎結合された機器とケーブルの集合体かもしれない)。
高レベルでの設計思想(アーキテクチャ)
何らかの通信システムで個々のコンピュータ上で動作するプロセスを相互接続しなければならない。
分散プログラミングでの設計思想(アーキテクチャ)
Size:62 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef