2008-08-28 8 views
1

Je demande vraiment par procuration, une autre équipe au travail a eu une demande de changement de notre client.Connexions simultanées dans une ferme Web

Le problème est que notre client ne veut pas que ses employés se connectent avec un utilisateur plus d'un en même temps. Qu'ils se verrouillent et partagent les connexions.

Puisqu'il s'agit d'une ferme Web, quel serait le meilleur moyen de résoudre ce problème?

La mise en mémoire cache dans la base de données ne provoquerait-elle pas des problèmes de performances?

Répondre

7

Vous pouvez envisager d'utiliser un système de cache distribué comme memcached

Cela réglerait ce problème assez bien (il est beaucoup plus rapide qu'une base de données), et est également excellent pour la mise en cache à peu près tout le reste aussi

6

C'est juste un coût de faire des affaires.

Oui, la mise en cache dans une base de données est plus lente que la mise en cache sur votre serveur Web. Mais vous devez stocker ces informations d'état dans un emplacement centralisé, sinon un serveur Web ne saura pas quels utilisateurs sont connectés à un autre. Hypothèse: Vous essayez d'empêcher plusieurs connexions simultanées par un seul utilisateur.

1

Cela dépend de la façon dont l'authentification est effectuée. Si vous stockez la dernière date de connexion réussie (quel que soit le backend), vous pouvez peut-être modifier le schéma pour stocker un drapeau "logged_in" et cela n'entraînera pas de coût de performance supplémentaire. (ok, ce n'est pas propre du tout)

3

Une opération de base de données à la connexion et à la déconnexion ne causera pas de problème de performances.

  • Si vous utilisez un proxy de mise en cache, qui causeront un problème:
  • un utilisateur se déconnecte, mais ne sera pas en mesure de se reconnecter jusqu'à la fermeture de session atteint le cache

Votre plus gros problème potentiel pourrait être:

  • si les accidents app/boîte sans une chance pour l'utilisateur de se déconnecter, l'état de l'utilisateur dans la base de données restera « connecté ».
Questions connexes