会话保持解决方案及NetScaler会话保持概述

一、为什么需要会话保持

如果我们将后端的Web服务器分为两组,一组是静态内容服务器,一组是动态内容服务器,那么我们再进行反向代理的时候,反向代理服务器通过判断资源文件的后缀名,决定将其调度至后端的那一组服务上。如果我们的后端服务器静态内容和动态内容都分别有多台,那么反向代理服务器还需要对其进行负载均衡,然后觉得资源调度到那一台服务器。那么对于静态内容的服务器,因为静态内容是不会处理会话的,所以在进行负载均衡时我们不用考虑其会话保持。做最简单的和最直接的轮询就好了,如果服务器的性能不一样的话,就做加权轮询即可。当然如果说后端静态服务器的资源大小区别也非常大,那么轮询的方式对负载均衡的方式来讲,效果不是特别明显,那可能需要使用最少连接数的负载均衡方式来处理这类资源情况,最少连接是可以考虑当前连接的服务器的负载情况,能保证结果公平。这是对于静态内容的服务器来说,那么对于动态内容的服务器,因为动态内容涉及到处理会话,我们就需要考虑负载均衡间服务器的会话保持了。会话保持是指在负载均衡器上有一种机制,在作负载均衡的同时,还保证同一用户相关连的访问请求会被分配到同一台服务器上。

举例来说,网络银行的服务门户网站。用户通过输入用户名和密码登录到应用系统中,一旦登录成功,用户可以做很多业务操作。例如检查帐户余额,在线转帐等。

如果没有配置会话保持,那么可能出现这样的情况:用户登录的时候,系统选择了Server1进行认证,通过认证以后,用户接下来进行业务操作时(比如转帐),此时系统又选择了Server2或Server3对用户进行服务,这时问题就出现了,因为Server2或Server3上没有用户交易状态的信息,所以Server2或Server3会认为用户没有通过认证,从而拒绝该用户的操作请求。

如果配置了会话保持,那么用户登录以后后续的所有操作都会直接发送到在认证时选择的那台服务上。

二、会话保持的方法:

1、会话绑定:会话绑定是指使用一个算法或者是使用持久连接,将来自于同一个IP的请求始终定向至后端的同一个后端服务器。这种方法简单易用,但有如下问题:

当后端服务器宕机后,会话就会丢失;

来自同一IP的客户端会被转发到同一个后端服务器,可能导致负载失衡;

不适用于前段还有代理的情况。

2、会话复制:也叫会话集群,通过后端服务器自身的组件构建成类似会话高可用的集群,集群内部的动态服务器之间通过多播方式进行通信,在这些集群服务器中,每一台服务器都会将自己创建的会话通过多播的方式同步给集群的其他服务器。所以每一个服务器都维持着当前集群内的所有会话,因此用户的请求可以被调度至任意服务器上。因为我们的会话都是在集群服务器之间被同步的,不管用户连接那一台服务器,他的会话都是存在的。但是这样一种解决方法的问题在于:

由于服务器于服务器之间要进行会话复制,所以后端服务器之间的带宽被大量占用;

每台服务器都要维持整个集群中的所有会话,对服务器本身的资源占用和消耗非常大,使得服务器本身的并发承载能力有限。

但是好处在于我们的负载均衡调度可以任何进行,而且任何一个服务器故障都不会导致我们的会话丢失。

3、会话服务器:因为会话复制的弊端,我们可以找一台高性能的服务器,存储流式的数据,比如MemCached,这个是著名的用于会话缓存服务器,MemCache可以把web服务器中的内存组合起来,成为一个"内存池",不管是哪个服务器产生的会话都可以放到这个"内存池"中,其他的服务器都可以使用。还有Redis(Key-value,kv store),键值服务器,键值存储,对于种存储来讲,他们可以帮我们在前端把我们的会话保存下来。但是这种方式也有弊端:

服务器有可能会成为性能瓶颈;

他们是单点故障之一,因此我们部署这种类似的服务器,还得做扩展和冗余。

4、其他会话保持技术

至于其他的用数据库做会话保持以及利用客户端的Cookie做会话保持的技术,直接就不用推荐,为什么?数据库本来就是瓶颈的地方,还用来进行会话保持,这不是加大数据库的负担吗?

利用客户端的Cookie做会话保持,需要客户端把Cookie开启,如果把Cookie禁掉了,也就玩不转了。而且利用客户端的Cookie,容易被攻击,毕竟Cookie安全性太低了,太容易被伪造。

三、NetScaler的会话保持

NetScaler支持多种会话保存技术类型。为了获得最佳的服务器,网络和NetScaler的运行效率,根据不同的部署场景(负载均衡、防火墙负载均衡等等)和流量类型选择合适的会话保持类型是非常重要的。一些会话保存类型(例如Source IP)需要占用NetScaler内存来存储会话保持的相关信息,而另一些会话保持类型(例如Cookie,URLPassive和Custom Server ID)则不需要占用NetScaler的内存,所有相关的持续性信息都来源于客户请求。

下表是常用的会话保持类型和支持的协议

下面简要描述下会话保持类型:

  • 源IP:在该方法中,从相同的源IP连接被保存到相同的服务器。
  • Cookie insert:在该方法中,每个客户端被赋予包含该IP地址和客户端访问的服务的端口的cookie。客户端使用cookie来维持相同的服务的持久连接。
  • SSL session:该方法的利用在客户端的SSL会话标识持久性。
  • Rule:该方法是基于定制的规则。
  • URL passive:这种方法基于被动持续URL查询。
  • Custom server ID:在该方法中,服务器给出一个定制服务器ID号,它可以在URL查询中使用。
  • Destination IP:在这种方法中,连接到同一目的地的网络连接到同一个服务器。
  • 源和目的IP地址:在这种方法中,从相同的源IP连接到相同的IP的会话保持。
  • RTSP session ID:这种方法基于对RTSP会话ID的会话保持。
  • SIP call ID:在这种方法是基于相同的SIP呼叫ID的会话保持。

在上表中,标记为“是”的部分,是该协议推荐的会话保存性类型和使用推荐的类型,可以使NetScaler获得最佳的CPU和内存使用率。举例来说,Cookie类型的会话保持非常适合HTTP&HTTPS协议,因为NetScaler不用浪费内存区存储会话保持的细节内容。所有会话保持的细节都被NetScaler编码以后存储在Cookie中了。再比如IP/TCP/UDP传输,Source IP会话保持则是最佳选择,它会使用一部分NetScaler内存来存储会话保持的信息。

时间: 2024-12-11 21:20:24

会话保持解决方案及NetScaler会话保持概述的相关文章

会话保持:粘滞会话

会话保持是负载均衡中最常见的问题之一,也是一个相对于比较复杂的问题.会话保持有时候又被叫做粘滞会话(Sticky Sessions).会话保持是指在负载均衡器上的一种机制,可以识别客户端与服务器之间交互过程的关联性,在做负载均衡的同时还保证一系列相关联的访问请求会保持分配到一台服务器上. 会话保持的使用场景 在讨论这个话题之前,必须要先花一点时间弄清楚一些概念:什么是连接(Connection).什么是会话(Session),以及这两者之间的区别.需要特别强调的是,如果我们仅仅是讨论负载均衡,会

(转)[Android实例] 关于使用ContentObserver监听不到删除短信会话的解决方案

最近做通讯录的项目,需要实时监听短信的删除,就用到了观察者ContentObserver,怪异的事情就此发生,当我删除一条短信的时候,可以监听到,但是,当我删除整条短信的时候,就无法监听到,查了很多资料,都没有一个好的解决方案,顺便吐糟一下:大家来eoe发问题,问题解决了,也不说把解决的方法给大家分享一下... OK,先看源码吧com.android.providers.telephony.MmsSmsProvider这个类的删除操作源码 @Override    public int dele

解决Discuz!X2.5_X3.0_X3.1QQ临时会话提示“无法发起临时会话”解决方法

Discuz!X是非常强大的论坛程序,但总有一些小小的bug,在Discuz!X最新版本中此bug还是存在的.原因很简单:由于腾讯QQ交谈代码改动,致使原交谈代码无法使用. 问题描述: QQ交谈无法打开 对比代码发现,出错的原因是:代码里的是大写,而能正常发起会话的首写字母都是小写. 原代码: http://wpa.qq.com/msgrd?V=3&Uin=771631095&Site=Discuz! 官方站&Menu=yes&from=discuz 不难发现中间的&quo

Citrix NetScaler 全局负载均衡解决方案

Citrix NetScaler 全局负载均衡解决方案 思杰(Citrix)系统亚太有限公司 2008年5月 目 录 第1章 项目概述... 3 第2章 思杰系统(Citrix)公司简介... 4 2.1. 关于思杰系统(Citrix)公司... 4 2.2. 产品与服务... 6 2.3. 思杰 NetScaler产品... 7 2.4. 成功案例... 9 第3章 全局负载均衡技术方案... 13 3.1. 设计原则... 13 3.2. 详细技术设计... 13 3.3. 动态域名解析工作

Nginx+Tomcat+memcached高可用会话保持

一.概述 之前文章已经描述了企业高可用负载相关的架构及实现,其中常用的nginx或haproxy,LVS结合keepalived做前端高可用调度器;但之前没有提到会话高可用保持;本文通过 Tomcat Session Replication Cluster(tomcat自带)和tomcat结合memcat及第三方组件实现Tomcat Memcache Session Server高可用会话缓存服务;实现的效果:同一客户端访问业务网站,经过调度器负载调度到达后端,不管选择的是那个后端,sessio

会话技术——Cookies和Session详解

会话技术 (一) 概述.用途以及分类 (1) 基本概述 概述:会话是浏览器和服务器之间的多次请求和响应 也就是说,从浏览器访问服务器开始,到访问服务器结束,浏览器关闭为止的这段时间内容产生的多次请求和响应,合起来叫做浏览器和服务器之间的一次会话 (2) 为什么要使用会话技术呢? 实际上会话问题解决的还是客户端与服务器之间的通信问题,通过一些会话技术,可以将每个用户的数据以例如cookie/session的形式存储,方便以后用户访问web资源的时候使用 假定场景:A和B两人在某个网上购物商场登陆账

JAVAWEB开发之JSP、EL、及会话技术(Cookie和Session)的使用详解

Servlet的缺点 开发人员要十分熟悉JAVA 不利于页面调试和维护(修改,重新编译) 很难利用网页设计工具进行页面设计(HTML内容导入到servlet中,用PrintWriter的对象进行输出) JSP简介 JSP(Java Server Pages) 与Java Servlet一样,是在服务器端执行的,不同的是JSP先由服务器编译部署成Servlet执行. JSP技术的企业最佳实践(生成HTML内容) 新的JSP2.0规范版本包括新的功能(EL表达式,新增的Simple Tag和Tag

集群增量会话管理器——DeltaManager

DeltaManager会话管理器是tomcat默认的集群会话管理器,它主要用于集群中各个节点之间会话状态的同步维护,由于相关内容涉及到集群,可能会需要一些集群通信相关知识,如果有疑问可结合集群相关章节. 集群增量会话管理器的职责是将某节点的会话该变同步到集群内其他成员节点上,它属于全节点复制模式,所谓全节点复制是指集群中某个节点的状态变化后需要同步到集群中剩余的节点,非全节点方式可能只是同步到其中某个或若干节点.在集群中全节点会话复制的一个大致步骤如下图所示,客户端发起一个请求,假设通过一定的

会话跟踪技术

会话跟踪是一种灵活.轻便的机制,它使Web上的状态编程变为可能.HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的.非连续的.当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以解决这个问题.当一个客户在多个页面间切换时,服务器会保存该用户的信息.有四种方法可以实现会话跟踪技术:URL重写.隐藏表单域.Cookie.Session.1).隐藏表单域:<input type="hidden">,