簡単に言えば、私の 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 か所に格納する巨大なデータベースを引き続き使用する必要がありますか?それとも、データベースを複数のホストに分散させて何らかの形で同期させる必要がありますか?