簡略化して、Javaアプリケーションは次のように記述できます。Javaアプリケーションのスケーラビリティとフォールトトレランスを実現するには?
これはSOAPインターフェイスを使用してTomcatサーバー上で実行されるWebアプリケーションです。このアプリケーションは、JPA/Hibernateを使用してMySQLデータベースにデータを格納します。格納されるデータは、ユーザのリスト、ホストのリスト、ファイルシステムの巨大なファイル(10GB)を指すURIのリストで構成されます。 システム全体は、アプリケーションが実行されている中央サーバーとワーカーホストの束で構成されています。ユーザは、SOAPインタフェースに接続して、システムに、彼が所属するファイルを特定のワーカーホストにコピーするよう依頼することができます。そこでは、何らかの方法でデータを分析できます(NFSは使用できません。作業者ホストのローカルディスクストレージ)。次に、データベースは、各作業者ホストがファイルを格納する各ユーザーごとに格納します。
現時点では、TomcatアプリケーションとMySQLデータベースを持つ1台の中央サーバーと10人のワーカーホストと約30人のユーザーが、ワーカーホストに分散して格納された100個のファイル(平均10GB)を保持しています。
しかし、将来的にはシステムを100-1000倍にスケールアップする必要があります。だから私は10000ユーザー、100000ファイルと10000ホストに対処する必要があります。また、システムはフォールトトレラントになり、単一のセントラルサーバー(システム内の単一障害点)はありませんが、複数のサーバーが存在する可能性があります。また、ワーカーホストの1つに障害が発生した場合、システムに通知する必要があるため、そのサーバー上のファイルをコピーしようとしません。
私の質問は今ですか?自分のアプリケーションをスケーラブルでフォールトトレラントにするために、どのJavaテクノロジーを使用できますか?どのようなアーキテクチャをお勧めしますか?システム内のすべてのファイル、ホスト、およびユーザーに関するすべての情報を1か所に保存する巨大なデータベースが必要か、データベースを複数のホストに分散して何らかの方法で同期する必要がありますか?