在 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 ...
随机推荐
- NPOI 生成 excel基本设置
//设置页眉页脚 tempSheet.Header.Center = "2017-04-27"; tempSheet.Footer.Center = "√" + ...
- java excel导出
下面是jsp代码: <li class="btns"><input id="btnExport" class="btn btn-pr ...
- Linux 重启和关机命令
shutdown -r 05:30 在凌晨五点30分关机 shutdown -r 05:30 & 后台执行 shutdown -c 取消前一个关机命令 ...
- centos 7 安装MySQL 5.6
本文根据mysql的官方文档操作:https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ 由于Centos7 默认数据库是mariabd(网上 ...
- Spring源码:IOC原理解析(二)
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 接着上一章节的内容,我们来分析当new一个FileSystemXmlApplicationContext对象的时候,spring到底做了那 ...
- User implements HttpSessionBindingListener
public class User implements HttpSessionBindingListener { private int id; private String userName; p ...
- 002.Create a web API with ASP.NET Core MVC and Visual Studio for Windows -- 【在windows上用vs与asp.net core mvc 创建一个 web api 程序】
Create a web API with ASP.NET Core MVC and Visual Studio for Windows 在windows上用vs与asp.net core mvc 创 ...
- java多线程系列(一)
java多线程技能 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我 ...
- 1. MongoDB 安装和启动
1. MongoDB是一个Document Database.A record in MongoDB is a document,MongoDB documents are similar to JS ...
- 1,入门-Hello Soring Boot
什么是SpringBoot Spring Boot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目.大多数SpringBoot项目只需要很少的配置文件. SpringBoo ...