我一直在我的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我認爲。 –