设为首页 收藏本站
查看: 1680|回复: 0

[经验分享] 在Weblogic上实现HTTP Session Replication

[复制链接]
累计签到:77 天
连续签到:1 天
发表于 2015-1-30 13:26:15 | 显示全部楼层 |阅读模式
大家都熟悉HTTPSession是基于无状态HTTP协议的web应用实现状态的主要方法之一. 利用HTTPSession我们就可以把用户的多个请求关联起来, 来实现诸如购物车等应用.
而在集群环境下,默认情况下每个用户的HTTP Session只会在其首次访问的服务器实例上创建. 如果下次用户的请求被分发到另外的服务器上则是无法获得先前创建的Session. 所以这种情况下我们可以使用HTTPSession Replication在整个集群内共享HTTP Session, 同时也实现高可用性和冗错等特性.

在Weblogic中,HttpSession Replication的方式是通过在weblogic.xml中的session-descriptor的定义persistent-store-type来实现的. persistent-store-type可选的属性包括memory, replicated, replicated_if_clustered, file, jdbc, cookie, async-replicated, async-replicated-if-clustered, async-jdbc, coherence-web.
例如:



  • <weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic ... eblogic-web-app.xsd">  
  •   <session-descriptor>  
  •     <persistent-store-type>replicated</persistent-store-type>  
  •     <timeout-secs>60</timeout-secs>  
  •   </session-descriptor>  
  • </weblogic-web-app>  



其中persistent-store-type默认为memory, 即不支持replication.

一旦我们的Web应用是部署在集群环境中需要Session Replication时必须选择其他方式, 注意其中file, jdbc,async-jdbc, coherence-web是需要对应的文件,数据库,Coherence等资源必须在Cluster中访问才可能支持replication,所以需要进一步去配置这些资源属性. 而replicated, replicated_if_clustered,async-replicated, async-replicated-if-clustered相当memory模式的cluster版本,没有额外的配置工作,自动在集群内实现Http Session内存主从复制. HTTP Session会自动从用户第一次访问的Weblogic服务器实例复制到另外一个服务器实例的内存中,并保持同步.

但内存复制方式虽然配置简单但也有几个地方需要注意! !

  • Load Blanace和Session Affinity问题.
             由于这里的机制是主从备份, 所以集群中只有两个实例会有同一HTTP Session的数据. 当集群里的实例多于2个以上时,为了确保后续的HTTP请求能访问到Session数据, 必须要求前置分发请求的load balancer支持session affinity(sticky session/seamless session). Session Affinity就是能够把特定Session的所有请求都路由到第一次创建Session的同一物理机器上;否则后续的请求就有可能不能够访问Session数据了.
            如果设置成非Replication方式即memory模式, 生成的JSESSIONID类似:1VBHTlYR0VVjb0L7MMTlZPVXLpQHDCCT17L9yw1qP0T1465w9JXG!1694365319
          一旦配置成Replicated模式,Weblogic会生成如下格式的SessionID: sessionid!primary_server_id!secondary_server_id(每个应用服务服务器产生的格式不一定一样, 例如Tomcat使用.分割)
         例子: 1bQmTlbQcxfZCTd8pJVvCnJlL23p3JMvGnmFnTJxV3PKBx7nKvwr!1694365319!-1897025151
          其中1694365319和-1897025151分别是集群两台主机的server_id.
         这时前置的Loader Balancer需要能从Cookie或URL Rewriting中读取和解析这个SessionID, 利用其中server_id和实际的机器地址做映射,实现将某Session的后续请求都发到之前创建HTTP Session的服务器实例上或者备份的实例上. 这里具体的配置就要参考实际相关Loader Balancer的手册了. 现在一般常见的Load Balancer硬件都支持这个功能. 如果是测试, 我们也可以使用软Load Balancer. 例如Apache的MOD_PROXY, 还可以直接使用Weblogic的Proxy Plugin也可以完成同样的功能.
        

          此外如果我们想要控制Session具体复制到集群中指定的某台服务器实例时, 例如考虑到异地冗灾. 我们可以通过配置Replication Groups把不同地方的机器分成不同的组, 这样Weblogic会首先尝试把Session复制到其他组的机器中.

  • 内存占用.
             内存复制还有一个常见问题就是内存占用,我们必须控制好http session的大小和生存时间. 否则在高负载下, 即使是最简单的Session对象也会很快把内存消耗掉.
  • 性能问题.
             下面是几种模式的性能比较.

测试客户端: Jmeter

线程数: 5
操作系统: Red Hat Enterprise Linux Server release 5.1 (Tikanga)
Welgoic: 10.3.3.0

CPU:  Intel(R) Xeon(TM) CPU 3.00GHz


persistent-store-typeTPSCPU
没有session900030%
memory700030%
replicated210035%
async-replicated470030%
cookie760030%
file1808%

可以看到即使使用异步模式,Session Replicaiton和其它模式(除了文件)相比性能还是有很大差距.

如果跟踪可以看到部分CPU都用在了服务器之间复制Session上.
0_1323852647wCpG.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-41761-1-1.html 上篇帖子: weblogic集群环境,如何复制、同步服务包 下篇帖子: weblogic中间件集群分享(一)之互联网一般架构图
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表