まず、Tomcat インスタンス間でセッションを共有できます。リクエストを受信したTomcatサーバーは、基本的にそのセッションの複製を他のすべてのTomcatサービスに送信します。
この要求を駆り立てている表現されていないニーズがあると思わずにはいられませんが、実際にニーズを満たす方法を尋ねることなく、これを実装する方法だけを尋ねたいと思います。このような状況では、ニーズは満たされませんが、要求は満たされることがよくあります。
たとえば、1 つのサーバーへの 1000 のリクエストとローテーションについて心配する代わりに、単純な複数の IP アドレスから DNS ホスト名への構成により、ラウンドロビン方式でリクエストを分散できます。
データベースに対してセッションを調整することもできます。データベースは、読み取りの一貫性を備えた適切なストレージ機能を提供します。適切な構成があれば、「次の番号」は処理ノードによって簡単に読み取ることができます。
最後に、分散コンピューティングを活用する他の手段があります。たとえば、すべての処理ノードが新しい「次の」番号を持つことを保証するために、Paxos のようなプロトコルを開始する内部要求リレーによって要求を処理できます。
これらのテクニックはすべて簡単です。ただし、それらは単純すぎるとは思えないため、すぐにそれらを却下します。おそらく、もっと単純な代替手段を探しているかもしれませんが、それで問題はありません。ただし、2 台以上のコンピューターで、一貫して確実に、同時に、ある項目に同意させることは、私たちが望んでいるよりも少しトリッキーです。この分野で新しい取り組みを始めるのは自由ですが、余分なオーバーヘッドと複雑さには本当の理由があることに気付くだけかもしれません。これは些細な問題ではありません。
- - アップデート - -
ラウンド ロビン スタイルでリクエストを処理でき、サーバー間でリクエストを並べ替える必要がなく、N 個のサーバーしかないことがわかっている場合は、N 個の異なるリクエスト カウンターを実装できます。
- サーバー 1 は N だけインクリメントします。
count % N == 0
- サーバー 2 は、次のことを保証して N ずつインクリメントします。
count % N == 1
- ...
- サーバー N-1 は、次のことを保証して N ずつインクリメントします。
count % N = N-2
- サーバー N は N ずつインクリメントし、次のことを保証します。
count % N = N-1
もちろん、クロスサーバー カウントは、短いセッションではグローバルな順序から外れている可能性がありますが、必要なものがすぐに得られる可能性があります。
- リクエストごとの一意のカウント
- サーバーごとのリクエストの順序付け
- すべてのサーバーで一意であることが保証されたカウント
- どのサーバーがリクエストを処理したかを判断する簡単な方法
あなたに欠けているもの