在 WebSphere Application Server V7 集群环境中管理 HTTP session[阅读]
引言
随着电子商务的发展,J2EE 应用越来越广泛。当用户在页面之间跳转的时候大多数 J2EE 应用都需要保持用户的相关会话信息。HTTP session 是实现这一需求的常用方案。IBM Websphere Application Server V7 集群环境中也实现了对 HTTP session 的支持,除此之外,它还提供了 HTTP session 的持久化机制,以实现 HTTP session 的高可用性和高可靠性――这在一些 J2EE 应用中非常关键。
HTTP session 简介
众所周知,HTTP是一个无状态的协议。客户端向服务器发出一个请求,服务器响应这个请求并返回给客户端,如此而已。无论是客户端还是服务器端都不记录请求 / 响应历史信息。随着电子商务的发展,保持请求之前的状态 / 记录成为一个非常常见的需求。HTTP Session 由此应运而生。
一个 HTTP Session 是指同一用户在同一浏览器上对 服务器 发出的一系列请求。HTTP Session 使得运行在 Web container 上的应用能够跟踪记录每个用户的一系列操作。一个典型的 HTTP session 应用场景是提供给在线购物者的“购物车”: 假设服务器旨在记录每个购物者要从 Web 站点购买的商品,服务器 能够将入网请求与特定购物者关联,这是很重要的。否则 , 服务器可能会错误地将客户1的购物选择添加到客户2的购物车里。
服务器通过用户的唯一 session id(会话标识)来区别用户。当一个客户请求过来的时候,服务器会检查这个请求是否带有 session id,如果已包含一个 session id 则说明以前为此客户端已经创建过 session;反之,则为此客户端创建一个 session 并且生成一个与此 session 相关联的 session id,服务器端会保存 session 的所有相关信息而客户端只保存自己的 session id。
Session Affinity
WebSphere Application Server V7 cluster(集群)是多个运行着同样企业应用的 WebSphere Application Server 的集合,这些服务器被逻辑的组合在一起以完成工作负载均衡及高可靠性需求。如图 1 所示 :
图 1. WebSphere Application Server V7 Cluster(集群)
在集群环境中用户的请求会根据你设置的工作负载配置策略动态的分发到不同的应用服务器上。如前文所述,HTTP Session 的信息是存放在服务器端的 , 在集群环境下,某台 WebSphere Application Server 可能只存放了某个 session 的信息,因此如果用户的请求被分发到了没有保存其 session 信息的应用服务器上时,用户的 session 信息就会丢失。对一些如在线交易的系统,session 的信息非常重要,它可能保存了用户前边几页提交的信息,session 信息丢失意味着用户需要重新填写前面几页的信息,这种情况通常对用户是难以接受的。所谓 Session Affinity 是指客户的所有后续请求都会被分发到同一台应用服务器上。通过 Session Affinity,系统的性能会得到提高,因为各个应用服务器不需要重新创建和维护 session 信息,而且这样也避免了前面 session 丢失的情况。Session Affinity 默认在 WebSphere Application Server V7 集群中是启用的。在 WebSphere Application Server V7 集群中,每个 WebSphere Application Server 都有自己的 clone ID,这些 clone ID 被记录在 plugin-cfg.xml 中,如清单 1 所示:
清单 1. Plugin-cfg.xml 片段
<? xml version="1.0" encoding="ISO-8859-1"?> |
通过 Plug-in,Web 服务器可以看到所有的 WebSphere Application Server,并且可以通过请求中的 session id 信息找到正确的 WebSphere Application Server,以实现 Session Affinity。
启用了 Session Affinity,Session 信息就永远不可能丢失吗?答案是否定的:试想如果这台应用服务器发生了宕机,在集群环境下,用户的请求同样需要被分发到其他应用服务器上,那么在这种情况下,如何避免 session 信息丢失呢?这就需要下边介绍的 session 持久化管理。
session 持久化管理方案—数据库以及内存到内存的复制
Session 信息默认保存在某个应用服务器的内存中,因此,当这台应用服务器发生问题时 session 的信息就会丢失。为了解决这个问题,在 WebSphere Application ServerV7 集群环境下,用户可以选择把 session 的信息做持久化管理。这里用户有两个选择:使用数据库或者使用应用服务器之间内存到内存的复制。用户需要登录 Deploy Manager( 中央管理节点 ) 的管理控制台对 cluster 中的每个 WebSphere Application Server 逐一做 session 持久化管理配置。如图 2 所示 :
图 2. 应用服务器 session 持久化管理配置
session 持久化管理方案—数据库
使用数据库做 session 持久化管理意味着所有的 session 信息被集中存放于数据库中:
图 3. Session 信息集中存放于数据库中
选择数据库做 session 持久化管理,用户需要提前创建好数据源(Data Source),点击图 4 中的“数据库”链接,填写好数据源的信息:
图 4. 数据库设置
使用数据库做 session 持久化管理是大多数用户的选择,通常情况下它的性能也要好于内存到内存的复制方案。当然如果你选择了这种方案,意味着你要承担维护数据库的成本:软件、硬件甚至你需要额外的数据库管理员。在这种方案下,数据库的宕机会影响到所有 session 的信息,因此用户还需要承担数据库的高可靠性维护。
session 持久化管理方案—内存到内存的复制
内存到内存的复制意味着所有 session 的信息会存放在各个应用服务器的内存中:
图 5. Session 信息存放于应用服务器内存中
如果选择内存到内存的复制做为你的 session 持久化管理方案,你需要提前配置好 Replication Domain(复制域),默认的,在 WebSphere Application Server V7 中当你创建 cluster( 集群 ) 后系统会自动为你生成一个跟 cluster( 集群 ) 同名的复制域。也可以通过点击“环境’-》”复制域“来修改复制域的设置或者创建新的复制域:
图 6. 修改 / 创建复制域
定义好了复制域,随后就可以对每个 Cluster(集群)成员进行内存到内存的配置:
图 7. 定义内存到内存的复制
图 7 中有三种复制方式可以选择:客户机和服务器,仅客户机,仅服务器。在内存到内存复制方案中,客户机方式意味着本应用服务器仅把自己的 session 信息发送到复制域的其他成员中,但不会接收和保存复制域其他成员的 session 信息。服务器方式意味着不把自己的 session 信息发送给复制域的其他成员,但接收和保存来自复制域其他成员的 session 信息。而客户机和服务器方式意味着在把自己的 session 信息发送给复制域其他成员的同时也接收和保存来自复制域其他成员的 session 信息。
内存到内存的复制对很多应用来说也是不错的选择。这种方案的优势是你不需要额外的数据库的投入,但是如果你的 session 信息很大,而且并发用户很多的话,这种方案会对性能产生一定影响。
session 持久化调优
选择好了使用哪种方式做 session 持久化方案,随之而来的一个问题就是多长时间做一次持久化 / 同步?把所有的 session 信息都同步还是仅同步更新的部分?图 8 可以选择和调整相应的参数:
图 8. Session 持久化调整参数
图 8 中从上到下分别在高性能和高可靠性之间进行取舍:选择“非常高”会带来性能的极大提高,但是其高可靠性程度会相应降低;而“低”会给客户带来极大的高可靠性,但相应的由于同步频率的增大和同步内容的增加,会给集群中成员的性能带来一定负面影响。因此,用户需要根据自己的应用情况,在高性能和高可靠性之间进行权衡,当然,你也可以通过“定制设置”,定制适合自己的参数。
结束语
本文介绍了如何在 WebSphere Application Server V7 集群环境中管理 HTTP session,包括 HTTP session 的简介,Session Affinity,如何做 session 持久化管理,WebSphere Application Server 中支持的两种 session 持久化方案及它们的优缺点。本文最后还简单介绍了如何对 session 持久化管理方案进行调优,以满足用户高性能及高可靠性的需要。
在 WebSphere Application Server V7 集群环境中管理 HTTP session[阅读]的更多相关文章
- 深入探讨在集群环境中使用 EhCache 缓存系统
EhCache 缓存系统简介 EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点,是 Hibernate 中默认的 CacheProvider. 下图是 EhCache 在应用 ...
- Oracle rac集群环境中的特殊问题
备注:本文摘抄于张晓明<大话Oracle RAC:集群 高可用性 备份与恢复> 因为集群环境需要多个计算机协同工作,要达到理想状态,必须要考虑在集群环境下面临的新挑战. 1.并发控制 在集 ...
- (转)深入探讨在集群环境中使用 EhCache 缓存系统
简介: EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点,是 Hibernate 中默认的 CacheProvider.本文充分的介绍了 EhCache 缓存系统对集群环境的 ...
- 在集群环境中使用 EhCache 缓存系统|RMI 集群模式
RMI 是 Java 的一种远程方法调用技术,是一种点对点的基于 Java 对象的通讯方式.EhCache 从 1.2 版本开始就支持 RMI 方式的缓存集群.在集群环境中 EhCache 所有缓存对 ...
- nginx+php负载均衡集群环境中的session共享方案梳理
在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...
- Nginx+PHP负载均衡集群环境中Session共享方案 - 运维笔记
在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...
- EhCache 在集群环境中使用缓存系统
EhCache 分布式缓存/缓存集群 EhCache提供了很多种解决方案 这里只介绍一种最常用而且简单的RMI方式分布式缓存决绝方案 Automatic Peer Discovery 自动成员发现方 ...
- (转)在 WebSphere Application Server 中修改主机名称并迁移概要文件
原文:https://www.ibm.com/developerworks/cn/websphere/techjournal/0905_webcon/0905_webcon.html 修改主机名 让我 ...
- 将 Spring 和 Hibernate 与 WebSphere Application Server 一起使用
本文摘要 如果您考虑将 Spring 或 Hibernate 与 IBM® WebSphere® Application Server 一起使用,则本文向您阐述了如何配置这些框架,以适用于 WebSp ...
随机推荐
- 计算机浏览器存储技术cookie、sessionStorage、localStorage
HTTP无状态协议是指协议对于事务处理没有记忆能力.会话跟踪协议的状态是指下一次传输可以"记住"这次传输信息的能力,无状态是指同一个会话(注意什么叫同一个会话)的连续两个请求互相不 ...
- 代码规范--捡拾(SQL语句)
最近在看阿里的JAVA开发手册,话不多说进入正题. 1.[强制]不使用count(列名)或者是count(常量)代替count(*) 因为count(*)会统计NULL值,前面的两个不会 2.[强制] ...
- (转载)Java内部类的使用小结
原文摘自:http://android.blog.51cto.com/268543/384844/ 内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态stati ...
- Mac之OS系统下搭建JavaEE环境 <四> 之IntelliJ IDEA 的内存优化
1.代开IntelliJ IDEA 的显示内容 2. 打开idea.vmoptions文件 路径为Contens——bin——idea.vmoptions 修改之前会复制一份备份原配置 原配置 修改后 ...
- discuz 6.1.0F前台getshell(据说通用6.x , 7.x)
EXP: 执行phpinfo()语句: GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replac ...
- 自定义程序异常Exception
/** * 用于循环时的异常定位抛出异常 * 如第i行记录,抛出异常 * @author zhengwei * */ public class MyExcetion extends RuntimeEx ...
- C语言学习随笔
前段时间我们学习了HTML,感觉自己不在状态,后来就开始怀疑自己的智商呢!现在C语言也到了尾声,在这20天的学习过程中,我没 有以前那么的傲娇了. 我开始慢慢去反省自己,自己究竟该如何去学习,都说勤能 ...
- CJOJ 2307 【一本通】完全背包(动态规划)
CJOJ 2307 [一本通]完全背包(动态规划) Description 设有n种物品,每种物品有一个重量及一个价值.但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干 ...
- 在ubuntu下使用minicom连接交换机/路由器Console口
首先下载并安装minicom sudo apt-get install minicom 然后将Console线一端连上交换机的Console口,另一端连上电脑(我这里是通过USB口连接的) 然后查看对 ...
- 【NOIP模拟】board(线段树维护二进制,树序号化为二进制)
题目背景 SOURCE:NOIP2016-RZZ-2 T3 题目描述 给出这样一棵“二叉树”: 每个节点有左右两个儿子,并如下定义每个节点的高度:假设父亲节点的高度为 h ,那么他的两个儿子的节点的高 ...