负载均衡关键技术:session共享和会话保持

负载均衡关键技术:session共享和会话保持

负载均衡的session是什么

session也叫会话,用于提供服务器端和客户端系统间的必要交互。这是因为http协议本身是无状态的,所以经常需要通过session来提供服务端和客户端保持状态的解决方案。session一般是应用服务器维持的一个服务端的存储空间,客户端在连接服务器时,会由服务器生成一个唯一的ID,该ID作为标识符来存取服务器端的session存储空间。

sessionID这数据是用Cookie保存到客户端的,用户提交页面时,会将这ID提交服务器端,服务器也通过URL重写的方式传递sessionID的值,因此他不是完全依赖cookie,如果客户的浏览器禁用cookie,也没什么影响,服务器可以自动通过重写URL方式保存session的值。

session共享

负载均衡关键技术:session共享和会话保持


当我们把web程序做成分布式部署到多台服务器上,并且独立为几个二级域名,由于session存在实现原理上的局限性,使得web用户不得不经常在几个频道间来回输入用户名和密码,用户体验很差。原本程序可以直接从用户session变量中读取参数,因为无法跨服务器同步更新session变量,所以必须实时读取数据库,增加数据库负担,于是就有了跨服务器session共享的解决方案。

(1)基于cookie的session共享

原理是将全站用户的session信息加密,序列化后以cookie的方式存在根域名下,当浏览器访问该根域名下所有二级域名站点时,将与域名相对应的所有cookie内容的特性传递给它,从而实现 用户的cookie化session在多服务器间的共享访问。

优点:无需而外的服务器,缺点:受http协议头长度限制,只能存储小部分用户信息。

(2)基于数据库的session共享

一般首选mysql数据库,建议使用内存表Heap,提高session操作的读写效率。目前使用的地方不少,缺点在于session的并发读写能力取决数据库性能,同时需要自己实现session过期策略,可定时从数据库中更新和删除session记录,如果并发很高,容易出现锁。

(3)基于Redis的session共享

redis作为一种缓存数据库,提供了丰富数据类型,可以将大量数据的排序从单机内存放到redis集群中处理,并可以实现轻量级消息中间件,所以足以应付session数据存储。

会话保持

会话保持并不是session共享,在一般稍微复杂点的web应用系统中,一个客户与服务器经常会经过几次交互过程才能完成一次业务访问。由于这几次交互过程是有关系的,服务器需要在进行交互过程中,要完成一次业务操作往往需要了解上一次交互的处理结果,或者前几步的交互结果,这就要求所有相关交互过程由一台服务器完成,而不能负载分散到不同服务器。

会话保持就是指在负载设备有这么一种机制,可以识别客户与服务器之间交互过程的关联性,在做负载均衡的同时,保证一系列相关访问请求被分配到同一个服务器上。


分享到:


相關文章: