回答:
分散コンピューティングを正確に構成するものは何ですか?
分散コンピューティングは、相互に通信して1つ以上の問題に取り組む処理要素の本質的に並列のコレクションです。これらの処理要素は互いに十分に分離されているため、それらの間に信頼性のあるタイムリーなメッセージングファブリックを構築することは実用的ではないため、システムの状態に関するグローバルな知識が得られなくなります。分散システムとの間でメッセージの特定の機能は、メッセージがということであるだろう、迷子になり、文字化けします遅れが出る-このスペースでのソリューションは、このを考慮しなければなりません。したがって、分散プログラミングとは、ネットワークとメッセージ、並列処理、グローバル情報の欠如を扱うことです。
この問題を回避する最も簡単な方法は、単一の処理要素を特別なもの、つまり特定の情報に対して信頼できるものにすることです。その後、他の要素は毎回それを参照するか、情報をキャッシュして、情報が古くなっていないことを期待できます(変更について通知されることを期待できないため)。これは、古典的なクライアント/サーバーアーキテクチャです。
インターネットコンピューティングは分散コンピューティングですが、ほとんどの分散ノードが実際に行うことを制御する機能はありません。
リソースへのアクセスのために同期しようとする複数の並列スレッドは、分散コンピューティングのドメインで問題になりますか?
これらは、クライアント/サーバーモデルを構築するときに役立つ可能性のあるソリューションを構成しますが、リソースの競合が大幅に増加する可能性があります。読み取りの場合、それはそれほど大きな問題ではありません(十分なハードウェアがある場合)が、書き込みの場合は実際に大きな問題です。
ただし、分散ロックです。信頼できるタイムリーなメッセージングの欠如は、Paxosプロトコルのようなものを使用しない限り、分散決定プロトコルを完全に無効にしますが、それには多くの警告があります。分散コンピューティングの基本的な問題は、「メッセージに悪いことが起こる」ことです。TCPのような比較的低レベルのプロトコルは問題を軽減しますが、それでもあなたはひどく行き詰まります。
リソースへのアクセスのために同期しようとする複数の並列スレッドは、分散コンピューティングのドメインで問題になりますか?
それらのスレッドが異なるマシン上で実行される可能性がある場合、または同じマシン上で異なるプロセスで実行されている場合でもそうです。
分散コンピューティングは、異なるコンピューター上で処理が行われるコンピューティングシステムです(分散システム上)。個々のプログラムは、一連の通信チャネルを介して互いに通信します。これらのチャネルは通常、ネットワーク接続(たとえば、TCPソケット)ですが、多くの場合、他の通信プロトコルとデバイス(DeviceNET、BACNet、SECS-2、Modbusなど)、または特定のデバイス用にカスタマイズされたプロトコルを使用します。
分散システムは通常、単一のコンピューターで実行するように設計されたシステムよりもはるかに複雑です。マルチスレッドアプリケーションが対処する必要がある並行性とリソースロックの問題に加えて、分散システムは通信障害と処理ノード障害を処理する必要があります。実行に複数のプロセッサを必要とするトランザクション(およびロールバック)も注意が必要です。
分散システムは多くの形式を取り、現在多くのアプリケーションで使用されています。Webアプリケーションは分散システムです。N層システムには、通常、少なくともN個の異なるプロセッサー(異なるアプリケーション)があります。分散システムは、多くのファクトリオートメーションシステムでも使用されています。
書き込みアップに分散ウィキペディアで計算上は読む価値があります。
マルチスレッドアプリケーションが分散アプリケーションを構成するかどうかについての質問への答えとして、スレッドが単一のコンピューターで実行されている場合、システムは分散されません。分散システムに固有の問題の一部を解決する必要がありますが、すべての問題を解決する必要はありません。
厳密に言うと「分散コンピューティング」とは、複数のコンピューターで単一のトランザクション/要求/計算を処理することを含むソリューションです。
また、「分散システム」という用語に出くわすでしょう。これは、中央のデータセンターの外部に元々展開されていたWindows、UNIX、およびその他の小規模システムサーバーを包括する用語です。これらのシステムは最近ではデータセンター内に展開されるのが一般的ですが、この用語は定着しています。
分散コンピューティングの構成に関する一般的な質問に答えるために、Ann Wollrath、Geoff Wyant、Jim Waldo、Samuel C. Kendallによる論文『分散コンピューティングに関する注意』をお勧めします。それは分散システムとその障害の最近の歴史をカバーしており、分散コンピューティングは関係する問題について異なる考え方を必要とすることを提案しています。
論文ではミューテックスもセマフォも言及していませんが、分散ソフトウェアシステムの適切なエンジニアリングに関する貴重な洞察を提供します。
インタビュアーがミューテックスとセマフォについて尋ねた理由については、@ Calebに同意します。
これらのスレッドが異なるマシンで実行できる場合、または同じマシンで異なるプロセスで実行されている場合でもそうです。
追加する唯一のことは、ミューテックスとセマフォが複数のコンピューティングデバイスに作業を分散できる低レベルのロックプリミティブであり、それらの操作が(通常)アプリケーションの成功に不可欠であることです。明らかに、使用される言語と技術に依存します。ErlangまたはScalaを使用している場合、おそらく、従来のロックベースの同時実行ではなく、アクターモデルベースの同時実行を使用します。
「分散システム」に関するコースがありましたが、その定義は正確には覚えていませんが、次のようなものでした。
(もう少しあったと思いますが、最後の点については確信がありません)
このコースでは、分散トランザクションと分散ロックを実装する方法を学びました。教訓は、分散ロックは基本的に分散トランザクションを使用して実装されることであり、これはローカルで行うこととは逆であり、本質的にフォールトトレラントではないため、そもそも分散システムを使用する目的に反します。
編集:その定義は、オペレーティングシステムまたはデータベースシステムという狭い意味での「分散システム」のためのものであり、単なるクライアントサーバーシステムではありません。最初の条件を満たしているものは、一部のコンテキストでは分散と呼ばれる場合があります。
偶然にも、定義は分散型と従来のバージョン管理システムの違いに一致します。これらはすべて、少なくともクライアント/サーバーであり、多くの場合複製されます。
分散コンピューティングエンタープライズコンピューティングの「非マーケティング」という用語で、実生活でより多く耳にすることがあります。しかし、他の人が指摘した一般的な考え方は、「あなたは仕事をするために複数のコンピューターを使用している」ということです。