对Web服务器进行集群,Session的安全和同步是最大的问题,实现Session同步有很多种方案,常见的可能的方式有:
1、客户端Cookie加密。
用的较少,此处不详述。
2、Session复制。
参与集群的每个节点的Session状态都被复制到集群中的其他所有节点上,无论何时,只要Session发生改变,Session数据都要重新被复制。Tomcat、JBoss、was都提供了这样的功能,其中Tomcat采用集群节点广播复制,JBoss采用配对复制机制。
优点:每个节点都复制一份Session,一个节点出现问题时其它节点可以接替它的工作。缺点:节点间进行Session同步会占据不少系统资源,整体性能随着集群节点数的增加而急剧下降。
3、Session共享。
1、客户端Cookie加密。
用的较少,此处不详述。
2、Session复制。
参与集群的每个节点的Session状态都被复制到集群中的其他所有节点上,无论何时,只要Session发生改变,Session数据都要重新被复制。Tomcat、JBoss、was都提供了这样的功能,其中Tomcat采用集群节点广播复制,JBoss采用配对复制机制。
优点:每个节点都复制一份Session,一个节点出现问题时其它节点可以接替它的工作。缺点:节点间进行Session同步会占据不少系统资源,整体性能随着集群节点数的增加而急剧下降。
3、Session共享。
将所有节点的Session放到一起进行统一管理,每个节点在未参与集群以前都有自己独立的Session体系,参与到集群以后可以让所有节点将各自的Session信息用一套相同的机制保存到一个统一的地方进行存取,这样不管请求被分发到哪个节点都可以访问到其它节点创建的Session。
例子:利用memcached把多个tomcat的session集中管理,前端在利用nginx负载均衡和动静态资源分离,在兼顾系统水平扩展的同时又能保证较高的性能。
4、路由策略
利用nginx的基于访问ip的hash路由策略,保证访问的ip始终被路由到同一个tomcat上,这个配置更简单。但如果应用是某一个局域网大量用户同时登录,这样负载均衡就没什么作用了。