3

私は現在、AWS でホストされているウェブ アプリケーションを使用しており、2 つの ELB インスタンスを使用しています。くだらないアスキー図で申し訳ありません):

           /-->APP1--\    /-->API1
User-->ELB1           ELB2
           \-->APP2--/    \-->API2

つまり、APP サーバーが行う API 要求は、2 つのバックエンド API サーバー間で均等に負荷分散されます。

しかし、私は API サーバーで応答をキャッシュしており、API サーバー間で共有されないキャッシュ無効化メカニズムを使用しているため、ユーザーのセッションを 1 つのバックエンド API サーバーに固定したいと考えています。

通常の ELB ロード バランサーによって生成された Cookie の粘着性を使用して、既にユーザーのセッションを 1 つの APP サーバーに固定していますが、バックエンド ELB をセッションに固定する方法はありますか? もちろん、これらのリクエストはブラウザからのものではないため、Cookie を管理するものは何もありません。また、ELB は Cookie を使用して粘着性を管理することしかできないようです。バックエンド リクエストに必要な Cookie をエミュレートできますか?

4

2 に答える 2

1

この質問を締めくくるには、はい、ELB から 'Set-Cookie' 応答ヘッダーをキャプチャし、その後の要求で Cookie を返すだけで、これを実現するのはかなり簡単です。ただし、以下の警告を参照してください。

于 2016-04-07T23:02:55.867 に答える
0

煩雑な作業を行わずに、アプリ サーバーと API サーバーの間の粘着性を実現できるとは思えません。私は間違っている可能性があり、修正に対して非常にオープンですが、App Server ロジックに使用している言語が提供するものがない限り、簡単な解決策があるとは思いません。

とにかく、ここでの最善の解決策は、アプリ サーバーとキャッシュを切り離すことです。別々のサーバーによって提供される API サーバー間で単一のキャッシュを共有する方が理にかなっています。これにより、インフラストラクチャのフォールト トレランスが向上し、キャッシュ内のデータの品質が向上します (特にスケールアップする場合)。ElastiCacheサービスを使用してこれを行うことができ、面倒な作業を避けることができます。

于 2016-03-19T23:06:55.470 に答える