集群中部署的web应用系统往往会强调无状态
性,之所以这么要求,一方面是当然是为了便于集群扩展,但是对于有session要求的系统来说,无状态确实没法做到,既然没法做到,那么对于集群部署的应用来说,就要考虑到状态的保存和同步问题,因此衍生了 session状态复制 以及 striky session 两种技术,第一种是通过服务器集群中相互复制session状态来保障同步,优点是简单,缺点也明显工作量大,性能低下(大于5台),第二种方式呢,就是把同一个用户的session绑定在一个服务器上,避免了复制session,貌似解决了问题,不过问题又来了,如果这台服务器挂了呢?那就杯具了,这台服务器上的所有session都没了。 再于是.......
其实,无论方案是怎么样的,
都要最终解决一个问题,就是集群内的服务器如何访问session中信息,也就是session信息应该放在哪里,服务器应该怎么去拿这个session信息?前面的方案中,复制session采用的保证每台服务器都有一个副本,但开销太大,性能低,还不能保证同步;striky session 比较极端了,不允许复制,只一台服务器享受,一个用户从始至终都访问这台机器,但是无法保证fail over。那有其他办法来保存session么?当然有,于是所谓的SNA架构类的session方案就横空出世了,我们先不管SNA如何如何,看下它如何解决session的存储:
方案一: 服务端存储方案-> session 不在任何一台实际的应用服务器中存储,将其存储到独立的文件系统中去、或者数据库、或者cache中,每次session重建时根据sessionId去存储介质中拿到数据重组session
优点:各个应用服务器不需要自己存储session,扩展当然更方便了
缺点:需要另外搭建session存储系统,系统结构复杂了,
方案二: 客户端存储方案->session 采用cookie的方式写入到客户端,每次客户端访问时将cookie提交给应用服务器,应用服务器重组session。
优点: 不需要另外搭建存储系统,实现方式快捷。
缺点: 安全性不够高,cookie容易被破解,当然对cookie进行加密以及加上时间戳有效期这个问题可以缓解,对于安全性要求不是绝对高的应用来说,完全OK了。另一个缺点就是每次都要提交大量cookie,网络流量消耗比较大。
好了,这里提供一个关于客户端存储方案的实现例子,不是很完善,不过稍加修饰就完全可以做为产品过程中使用:好,翠花,上酸菜
从以上架构实现上看,其实非常简单,首先实现SnaHttpServletRequest,目的是返回自定义session,重写getSession等方法即可,接着重写SnaHttpServletResponse,这里主要是为了在getWriter或者getOutputStream时将session中的修改正式提交修改,之所以要重写这里,是因为我们无法控制应用框架合适会对response进行commit,大家看一下servletResponse接口就知道,response不能重复commit, 所以重写后在他们提交前我们先把session修改提交,这一步很重要,特别是对于客户端方案来说。接着要重新实现session接口,这里负责session的重建工作,SnaSessionStoreProvider 主要是负责存储,聪明的看客应该知道,如果要实现服务端方案,重写这个接口就行了。 另外基于客户端的方案中,提供了一个配置文件session.xml,目的何在?session中的attribute可能来自很多cookie,
这里进行配置,我们就限定了只有这些cookie中的属性才能读出或者写回到客户端,因此这里其实也起到一个简单管理cookie的作用,防止别人乱写cookie,除非在这里配置,否则不会生效。
接下来,贴点关键代码:
SnaSessionFilter.java
SnaHttpServletRequest.java
SnaHttpServletResponse.java
源代码下载地址:
http://download.csdn.net/source/2693887
===================================================================================
注: 网络很多cookie实现session的方案基本都是针对特定的框架,例如struts,这里的方案不限定web应用框架。
分享到:
相关推荐
sna session实现方案实例,稍微修改下即可用于产品
sna集中式session管理实现服务器集群及客户端程序,以“单点登陆、session共享解决方案(2)”为基础建立的服务器机群应用,运行server.bat启动服务器端,将client包导入web工程,通过Client.sessionPut()等方法调用。...
### IBM Systems Network Architecture (SNA) 知识点解析 #### 一、SNA概述 IBM Systems Network Architecture(简称SNA)是IBM于1970年代开发的一种网络架构技术,它在当时的企业级计算环境中占据主导地位。SNA的...
### Sensor Network Analyzer (SNA) 知识点详解 #### 一、产品概述 Daintree Networks 的 Sensor Network Analyzer(SNA)是一款专为 ZigBee 和 IEEE 802.15.4 标准设计的专业级网络分析工具。该工具通过提供直观的...
《SNA核算体系的理论基础透析》这篇文章探讨的核心议题是SNA(System of National Accounts,国民账户体系)核算体系的理论基础,特别是在中国引入这一体系后,对马克思主义政治经济学及其劳动价值论的影响。...
"SNA PD 確認程序" 是针对IBM System Network Architecture(SNA)状态查询的一种工具或过程,旨在帮助用户监控和理解SNA网络中的系统状态。SNA是IBM开发的一种网络通信协议,广泛用于大型机环境,提供了一种在不同...
在IT行业中,SNA(System Network Architecture,系统网络架构)是一种由IBM公司开发的网络通信模型,主要用于大型企业或组织的内部网络通信。SNA提供了多种服务,包括数据传输、网络控制以及资源管理等,使得不同...
- **Session Control (SCON):** SCON是SNA网络中的会话控制机制,负责管理两个LU之间的会话建立和终止过程。 - **Control Program (CP):** CP是SNA网络的核心组件之一,负责管理和控制整个网络中的资源分配和通信...
SNA(System Network Architecture)则是IBM开发的一种网络通信协议,用于构建大型企业级的网络环境。当CAS-Center与SNA相结合时,可以为大型企业或组织提供强大的单点登录(Single Sign-On,SSO)解决方案。 单点...
在网络游戏领域,SNA(System Network Architecture,系统网络架构)是一种传统的网络通信协议集,主要用于IBM大型机系统。然而,随着技术的发展,SNA的概念也被借鉴到其他领域,包括网络游戏中的数据传输。本文将...
资源分类:Python库 所属语言:Python 资源全名:sna_prediction-1.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
SNA(System Network Architecture)是由IBM开发的一种网络通信协议,它主要用于大型机环境。然而,在现代网络环境中,SNA可能与TCP/IP等更通用的协议并存,尤其是在需要与遗留系统交互时。 SNA协议在通信过程中,...
SNA(System Network Architecture,系统网络架构)是IBM推出的一种网络通信协议,用于大型机和小型机之间的通信。在SNA通信中,正确地识别和处理MAC(Media Access Control)地址至关重要,因为它是网络设备物理...
c7200-adventerprisek9_sna-mz.150-1.M.bin
【SNA新闻采集系统v1.0.2 For 动易4.03】是一款专为动易4.03版本设计的新闻自动化采集工具,旨在帮助用户高效、快速地从互联网上抓取并整合新闻资源。这款系统的核心功能包括新闻源识别、内容筛选、自动发布等多个...
国民账户体系(System of National Accounts,简称SNA)是全球经济统计的核心框架,它提供了一套统一的方法来衡量一个国家或经济体的经济活动。这一体系对于政策制定者、经济学家以及研究者来说至关重要,因为它提供...
《PyPI官网下载:探索sna-0.0.9.tar.gz中的Python库知识》 在Python的世界里,PyPI(Python Package Index)是开发者分享和获取Python软件包的重要平台。资源`sna-0.0.9.tar.gz`正是这样一个在PyPI上发布的软件包,...
sna lecture notes , erdos reyni