質問
本当に代理で質問しているのですが、職場の別のチームがお客様から変更リクエストを受けています。
問題は、お客様が従業員に 1 人のユーザーと同時に複数のユーザーでログインすることを望まれていないことです。彼らはロックアウトされ、ログインを共有しているということです。
これは Web ファーム上で行われているため、この問題に対処する最善の方法は何でしょうか?
データベースにキャッシュするとパフォーマンスの問題が発生しないでしょうか?
解決
次のような分散キャッシュ システムの使用を検討できます。 memcached
この問題はかなりうまく解決され (データベースよりもはるかに高速です)、他のほとんどすべてのものをキャッシュするのにも優れています。
他のヒント
それは単にビジネスを行うためのコストです。
はい、データベースへのキャッシュは、Web サーバーでのキャッシュよりも遅くなります。ただし、その状態情報を一元的な場所に保存する必要があります。そうしないと、ある Web サーバーがどのユーザーが別の Web サーバーにログインしているかを知ることができなくなります。
予測:1 人のユーザーによる複数の同時ログインを防止しようとしています。
ログイン時とログアウト時のデータベース操作によってパフォーマンスの問題が発生することはありません。
- キャッシュ プロキシを使用している場合は、問題が発生します。
- ユーザーはログアウトしますが、ログアウトがキャッシュに到達するまで再度ログインすることはできません。
潜在的な最大の問題は次のようなものかもしれません。
- ユーザーがログアウトできないままアプリ/ボックスがクラッシュした場合、データベース内のユーザーの状態は「ログイン」のままになります。
それは認証がどのように行われるかによって異なります。最後に成功したログイン日時を保存する場合 (バックエンドが何であれ)、フラグ「logged_in」を保存するようにスキーマを変更すると、追加のパフォーマンス コストがかからなくなる可能性があります。(まあ、全然きれいじゃないけど)