Java および .NET でスケーラブルな Web/エンタープライズ アプリケーションを作成するための推奨手順は何ですか? 私は、少量のアプリから大量のアプリに移行するために何が必要かということにもっと興味があります (元のアーキテクチャに大きな欠陥がないことを前提としています)。たとえば、クラスタリング、負荷分散、セッション管理、キャッシングなどの各プラットフォームのオプションは何ですか。
4 に答える
残念ながら、あなたの質問には文脈に依存する側面がたくさんあります。スケーラビリティとは、要件やアプリケーションによって意味が異なります。(使用しているテクノロジに関係なく) アーキテクチャを考え出す際に答える必要がある質問には、次のようなものがあります。
- たとえば、非常に大量のデータを操作するユーザーをサポートしたいですか、それとも比較的少量のデータを操作している多数のユーザーを単にサポートする必要があるだけですか?
- 読み取りは負荷が低く、書き込みは負荷が高いため、アプリケーションは書き込みよりも読み取りを多く行いますか?
- アプリケーション内のデータは常に一貫していますか、それとも結果整合性で十分ですか? ソーシャル ネットワーキング サイトにメッセージを投稿することと、銀行口座からお金を引き出すことを考えてみてください)。
- アプリケーションはどの程度利用可能である必要がありますか? 厳密な高可用性要件では、1 つのサーバーがクラッシュしたときに、他のサーバーへのスムーズなフェールオーバーが必要になる可能性があります。
アプリケーション アーキテクチャに関する適切な議論を行う前に、特定のアプリケーションについて回答する必要がある、このような質問は他にもたくさんあります。
ただし、質問をそのままにしておくわけではありません。スケーラビリティのために Web アプリケーションを設計する際に考慮すべき最も重要なことは、1 つではありません。アプリケーションのセッション状態 (グローバル アプリケーション カウンター、キャッシュされた主キー ブロックなど)。スケールアップしようとしている場合、クラスター全体で共有状態をレプリケートすると、非常に高いコストがかかります
おそらく非常に多くのオプションがあるため、すべてのオプションを完全に検討できる人はいないでしょう。通常、最初に言語を選択し、次に希望する結果を達成する方法を決定します。
私の推測では、ほぼすべての主要な汎用言語で適切なオプションがあると思います。これは 10 年前には問題だったでしょうが、今日の私見ではそうではありません。
Java で利用可能なオープン ソース テクノロジの適切な比較はhttp://java-sources.org/ にあります。
スケーラブルなシステムでは、ネットワーク コンポーネントなどのハードウェア ソリューションも考慮する必要があります。
少量のアプリを大量のアプリに変えるための私の提案は、最初はかなり大量のものから始めて、それを再設計することを期待することです.
どのような種類のボリュームについて話しているのですか? ボリュームの高低に対する期待は人それぞれ異なります。たとえば、Google のボリュームが平均よりも少ない場合、電力を節約するためにデータ センター全体を切り替えます。;)
MySpace がどのように拡大したかについてのこの説明に出くわしました。これは非常に興味深く、まさに私が探している種類の情報です。ただし、パーティショニングやキャッシングなどを作成するために使用されるテクノロジーについての議論はありません...
短い答え - それは異なります。(もしあれば) どのようなビジネス目標が関係していますか? プロジェクトの予算と期間は?どの業界(規制されている)ですか?