Java分布式session存储解决方案图解

 更新时间:2020年07月14日 09:22:00   作者:MrAit  
这篇文章主要介绍了Java分布式session存储解决方案图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

前言

本文主要探讨集群后不同Web服务器获取Session数据的问题解决方案。

Session Stick

Session Stick 方案即将客户端的每次请求都转发至同一台服务器,这就需要负载均衡器能够根据每次请求的会话标识(SessionId)来进行请求转发,如下图所示。

这种方案实现比较简单,对于Web服务器来说和单机的情况一样。但是可能会带来如下问题:

如果有一台服务器宕机或者重启,那么这台机器上的会话数据会全部丢失。

会话标识是应用层信息,那么负载均衡要将同一个会话的请求都保存到同一个Web服务器上的话,就需要进行应用层(第7层)的解析,这个开销比第4层大。

负载均衡器将变成一个有状态的节点,要将会话保存到具体Web服务器的映射。和无状态节点相比,内存消耗更大,容灾方面也会更麻烦。

Session Replication

Session Replication 的方案则不对负载均衡器做更改,而是在Web服务器之间增加了会话数据同步的功能,各个服务器之间通过同步保证不同Web服务器之间的Session数据的一致性,如下图所示。

Session Replication 方案对负载均衡器不再有要求,但是同样会带来以下问题:

同步Session数据会造成额外的网络带宽的开销,只要Session数据有变化,就需要将新产生的Session数据同步到其他服务器上,服务器数量越多,同步带来的网络带宽开销也就越大。

每台Web服务器都需要保存全部的Session数据,如果整个集群的Session数量太多的话,则对于每台机器用于保存Session数据的占用会很严重。

Session 数据集中存储

Session 数据集中存储方案则是将集群中的所有Session集中存储起来,Web服务器本身则并不存储Session数据,不同的Web服务器从同样的地方来获取Session,如下图所示。

相对于Session Replication方案,此方案的Session数据将不保存在本机,并且Web服务器之间也没有了Session数据的复制,但是该方案存在的问题在于:

读写Session数据引入了网络操作,这相对于本机的数据读取来说,问题就在于存在时延和不稳定性,但是通信发生在内网,则问题不大。

如果集中存储Session的机器或集群出现问题,则会影响应用。

Cookie Based

Cookie Based 方案是将Session数据放在Cookie里,访问Web服务器的时候,再由Web服务器生成对应的Session数据,如下图所示。

但是Cookie Based 方案依然存在不足:

Cookie长度的限制。这会导致Session长度的限制。

安全性。Seesion数据本来是服务端数据,却被保存在了客户端,即使可以加密,但是依然存在不安全性。

带宽消耗。这里不是指内部Web服务器之间的宽带消耗,而是数据中心的整体外部带宽的消耗。

性能影响。每次HTTP请求和响应都带有Seesion数据,对Web服务器来说,在同样的处理情况下,响应的结果输出越少,支持的并发就会越高。

总结

前面四个方案都是可行的,但是对于大型网站来说,Session Sticky和Session数据集中存储是比较好的方案。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java枚举类使用场景及实例解析

    Java枚举类使用场景及实例解析

    这篇文章主要介绍了Java枚举类使用场景及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java由浅入深细数数组的操作上

    Java由浅入深细数数组的操作上

    数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素
    2022-04-04
  • SpringMVC 传日期参数到后台的实例讲解

    SpringMVC 传日期参数到后台的实例讲解

    下面小编就为大家分享一篇SpringMVC 传日期参数到后台的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Java中的包装类是什么

    Java中的包装类是什么

    这篇文章主要介绍了Java中的包装类是什么,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • java正则匹配HTML中a标签里的中文字符示例

    java正则匹配HTML中a标签里的中文字符示例

    这篇文章主要介绍了java正则匹配HTML中a标签里的中文字符,涉及java中文正则及HTML元素操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • Java实例讲解注解的应用

    Java实例讲解注解的应用

    JAVA注解 Annotation(注解)是JDK1.5及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以‘@注解名’在代码中存在的
    2022-06-06
  • Java中的Cookie和Session详细解析

    Java中的Cookie和Session详细解析

    这篇文章主要介绍了Java中的Cookie和Session详细解析,客户端会话技术,服务端给客户端的数据,存储于客户端(浏览器),由于是保存在客户端上的,所以存在安全问题,需要的朋友可以参考下
    2024-01-01
  • Log4j不同模块输出到不同的文件中

    Log4j不同模块输出到不同的文件中

    这篇文章主要介绍了Log4j不同模块输出到不同的文件中 的相关资料,需要的朋友可以参考下
    2016-08-08
  • Java数据机构中关于并查集的详解

    Java数据机构中关于并查集的详解

    并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题,如果你还不了解并查集,请看接下来的文章,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值
    2021-09-09
  • SpringMVC实现多文件上传

    SpringMVC实现多文件上传

    这篇文章主要为大家详细介绍了SpringMVC实现多文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11

最新评论