私の理解では、現在3台のサーバーで負荷を分散しているため、私には、すでにクラスタリング(スケーラビリティの部分)を行っており、「それらをクラスタ化する」とは正確に何を意味するのかわかりません. 透過的なフェイルオーバーでさらに先を行くということですか?
シリアル化ベースのセッション クラスタリング: 私の場合、アプリケーションはセッションで多くのオブジェクトを使用します。したがって、このソリューションを使用しないことをお勧めします。また、近い将来、サーバーの数が 5 つ以上に増える可能性があります。
これは、1 つのインスタンスが失敗した場合にユーザーがセッションを失うことを望まない場合にのみ役立ちます。本当にこれが必要な場合は、「永続セッション」が必要になります (ただし、これにはパフォーマンス コストがかかることに注意してください)。Tomcat では、これを実装する方法がいくつか提供されています。
- セッション永続性を使用し、セッションを共有ファイル システムに保存します。
- セッション永続性を使用し、セッションを共有データベースに保存します。
- インメモリ レプリケーションを使用します。
これには実際のベンチが必要ですが、個人的には、インメモリ レプリケーションが私の好みのソリューションです (最高のパフォーマンス)。どんな犠牲を払ってもデータベースへのシリアル化は避けてください (私の経験からするとパフォーマンスが悪いです)。
Terracotta: 興味深い話ですが、エンタープライズ ライセンスを購入するという選択肢はありません。
ここでは、JVM レベルのクラスタリング ソリューションについて言及していると思います。アプリケーションの下にある JVM をクラスタ化する (アプリケーション自体をクラスタ化するのではなく) ことは、アプリケーションを簡単にクラスタ化できない場合の解決策になりますか? しかし、なぜそのような機能を提供しているアプリケーション サーバーでこれを行うのでしょうか?
アプリケーションをステートレスにする: ちょっと面倒ですが、魅力的に聞こえます。いくつかの設計ガイドラインとそれに関する経験を聞きたいです。
を使わないということHTTPSession
ですか?はいの場合、なぜですか? どのような問題に直面していHTTPSession
ますか? なぜこれを行うのですか?
正直なところ、あなたが達成しようとしていることは私にはわかりません。すでにスケーラブルなソリューション (垂直方向および水平方向) があり、単一障害点はなく (ロード バランサーを除く)、透過的なフォールト トレランス (言い換えれば、多くの人はなくても生きていける)。さらに、透過的なフォールト トレランスには、無視できないパフォーマンスやハードウェアの面で実際のコストがかかります。したがって、本当の問題は次のとおりです。ユーザーがセッションを失うと、企業はそれほど多くのお金を失いますか? それは重要/頻繁ですか?これは、透過的な耐障害性を実装するためにお金を使うことを正当化するものですか?