Leopard Web - 分布式session

Leopard Web -- 分布式session

        要实现服务集群部署,首先就要面临解决session共享的问题。实现session共享有很多中方式,例举如下:

        1、前端架设反向代理服务器如(nginx) - > web容器 (Jetty),通过nginx配置集群ip_hash规则实现指定ip访问指定的服务器。

       2、利用web容器自身的session复制,实现分布式session.

       3、对session进行持久化,实现分布式session。

       以上我列举了三种方式,这三种方式都能实现集群部署。前二种方式都有一定的缺限,唯第三种方式比较靠谱。

       第一种方式假设集群下有一台服务挂了的情况下,会导致用户请求到另一台机上?而另一台机并没有挂掉那台机的session数据,因此在此种情况下,还需要用户进行登录一次。

       第二种方式,web容器进行session复制,会导致一台机存储二台机的session,如果数据量爆增的情况下。内存会比较吃紧,明显不友好。

       第三种方式,session存储在数据库中,每次请求会从数据库读取session数据,这样轻松解决了一,二种方式存在的缺限。我并不是说你非要采用第三种方式来实现session共享,我只是想说明第三种方式确实存在优势。那么他的优势到底在哪?我认为至少存在以下二点优势。

        1、在集群里增加机器时,无需再关注分布式session的数据。

        2、集群下的机器一台挂掉时,另一台仍然可以继续服务。不需要用户重新进行登录。

 

        说了这么多,Leopard要实现分布式session该怎么做呢? 在applicationContent.xml中,使用leopard:redis标签配置一个redis数据源,然后在leopard:config标签中配置sessionRedis指向redis数据源。示例 配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:leopard="http://www.leopard.io/schema/leopard"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.leopard.io/schema/leopard http://www.leopard.io/schema/leopard.xsd">


	<leopard:property-placeholder />

	<leopard:jdbc id="jdbc" host="112.126.75.27" database="example"
		user="example" password="leopard" />


	<leopard:component-scan base-package="com.baidu.example" />

	<leopard:redis id="redis" server="112.126.75.27:6311" />
	<leopard:config performance="true" sessionRedis="redis" />


</beans>