1

Apache、Tomcat、およびそれらの前にあるロード バランサーを実行する 3 つのサーバーに Web アプリをデプロイしています。今、私はそれらをクラスター化することを考えています。

これが、私が知っているオプションの通常のオプションと私の制約です。

  1. シリアル化ベースのセッション クラスタリング: 私の場合、アプリケーションはセッションで多くのオブジェクトを使用します。したがって、このソリューションを使用しないことをお勧めします。また、近い将来、サーバーの数が 5 つ以上に増える可能性があります。

  2. Terracotta: 興味深い話ですが、エンタープライズ ライセンスを購入するという選択肢はありません。

  3. アプリケーションをステートレスにする: ちょっと面倒ですが、魅力的に聞こえます。いくつかの設計ガイドラインとそれに関する経験を聞きたいです。

他にアドバイスはありますか?

私の主な目標はフェイルオーバーです。

4

3 に答える 3

2

Terracotta: 興味深い話ですが、エンタープライズ ライセンスを購入するという選択肢はありません。

Terracotta はオープン ソースであるため、ライセンスを購入する義務はありません。これは、あなたが求めている Web セッション レプリケーションへの非シリアライゼーション アプローチを提供します。

開始するには、ここにアクセスしてください: http://www.terracotta.org/web/display/orgsite/Web+Sessions

于 2009-10-25T19:14:23.883 に答える
2

私の理解では、現在3台のサーバーで負荷を分散しているため、私には、すでにクラスタリング(スケーラビリティの部分)を行っており、「それらをクラスタ化する」とは正確に何を意味するのかわかりません. 透過的なフェイルオーバーでさらに先を行くということですか?

シリアル化ベースのセッション クラスタリング: 私の場合、アプリケーションはセッションで多くのオブジェクトを使用します。したがって、このソリューションを使用しないことをお勧めします。また、近い将来、サーバーの数が 5 つ以上に増える可能性があります。

これは、1 つのインスタンスが失敗した場合にユーザーがセッションを失うことを望まない場合にのみ役立ちます。本当にこれが必要な場合は、「永続セッション」が必要になります (ただし、これにはパフォーマンス コストがかかることに注意してください)。Tomcat では、これを実装する方法がいくつか提供されています。

  1. セッション永続性を使用し、セッションを共有ファイル システムに保存します。
  2. セッション永続性を使用し、セッションを共有データベースに保存します。
  3. インメモリ レプリケーションを使用します。

これには実際のベンチが必要ですが、個人的には、インメモリ レプリケーションが私の好みのソリューションです (最高のパフォーマンス)。どんな犠牲を払ってもデータベースへのシリアル化は避けてください (私の経験からするとパフォーマンスが悪いです)。

Terracotta: 興味深い話ですが、エンタープライズ ライセンスを購入するという選択肢はありません。

ここでは、JVM レベルのクラスタリング ソリューションについて言及していると思います。アプリケーションの下にある JVM をクラスタ化する (アプリケーション自体をクラスタ化するのではなく) ことは、アプリケーションを簡単にクラスタ化できない場合の解決策になりますか? しかし、なぜそのような機能を提供しているアプリケーション サーバーでこれを行うのでしょうか?

アプリケーションをステートレスにする: ちょっと面倒ですが、魅力的に聞こえます。いくつかの設計ガイドラインとそれに関する経験を聞きたいです。

を使わないということHTTPSessionですか?はいの場合、なぜですか? どのような問題に直面していHTTPSessionますか? なぜこれを行うのですか?


正直なところ、あなたが達成しようとしていることは私にはわかりません。すでにスケーラブルなソリューション (垂直方向および水平方向) があり、単一障害点はなく (ロード バランサーを除く)、透過的なフォールト トレランス (言い換えれば、多くの人はなくても生きていける)。さらに、透過的なフォールト トレランスには、無視できないパフォーマンスやハードウェアの面で実際のコストがかかります。したがって、本当の問題は次のとおりです。ユーザーがセッションを失うと、企業はそれほど多くのお金を失いますか? それは重要/頻繁ですか?これは、透過的な耐障害性を実装するためにお金を使うことを正当化するものですか?

于 2009-10-19T17:50:31.063 に答える
1

従来、これは本当にステートレスな珍しいWebアプリですが、最近のAjaxの時代には、ブラウザーでステートを維持することがより一般的だと思います。

個々のユーザーセッションがサーバーの損失を乗り切るためにクラスタリングを使用することが目的である場合は、何らかの転送コストを支払う必要があります。あなたは:

  • すべてをデータベースに保存します。たぶんblobとしてシリアル化されます。セッションがタイムアウトしたときに、これらのBLOBをハウスキーピングする必要があります。WebSphereなどのアプリケーションサーバーにはその機能があります。
  • ある種のメモリ-メモリレプリケーションを使用します。ここでも、転送/シリアル化のコストがいくらか必要になります。そのレプリケーションの頻度と、セッションの最近の更新が失われる可能性とのトレードオフを行うことができます。

どちらの場合も、「セッションアフィニティ」を目指します。ユーザーのリクエストはデフォルトで同じクラスタメンバーに送信され、事実上、「ホーム」インスタンスは書き込みスルーキャッシュとして機能します。

ご使用の環境で既製のものが提供されているかどうかはわかりません。理想的には、サーバープロバイダーにセッション管理機能が組み込まれている必要があります。このようなものを作成するのは簡単ではありません。

于 2009-10-19T16:23:19.820 に答える