2011-02-02 18 views
8

簡略化して、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か所に保存する巨大なデータベースが必要か、データベースを複数のホストに分散して何らかの方法で同期する必要がありますか?

答えて

11

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

どのテクノロジを使用する場合でも、スケーラビリティと冗長性に優れたシステムを構築する必要があります。現在動作しているシステムのアーキテクチャ全体の図を作成します。ユーザー、ジョブ、帯域幅、ハードドライブの空き領域、メモリ、またはアプリケーションに限定されている部分に制限があるため、各コンポーネントをマークしてください。これにより、ベースライン設計が可能になります。

スケーラビリティと冗長性の要件を満たすために必要なのと同じ図を描きましょう。作品を機能させるために作品を分割するか、まったく新しい作品を開発する必要があります。この図は、必要なものを非常に明確にします。

私が取り上げたいのは、データベースです。ロジスティック・ライン間でデータベースを分割して、問合せを結合しない場合は、別々のデータベースを用意する必要があります。それ以外にも、データベースの最適な構成は、各データベースを1台の高速なマシンに多くの記憶域と非常に高速なアクセス時間を持つようにすることです。これを行うと、データベースの速度を落とす唯一の問題は、不正なクエリまたはインデックスのないテーブルです。私の経験では、書き込みアクセス権を持ち、読み取り専用の他のデータベースに複製する1つのマスタデータベースがない限り、データベースの同期は避けてください。それにかかわらず、これはすべてのクエリのプロファイルを作成し、文字通り追加のハードウェアが必要になった後の最後のステップになります。

関連する問題