J'ai toujours utilisé la portée session
dans mon application cfml pour faire des choses comme stocker l'objet actuellement connecté user
. C'est bien!comment gérer l'état de cfcs dans un environnement en cluster
user.isLoggedIn()
, user.hasPremiumAccess()
, user.hasRole('admin')
En tentant de migrer mon application à un environnement en cluster (nuage), je me rends compte que le recours à la portée session
est inférieure idéale puisque chaque instance de l'application en cours d'exécution a son propre serveur Mémoire. Je sais que je pourrais utiliser des "sessions persistantes", mais je préférerais ne pas le faire car cela empêcherait quelque chose comme Amazon Elastic Beanstalk de tourner librement des instances de l'application (en fonction de la charge). Je sais aussi que je pourrais utiliser la portée client
pour stocker des valeurs simples d'une manière conviviale pour les clusters, mais qu'en est-il des données complexes, comme l'objet utilisateur que j'ai décrit? Comment stockez-vous l'objet utilisateur ou quelle autre approche puis-je utiliser?
Je peux apporter des modifications aux applications si nécessaire.
** EDIT ** pour être clair, ce n'est pas que je ne peux pas utiliser des sessions collantes, c'est que je ne veux pas utiliser des sessions collantes (ou la réplication de session). La raison en est que je peux tirer parti des avantages de l'extensibilité totale de ne pas compter sur la mémoire serveur/instance pour gérer l'état de la session. Cette approche permet à un service tel qu'Elastic Beanstalk de créer et de supprimer librement des instances de serveur d'applications sans affecter l'utilisateur du tout. L'utilisation de sessions persistantes ne le permet pas.
Quelques solutions possibles je sont pris en considération:
- Sérialisation/désérialisation « état » de l'utilisateur de l'objet utilisateur à stocker dans champ client et « réinitialisant » utilisateur sur chaque chargement de la page
- Sérialisation/désérialisation « état » de l'utilisateur de l'objet utilisateur à stocker dans NoSQL db et « réinitialisant » utilisateur sur chaque chargement de la page
Si vous tentez de utilisez ColdFusion sur Elastic Beanstalk, puis lisez ce message de bogue - [AWS Elastic Beanstalk rejette ColdFusion WARs] (https://bugbase.adobe.com/index.cfm?event=bug&id=3365388) et le post relatif ici - http: // stackoverflow .com/q/12217424/1636917 –
Intéressant. J'essaye d'exécuter un conteneur docker en production (oui, sur Elastic Beanstalk), donc si toutes les promesses sont vraies, tant que le démon docker tourne sur l'instance EC2 (ce qu'il fait), l'application lucee vivant dans le docker le conteneur devrait également fonctionner. Certainement en train de traverser quelques obstacles, mais les doigts croisés. –
Lucee (Railo) n'a pas le problème de ce bug, il se rapporte à Adobe CF seulement je pense. –