凌燕 2019-06-30
无状态可以仅用很少的对象就可以处理很多的用户,空闲状态的用户越多,无状态服务器就越有用
相关性:会话状态只与当前会话有关,它存在于业务事务中,与其他会话及他们的业务事务是分开的;
与记录数据信息的区别:记录数据时长期保存在数据库中的持久化数据,它对所有会话可见,会话状态需要提交成为数据库中的记录;
最大问题:出现在处理隔离性的时候(同时操作,或者相关联操作)
不能把会话中所有数据都看成是会话状态
客户会话状态:在客户端保存数据(在web中可用url、cookie、hidden域等)
适用场景:会话数据较少、用户经常取消会话(如B2C用户直接关闭站点消失)
问题:安全性、完整性
服务器会话状态:在服务器内存、文件系统、一张简单的数据库表(以会话标识号为key、以已序列化对象为值)
优点:容易直接访问会话状态
数据库会话状态:在服务器端存储(将数据分解为多个表和域)
优点:状态持久化不易丢失
问题:隔离性差(需要将会话数据与记录数据相隔离)
以上3种模式并不相互排斥,可以混合使用。使用时,还需要注意:客户机崩溃、服务器死掉、网络连接断掉
会话迁移:允许一次会话从一台服务器转移到另一台服务器,从而可以有一台服务器处理一个请求,其他服务器处理其他请求
优点:可均衡服务器
缺点:难以找到会话状态,难以支持会话迁移
服务器亲和:某次特定会话的所有请求只能由一台服务器处理
缺点:当客户端有使用代理是,可能会有大量负载集中在某台服务器上