Session 会话
一、session 管理
1、session 复制
实现每一个服务器都拥有相同的 session 会话信息,保证处理的一致性
缺点:一旦应用服务器数量较大,上百台以上,一个应用服务器就需要针对一个 session 会话,将其复制到其他的机器上,这样性能耗损非常大
实际环境中,不用这种 session 复制方案
2、session 绑定
会话绑定,会话粘滞,也即是源地址散列的方式
实际环境中,几乎不使用这种方式,尤其高可用和高性能的应用要求,一旦一个用户请求的 IP 一直使用同一台应用服务器进行处理,机器出现崩溃,session 丢失了,然后,负载均衡服务器将用户的请求分发给其他的服务器,导致之前做的处理消失了,用户之前的处理信息消失,又得重新开始,会导致用户体验很差
升级程序,就需要杀掉之前的程序,导致会话信息丢失,有没有好的处理方式呢?可以让程序升级之前,停掉所有的请求奔向该台服务器,然后,升级完成之后,再重新接收请求
3、利用 Cookie 记录 session
HTTP 协议包含 Cookie,Cookie 会在请求和响应中传递,请求中包含 Cookie 发送给服务器,服务器修改 Cookie,再返回给客户端,客户端下次请求会把 Cookie 重新提交,Cookie 正好记录了 session 多次请求处理的数据信息
缺点:Cookie 大小有限,不可能记录太多的上下文内容,只能记录简单必要的上下文,由于浏览器会由禁止 Cookie 的情况,不能传递 Cookie,导致 Session 管理失效,但是,这种方式依然有着高效的功能
实际上,该方式用的最多
4、Session 服务器
由于 Cookie 依然会有问题,最常用的就是 Session 服务器,专门通过一个 session 服务器管理所有 session 的会话信息,应用服务器不再记录任何的 Session 信息,请求分发给不同的服务器,然后通过应用服务器的一次请求进行会话上下文管理,去 session 服务器获得 session 信息,对 session 进行管理,增删改查各种操作
该方式,又叫无状态的应用服务器
share-nothing 架构,这种架构可以无限伸缩,互联网应用尽量采用这种架构,实际上,就是状态记录进行转移,有其他的部分进行管理
评论