集群环境下的Session处理

作者&投稿:台发 (若有异议请与网页底部的电邮联系)
~ 在单台服务器情况下session处理比较简单,一旦到了集群环境中,我们就必须考虑用户和会话的问题,如果不加处理的话,一旦后端IP轮询切换,会话cookies找不到session,会话就中断了。在此情景下,通常有以下5种解决方案。

将每一个用户和后端服务器绑定,这样用户的会话就会一直落在同一台服务器上,这是成本最小的解决方案,只需要修改Nginx服务器的配置即可。如果是在比较老的架构上,推荐这种改造方案。

这种解决解决方案也存在局限性,比如某台服务器挂了切换到另一台服务器,对应的会话也就丢了。还有另外一个问题,如果前端用了CDN的话,客户端IP变化的频率可能是很高的,有可能一个小时或更短时间内就变一次,这在校园网的网络环境下很容易产生这种情况。

顾名思义,Session复制就是让集群里的每台服务器都存储整个集群所有服务器上的全部session。这样一旦某台服务器挂了,用户切换到其他服务器上也能访问到一样的session数据。这种解决方案不好的地方在于进行session复制需要额外的网络开销和系统资源,当服务器较多或session中存储的数据量大的时候,这个问题尤为明显。

Session复制本身的操作是比较复杂,但是对于服务器来说,配置比较简单,但性能是个很大的问题。当集群中服务器数量大于两台时就比较吃力了,总之这是一种比较早期时候的解决方案。

sticky方案和方案1类似,但是sticky能把会话死死地粘滞在其中一台服务器上,算是对方案1的补充,可以避免在CDN网络波动下的IP冲突造成的会话丢失。但是依然无法解决服务器挂掉导致会话丢失的问题。

基于Redis等NoSQL的session集中存储方案,是目前最流行的解决方案,早期用MySQL来存储。引入Redis的方案除了会增加系统复杂度外,依然还有以下几个问题:

使用纯cookie,不使用session,天然分布式。存在问题:

需要注意的是,如果应用需要做“禁止同时登录”的需求时,用Cookie的话解决起来会麻烦很多。

另外可以把cookie换成token等方式验证用户,每次请求带上token作为会话凭据。


如何提高hibernate性能
如果在JTA环境中使用缓存,你必须指定Hibernate.transaction.manager_lookup_class 属性的值, 通过它,Hibernate才能知道该应用程序中JTA的TransactionManager 的具体策略。 在其它环境中,你必须保证在Session.close() 、或Session.disconnect() 调用前, 整个事务已经结束。 如果你想在集群环境中使用此策略,你必须保证底层的...

野百合也有春天的含义是什么?
1. 野百合是自然界中常见的植物,它们在艰苦的环境中生长,有时甚至缺乏阳光的照耀,但它们凭借自身的坚韧和乐观,战胜了这些不利条件,迎来了属于自己的春天,绽放出美丽的花朵,与温室中的百合相媲美,甚至有时超过它们。2. 野百合的寓意是:即使是平凡而弱小的存在,如野百合,也会有机会展现自己的...

野百合什么意思啊?
字面意思是:野百合是自然界最普遍存在的植物,她生长的环境极其恶劣,最有甚者连阳光都吝啬的不愿出现,但野百合以其自己的顽强和乐观战胜了自然条件,迎来了自己的春天,开出了美丽鲜艳的花朵。能够与温室的百合花媲美,甚至比她更美。一般这里只强调寓意:即使平凡弱小如野百合,也会拥有属于它的春天...

滨湖区15982925173: 集群环境下session的同步方式有哪些 -
禹琪高喜: 一,利用数据库同步session 在做多服务器session同步时我没有用这种方法,如果非要用这种方法的话,我想过二种方法:1,用一个低端电脑建个数据库专门存放web服务器的session,或者,把这个专门的数据库建在文件服务器上,用户访问...

滨湖区15982925173: 如何实现集群化/Session复制 -
禹琪高喜: 建立集群就可以自动实现session复制了,不需要配置weblogic.xml . session 复制带了问题相当麻烦和无理. 这也是不开源的烦恼. 我们在移动是用第三方NOSQL存储实现了session,所以我们配置的大规模服务不需要weblogic 集群

滨湖区15982925173: java开发中nginx和tomcat做集群的时候,session如何共享?求最佳方案 -
禹琪高喜: 在nginx的upstream中添加 ip_hash即可 例如:upstream XXXX { ip_hash; server 192.168.8.8:8080; server 192.168.8.9:8080; }

滨湖区15982925173: 分布式集群的session管理有哪些实现模式 -
禹琪高喜: 无非就是存放的地方不一样呗,是数据库中还是在缓存中,都可以采用集群和集中的方式,但是集群的方式很难保证数据一致性,特别是对于session这种修改频率很高的应用,一不小心就弄成tomcat复制session的广播效应了

滨湖区15982925173: web集群怎么共享同步sessionWindows服务器操作系统 -
禹琪高喜: 首先向memcached中添加“tokyo”.将“tokyo”传给客户端程序库后,客户端实现的算法就会根据“键”来决定保存数据的memcached服务器.服务器选定后,即命令它保存“tokyo”及其值.图2 分布式简介:添加时 同样,“kanagawa”...

滨湖区15982925173: tomcat集群做session复制需要配置什么? -
禹琪高喜: worker.controller.sticky_session=true worker.controller.sticky_session_force=true

滨湖区15982925173: centos7+nginx+php+mysql怎样实现session会话 -
禹琪高喜: 构建Tomcat集群实现session共享之前首先得有一个集群环境,就像谈恋爱之前要先有个女朋友是一个道理,我们在/usr目录下创建一个/tomcat_cluster目录,并在这个目录中集群3个Tomcat,很简单就像这样:这里写图片描述然后我们一次修...

滨湖区15982925173: 请教关于 Apache+Tomcat群集Session共享问题 -
禹琪高喜: 你的集群是通过nginx实现的吗?tomcat+nginx集群的话,比较容易实现session会话保持,在nginx的 upstream 配置中添加 IP_HASH就可以实现,不需要再去做session复制和共享.

滨湖区15982925173: 解决session共享有哪些方案 -
禹琪高喜: 展开全部1. 通过组播的方式进行集群间的共享,比如tomcat目前就具备这样的功能,优点是web容器自身支持,配置简单,适合小型网站.缺点是当一台机器的上的session变更后会将变更的数据以组播的形式分发给集群间的所有节点,对网络...

滨湖区15982925173: weblogic集群 如何配置session的复制? -
禹琪高喜: 具体步骤为:1、每个实例都有两份Session数据,主数据和备份数据.2、当请求的sessionId的primary_server_id为当前实例时,从主数据里获取session响应请求,否则进行3).3、当请求的sessionId的secondary_server_id为当前实例时,从备份数据里取session响应请求,并修正该session的primary_server_id/secondary_server_id为自已及其的备点.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网