java - AWS, Spring 启动,Tomcat : Session replication

标签 java amazon-web-services spring-mvc tomcat spring-boot

我有一个 spring boot 应用程序,它使用嵌入式 tomcat。该应用程序托管在多个 EC2 实例上,如果需要,这些实例会自动缩放,其中一些可能会被终止/重新启动。因此,实际上有 3 个应用程序实例在运行,并且请求从负载均衡器路由到这些实例中的任何一个。

我正在尝试在我的应用程序上跟踪用户 session 。我开始使用 tomcat HttpSession 实现容器级 session 管理。但它无法跨实例跟踪 session 。经过一番研究,我知道我需要像 session 复制这样的东西。

我的应用程序没有运行 tomcat 集群,它有 3 个独立的 API 实例,它们无论如何都不会相互通信。我不打算改变它,也不确定 AWS 是否可行,因为它不鼓励为此目的进行多播通信。

此外,我不想为此目的设置/管理一个单独的数据库(如 redis with spring session),因为我只需要 session IDs 进行日志记录,我需要以一种轻量级的方式来做到这一点。

还有其他方法可以跨实例管理 session 吗?或者为了我的目的,只实现一些可以检查在前端和后端之间来回传递的 session ID/ token 的自定义代码会更好吗?

最佳答案

目标是从您的应用程序服务器外部化 session ,以便您可以自动缩放、重新启动、负载平衡等,而不必担心中断用户的 session 。

老实说,在 AWS 上使用 Spring 堆栈,我会推荐 Spring Session + Redis .我已经用过无数次了,而且很容易实现。您可以利用 AWS Elasticache它为您管理 Redis 集群(就像 RDS 为关系数据库所做的那样)。

您可以使用 S3、Dynamo 等后备存储编写您自己的 Spring Session 自定义实现。但这真的比 Redis 实现好吗?我会推荐阻力最小的路径。

关于java - AWS, Spring 启动,Tomcat : Session replication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45327456/

相关文章:

java - 如何正确实现 SparseArray 以在 ViewPager 的每个实例上存储自定义对象? Android 开发 - Java

java - 是否可以保留包含另一个集合的 map

java - 如何针对 Controller 的特定方法跳过Spring身份验证

java - Spring @Profile 注解在测试中不起作用

java - 服务器发送事件代码在 jelastic 上不起作用

java - 从 map 中查找前 100 个元素的最有效方法

amazon-web-services - 如何在 AWS CDK 中检索 SecretsManager key

amazon-web-services - AWS Cloudwatch 在动态标签上触发 Codepipeline

amazon-web-services - 无法删除通过 CloudFormation 模板附加到 EC2 实例的其他 ENI

java - spring roo可以解析注释@javax.validation.constraints.Size参数中的变量吗?