6.4. 容器Session管理

6.4.1. Http Session

绝大部分web应用都使用session来存储用户相关的会话信息,金蝶Apusic应用服务器为Session提供了一系列管理手段。

6.4.1.1. In-memory Cache

金蝶Apusic应用服务器将Session缓存在内存中,以保证Session访问的效率。

6.4.1.2. 存储

当Session数量超过默认缓存大小,金蝶Apusic应用服务器会将内存中的Session持久化到存储介质中,并根据Session的活跃性对存储中的Session和缓存中的Session进行交换。

管理员可配置Session缓存池的大小。金蝶Apusic应用服务器支持的Session持久化包括文件系统、RDBMS、BerkerlyDB,管理员可通过管理工具切换Session的存储方式。

如果Session中的数据非常重要,即使服务器失效,这些数据也不能丢失,那么建议采用数据库来持久化Session。

6.4.1.3. Session Failover

在集群环境中,当一个Apusic实例(Apusic Instance)失效时,它原来服务的所有用户的请求,将会由集群内的另一个Apusic实例响应。这个过程对用户来说要求是透明的,这意味着用户的登陆信息以及其它会话数据在此情况下不能丢失。由于web应用通常用HTTP Session来保存会话信息,因此,Apusic提供内存复制、Session迁移、数据库存储等多种技术来保证HTTP Session的失败恢复。

内存复制:Apusic集群中的任意Apusic实例可通过内部的复制技术,在网络中复制集群内另一个Apusic实例的Session信息,从而在该实例内存中形成另一个Apusic实例的Session备份。当某apusic实例失效时,另一个Apusic实例会接收此实例原来服务的请求,整个过程对用户是透明的,用户感觉不到原先对他进行服务的Apusic实例已经失效。

Session迁移:Session迁移是指在集群中使用Apusic负载均衡器来转发请求时,所采用的Session Failover技术。负载均衡器负责将失效的Apusic实例中的Session迁移到另一个Apusic实例中。

数据库存储:如果集群中的Apusic实例不使用In-memory Cache缓存Session,而使用数据库作为Session的存储中心。这时,由于Session不在Apusic实例中存储,因此,Apusic实例失效不会影响Session的使用。

6.4.1.4. Session Stick

Apusic集群中的负载均衡器,比如Apache或Apusic Load Balancer,在转发用户请求到集群内的Apusic实例中时,总是将一个用户的请求固定的转发到第一次响应他的Apusic实例中,这就是Apusic集群的Session Stick。这可以避免频繁的Session迁移,减小网络和服务器的负担。

6.4.1.5. Session Timeout

金蝶Apusic应用服务器可以对部署在其上的Web应用的Session超时时间进行全局的设置,也可以对每个应用的Session超时时间进行单独的设置。

6.4.2. Stateful Session Bean

在单个Apusic实例时,Stateful Session Bean的Session状态保存在服务器端的Stateful Session Bean对象实例中。而在Apusic集群中,采用创新的CSC(Client Session Cache)技术保存Stateful Session Bean的状态。CSC直接将Session状态保存在客户端,当服务器失效时将Session状态转移到可用的服务器上。Stateful Session Bean的特点决定了CSC技术是有效的,根据EJB规范,一个Stateful Session Bean仅限于单个客户使用,不存在共享的情况,因此只需要在客户和服务器之间共享Session状态,而不需要在服务器之间共享Session状态。CSC避免了Session状态发生改变时,在集群节点之间频繁的Session复制,提升了集群的性能。