我一直在我的cfml应用程序中使用session
作用域来执行诸如存储当前登录的user
对象之类的操作。这很棒!如何管理群集环境中的cfcs状态
user.isLoggedIn()
,user.hasPremiumAccess()
,user.hasRole('admin')
在试图我的应用程序迁移到集群(云)的环境中,我认识到,依靠session
范围小于理想的,因为正在运行的应用程序的每个实例都有自己的服务器记忆。我知道我可以使用“粘性会话”,但我宁可不要,因为这会限制Amazon Elastic Beanstalk等应用程序的实例(基于负载)自由旋转。
我也知道我可以使用client
范围以集群友好的方式存储简单值,但是复杂数据如我描述的用户对象呢?你将如何存储用户对象,或者我可以使用什么其他方法?
我可以根据需要进行应用程序更改。
**编辑**要清楚,不是我不能使用粘性会话,而是我不想使用粘性会话(或会话复制)。原因是我可以充分利用不依赖服务器/实例内存来管理会话状态的全部可扩展性优势。这种方法允许诸如Elastic Beanstalk之类的服务自由地创建和拆除应用程序服务器实例,而不会影响用户。使用粘性会话不允许这样做。
一些可能的解决方案,我已经考虑的因素包括:
- 序列化用户对象用户/反序列化“状态”来存储客户范围并在每个页面加载
- 序列化/反序列化“重新初始化”用户用户对象用户的“状态”在的NoSQL数据库存储和在每个页面加载“重新初始化”用户
如果你试图在Elastic Beanstalk上使用ColdFusion,然后阅读此错误信息 - [AWS Elastic Beanstalk拒绝ColdFusion WARs](https://bugbase.adobe.com/index.cfm?event=bug&id=3365388)以及相关文章 - http:// stackoverflow .com/q/12217424/1636917 –
有趣。我试图在生产环境中运行Docker容器(是的,在Elastic Beanstalk上),所以如果所有的承诺都是真的,只要docker守护进程在EC2实例上运行(它就是这样),lucee应用就在Docker内部容器也应该运行。肯定通过一些障碍,但手指交叉。 –
Lucee(Railo)没有这个问题,它只涉及Adobe CF我认为。 –