AWSを使用してアプリケーションを構築するだけで、このアプリケーションは分散システムになりますか?
たとえば誰かが使用する場合
[〜#〜] rds [〜#〜]データベースサーバーの場合
EC2アプリケーション自体および
S3ユーザーがアップロードしたメディアをホストする場合、
それはそれを分散システムにしますか?
そうでない場合、何を呼び出す必要がありますか?このアプリケーションを配布するには何が不足していますか?
更新
これは、システムを構築するための私のアプローチを明確にするためのアプリケーションの私の見解です:
これは素朴なアプローチのように聞こえるかもしれませんので、あなたの考えを表現するのに恥ずかしがらないでください。
分散システムに関する(少なくとも)2行の考え方があり、環境によって異なりますシステムはそうでない場合もあります =)qualifyなど:
コンピュータサイエンス-この場合、分散システムはアルゴリズムの問題を解決し、コントローラがタスクを調整しなくても、各ノードが処理の一部を実行する場合があります。通常、目標は 分散アルゴリズム を見つけて問題をより効率的に解決することです。
情報システム-この場合、分散システムとは、プレゼンテーション、アプリケーション、およびデータベースを、ネットワークを介して通信する(相互にメッセージを渡すことにより)複数の自律エンティティ間で分散するシステムです。
(同じ定義である誠実に抽象的なレベルでは、計算上の問題は実際にはアルゴリズムの問題ですが、この議論は別の議論のために保存しましょう)。
だから、はい、あなたはあなたの分散システムを考えることができます Wikipedia にあるような定義があれば、それを議論することができます:
1. There are several autonomous computational entities, each of which has its own local memory.[7] 2. The entities communicate with each other by message passing.[8]
あなたの場合、あなたのアプリケーションコード、データベースサーバー、そして画像サーバーと一緒のウェブサーバーは、すべて独自のローカルメモリを持つ自律計算エンティティであり、そしてメッセージの受け渡し(つまり、ネットワークを介してメッセージを送受信する)によって通信します。
同じウィキペディアの記事には、分散システムを構築するためのいくつかのアーキテクチャもリストされています。そのうちの1つは n-tierアーキテクチャ です。
ソフトウェアエンジニアリングでは、多層アーキテクチャ(n層アーキテクチャとも呼ばれます)は、プレゼンテーション、アプリケーション処理、およびデータ管理機能が論理的に分離されたクライアント/サーバーアーキテクチャです。
さらに、システムには明らかに複数の層(アプリケーション、データベース、イメージストア)があります。 Symfonyの MVCモデル をたどっていれば、おそらく複数のレイヤーもあるでしょう。 MVCは、定義上、プレゼンテーションとアプリケーションロジックを分離します。プレゼンテーションレイヤー(の少なくとも一部)は確実にWebブラウザーによって実行されるため、これは実際には 3層です。 アーキテクチャ :
3層システムは、クライアントインテリジェンスを中間層に移動し、ステートレスクライアントを使用できるようにします。これにより、アプリケーションのデプロイメントが簡素化されます。ほとんどのWebアプリケーションは3層です。
あなたのデザインは少し分散していますが、非常にシンプルで最小限の方法です。複数のサーバー間でワークロードを機能的に分解しました。 1980年には、それは分散システムと見なされていました。ただし、ワークロードの個々の部分を複数のサーバーに分散(別名、パーティション、シャード)することはありません。実質的な作業の分担も、複数のノードまたはデータセンターにわたる意味のあるレプリケーションもありません。ストレージ(S3およびCloudFront CDN)は1つの例外です。これらのサービスは、本質的にストレージアクセスを分散します。
「クラウドアプリ」または「クラウドサービス」と呼んでもかまいませんが、今日の標準では、あまり配布されていません。
あなたの例では、配布ではなく委任について説明しています。委任は、特定のタスクを適切なサブシステムに割り当てることです。分散は、プロセスを並行して実行できるほぼ類似した部分に分割します。単純なリトマステスト:このシステムを拡張する必要がある場合は、「拡大」(より大きなコンピューター)または「縮小」(追加の小さなコンピューター)してください。これを10倍に拡大できますか? 1000倍?これらは、分散システムによって解決される現実の問題です。
リソースは分散されますが、ロジックは分散されません。データベースとS3リポジトリの両方がアプリケーションによって制御され、アプリケーションが異なるマシン間で実行するタスクに並列処理はありません。ウィキペディアによれば、分散システムには2つの要件があり、どちらも、あなたが説明した(または明確化されていない)システムから欠落しています。
その意味では、それは分散システムではなく、リソースにアクセスして同期する方法に関するアクションを調整するために、このアプリケーションを実行するさまざまなEC2サーバーが必要になります。
編集:質問から、EC2インスタンスが1つだけ使用されているのか、それとも多数使用されているのかは明確ではありません。上記の私の返信では、単一のインスタンスを想定しています。
編集:OPからの更新された質問は、それが単一のEC2インスタンスであることを明確にします。学術的には、このようなアプリケーションは多層型と見なされます。クライアント層はエンドユーザーのマシンにあり、Web層はEC2サーバー、Enterprise Information System(EIS)層はデータベースとS3リポジトリです。この場合も、アプリケーションを配布するには、Web層の処理を複数のサーバーに分散する必要があります。ただし、業界では、場所が分かれているため、このようなアプリケーションは分散されていると見なすことができます。したがって、EC2サーバーで実行されるアプリ自体は分散システムではないが、セットアップ全体(クライアントのブラウザー<-> Webアプリ<->データベース/ s3)は分散アーキテクチャ/アプリケーションと見なすことができます。
この質問も確認してください: https://stackoverflow.com/questions/3542204/multi-tier-vs-distibuted