Java 与特定会话相关的客户端请求如何路由?
假设您在后端使用spring MVC,现在假设一个客户端向服务器发出请求,该请求的会话对象在过期之前在服务器中发出并保存一段特定时间,现在每次该客户端发出一个单独的请求时,服务器都会通过会话对象记住它是哪个客户端 我的问题是,在生产设置中,一个应用程序中可能有数千台这样的服务器,是什么负责确保客户机发出的任何后续请求最终都会发送到包含客户机会话信息的服务器Java 与特定会话相关的客户端请求如何路由?,java,spring,model-view-controller,server,Java,Spring,Model View Controller,Server,假设您在后端使用spring MVC,现在假设一个客户端向服务器发出请求,该请求的会话对象在过期之前在服务器中发出并保存一段特定时间,现在每次该客户端发出一个单独的请求时,服务器都会通过会话对象记住它是哪个客户端 我的问题是,在生产设置中,一个应用程序中可能有数千台这样的服务器,是什么负责确保客户机发出的任何后续请求最终都会发送到包含客户机会话信息的服务器 比如说在一个应用程序中,有5台服务器1,2,3,4,5。客户机向应用程序发出请求,请求最终到达服务器4,当请求到达服务器4时,将为客户机创建
比如说在一个应用程序中,有5台服务器1,2,3,4,5。客户机向应用程序发出请求,请求最终到达服务器4,当请求到达服务器4时,将为客户机创建一个会话。现在,假设客户端向服务器发出另一个(全新)请求,应用程序如何知道该请求应该路由到服务器4,该客户端的会话信息以前存储在那里 应用程序没有。一般有两种方法:
- “粘性会话”,实例前面的负载平衡器跟踪会话并每次将它们路由到相同的实例。这是快速和肮脏的,但它的主要缺点是脆弱。例如,如果某个实例崩溃或因升级或缩小规模而关闭,您将失败
- 将会话信息存储到其他位置。Spring通过Spring会话使这变得非常简单。(我个人更喜欢使用Redis和JSON序列化。)在这种情况下,过滤器会检索每个请求的会话,并在必要时更新存储的版本