如何在 AWS 服务器上管理用户会话?

How to manage a User Session on a AWS server?

我的后端在 JAVA 中,网站托管在 AWS 服务器(2 台或更多台)上。在我的网站上处理用户会话的最佳方式是什么?

调查了 HTTPSession 但它的缺点是一个服务器的会话与另一个服务器的会话不具有相同的属性。 那么处理用户会话的最佳解决方案是什么?

P.S.: 我正在使用 Struts2.

当您有多个可以处理请求的应用服务器时,处理会话状态的主要方法有两种:

  1. 让您的负载均衡器实施 "sticky" 会话。在这里,负载均衡器将来自同一客户端的所有请求发送到同一应用服务器。会话在那里本地维护,一切都像只有一个应用程序服务器一样工作。当应用程序服务器出现故障时,粘在该服务器上的所有会话都会丢失。

  2. 有一个可供所有应用服务器使用的通用会话存储。当应用程序服务器收到请求时,它会从会话存储中获取会话状态,并在修改完该请求的会话状态后,将其写回存储中。会话存储可能是共享数据库,也可能是所有应用程序服务器都可以远程访问的内存缓存。如果应用程序服务器出现故障,不会丢失任何会话。但是,通过网络 read/write 会话的每个请求都会产生额外的开销。

要决定使用哪种方法,您需要考虑在丢失服务器时不终止会话的重要性、会话状态大小等。在我看来,公共会话存储几乎总是可取的,因为它在操作上更容易处理 - 您可以随时重击服务器而不会终止会话。

我不会推测可用于支持实施的产品的可能选择,因为这将纯粹基于意见并且与本网站无关。可以说有很多不错的选择 - 适合您的特定选择将取决于您的具体要求和专业知识。