2017-07-26 87 views
0

我有一個spring boot application,它使用embedded tomcat。該應用託管在多個EC2實例上,如果需要可自動縮放,其中一些可能會被終止/重新啓動。所以,實際上有3個應用程序正在運行,並且請求會從負載均衡器路由到這些實例中的任何一個。AWS,Spring Boot,Tomcat:會話複製

我想在我的應用程序track user sessions。我開始使用tomcat HttpSession來實現容器級別的會話管理。但它無法跟蹤實例間的會話。在研究一下,我知道我需要類似會話複製的東西。

我的應用程序沒有運行一個tomcat集羣,它有3個獨立的API實例,它們無論如何都不相互交談。我不打算改變這種情況,不確定是否可以使用AWS,因爲它不鼓勵爲此目的進行多播通信。

此外,我不想設置/管理一個單獨的數據庫(如redis with spring session)只是爲了這個目的,因爲我只需要session Ids進行日誌記錄,我需要以輕量級的方式做到這一點。

是否有任何其他方式來管理跨實例的會話?或者爲了我的目的,僅僅實現一些可以檢查在前端和後端之間來回傳遞的會話標識/令牌的自定義代碼會更好。

回答

1

目標是從應用程序服務器中外部化會話,以便您可以自動縮放,重新啓動,負載平衡等,而不必擔心會中斷用戶的會話。

老實說,在使用Spring堆棧的AWS上,我會推薦Spring Session + Redis。我已經無數次地使用它,並且它很容易實現。您可以利用爲您管理Redis集羣的AWS Elasticache(如RDS對關係數據庫所做的那樣)。

您可以使用S3,Dynamo等的後備存儲編寫您自己的Spring會話自定義實現。但這真的比Redis實現更好嗎?我會建議阻力最小的路徑。

+0

如何使用成本效益的tomcat集羣? – Navin