Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与特定会话相关的客户端请求如何路由?_Java_Spring_Model View Controller_Server - Fatal编程技术网

Java 与特定会话相关的客户端请求如何路由?

Java 与特定会话相关的客户端请求如何路由?,java,spring,model-view-controller,server,Java,Spring,Model View Controller,Server,假设您在后端使用spring MVC,现在假设一个客户端向服务器发出请求,该请求的会话对象在过期之前在服务器中发出并保存一段特定时间,现在每次该客户端发出一个单独的请求时,服务器都会通过会话对象记住它是哪个客户端 我的问题是,在生产设置中,一个应用程序中可能有数千台这样的服务器,是什么负责确保客户机发出的任何后续请求最终都会发送到包含客户机会话信息的服务器 比如说在一个应用程序中,有5台服务器1,2,3,4,5。客户机向应用程序发出请求,请求最终到达服务器4,当请求到达服务器4时,将为客户机创建

假设您在后端使用spring MVC,现在假设一个客户端向服务器发出请求,该请求的会话对象在过期之前在服务器中发出并保存一段特定时间,现在每次该客户端发出一个单独的请求时,服务器都会通过会话对象记住它是哪个客户端

我的问题是,在生产设置中,一个应用程序中可能有数千台这样的服务器,是什么负责确保客户机发出的任何后续请求最终都会发送到包含客户机会话信息的服务器


比如说在一个应用程序中,有5台服务器1,2,3,4,5。客户机向应用程序发出请求,请求最终到达服务器4,当请求到达服务器4时,将为客户机创建一个会话。现在,假设客户端向服务器发出另一个(全新)请求,应用程序如何知道该请求应该路由到服务器4,该客户端的会话信息以前存储在那里

应用程序没有。一般有两种方法:

  • “粘性会话”,实例前面的负载平衡器跟踪会话并每次将它们路由到相同的实例。这是快速和肮脏的,但它的主要缺点是脆弱。例如,如果某个实例崩溃或因升级或缩小规模而关闭,您将失败

  • 将会话信息存储到其他位置。Spring通过Spring会话使这变得非常简单。(我个人更喜欢使用Redis和JSON序列化。)在这种情况下,过滤器会检索每个请求的会话,并在必要时更新存储的版本


或两者的组合,其中请求通过粘性会话路由到内存中或附近缓存中有会话的服务器,直到该服务器过载或停机/崩溃,然后另一个服务器从持久性存储加载整个会话。@ErwinBolwidt确定,您可以进行组合,但是,一旦您已经拥有了“任何服务器都可以为请求提供服务”功能,其他任何功能都只是为了提高性能。