2017-07-26 83 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