8

簡単に言えば、私の Java アプリケーションは次のように記述できます。

これは、SOAP インターフェイスを備えた Tomcat サーバー上で実行される Web アプリケーションです。アプリケーションは、JPA/Hibernate を使用して MySQL データベースにデータを保存します。保存されるデータは、ユーザーのリスト、ホストのリスト、およびファイル システム内の巨大なファイル (10 GB) を指す URI のリストで構成されます。システム全体は、アプリケーションが実行されている中央サーバーと、多数のワーカー ホストで構成されています。ユーザーは SOAP インターフェースに接続し、自分に属するファイルを特定のワーカー ホストにコピーするようシステムに要求できます。そこで、何らかの方法でデータを分析できます (NFS は使用できません。データをワーカー ホストのローカル ディスク ストレージ)。次に、データベースは、ユーザーのファイルが保存されているワーカー ホストにユーザーごとに保存します。

現在、システムは、Tomcat アプリケーションと MySQL データベースを備えた 1 つの中央サーバー、10 のワーカー ホスト、および 100 個のファイル (平均 10 GB) のサイズがワーカー ホストに分散して格納されている約 30 人のユーザーで実行されています。

しかし将来的には、システムを 100 倍から 1000 倍に拡張する必要があります。したがって、10,000 人のユーザー、100,000 のファイル、および 10,000 のホストを処理する必要があるかもしれません。また、システムは耐障害性も備えている必要があるため、中央サーバーは 1 つ (現在のシステムの単一障害点) ではなく、複数ある可能性があります。また、ワーカー ホストの 1 つに障害が発生した場合、システムに通知する必要があるため、そのサーバー上のファイルをコピーしようとしません。

私の質問は次のとおりです。アプリケーションをスケーラブルでフォールト トレラントにするために、どの Java テクノロジを使用できますか? どのようなアーキテクチャをお勧めしますか? システム内のすべてのファイル、ホスト、およびユーザーに関するすべての情報を 1 か所に格納する巨大なデータベースを引き続き使用する必要がありますか?それとも、データベースを複数のホストに分散させて何らかの形で同期させる必要がありますか?

4

1 に答える 1

13

必要なテクノロジーはアーキテクチャと呼ばれます。

どのテクノロジーを使用する場合でも、スケーラビリティと冗長性のために適切に設計されたシステムが必要です。現在動作しているシステムのアーキテクチャ全体の図を作成します。ユーザー、ジョブ、帯域幅、ハード ドライブ容量、メモリ、またはアプリケーションを制限している部分について、各コンポーネントに制限を付けます。これにより、ベースライン デザインが得られます。

次に、スケーラビリティと冗長性の要件を満たすために必要な図と同じ図を作成します。それを機能させるには、断片をバラバラにするか、まったく新しい断片を開発する必要があるかもしれません。この図は、何が必要かを非常に明確にします。

私が対処したい具体的なことの 1 つは、データベースです。データベースを複数のロジスティック ラインに分割して、クエリを別のクエリに結合しないようにできる場合は、個別のデータベースを使用する必要があります。さらに、データベースの最適な構成は、多くのストレージと非常に高速なアクセス時間を備えた 1 台の高速マシンに各データベースを配置することです。これを行うと、データベースの速度を低下させる唯一のものは、不適切なクエリまたは不十分なインデックスのテーブルです。私の経験では、書き込みアクセス権を持つマスター データベースが 1 つあり、それが読み取り専用の他のデータベースにレプリケートされない限り、データベースの同期は避けるべきです。いずれにせよ、これはすべてのクエリのプロファイルを作成した後の最後のステップであり、文字通り追加のハードウェアが必要になります。

于 2011-02-02T20:23:08.410 に答える