自从Apache诞生以来,它就在web服务器方面担当着重要的角色。说起web服务器集群,大家脑海中想到的也许是这样的一个画面,Apache在前面独挡一方,后面连接着很多web服务器,apache不停的在转发,并努力的在保持着负载均衡。
说到集群,不得不说到用户跟踪技术,在如今的web应用中,常用的用户跟踪技术就是Session。当然其他还有URLRewrite,Persistent Cookie和页面隐藏字段等。Session是一个存储在服务器端的对象,当用户访问web应用时,服务器端就会产生一个session对象,当web服务器集群的时候,session对象会被传递到各个服务器,以确保某台服务器故障后,用户能够继续在一个session中进行操作。
session对象在集群服务器中的传递由服务器自己实现,拿Tomcat来说,session的传递是基于socket通的组播方式实现的。当一个用户访问产生新的session后,该session会被进行对象序列化,然后通过socket通信组播给其他服务器。如果用户访问量很大,session对象较多,不仅存储session需要大量的内存空间,服务器之间的通信也会给服务器带来较大的负担。这种集群技术只适合服务器不多的中小型应用,大型应用恐怕还得另觅良方。
可以可以不要session呢?答案是肯定的。我们可以在服务器后面再增加一个数据库,把用户的访问信息记录在数据库中,如某时某刻某用户购买了某件商品等。但是数据库的操作是IO操作,从效率上来说,并不是那么理想。
还有一种方式就是采用内存数据库。在后面再配置一台内存很大的服务器,所有的session信息存放在这台机子的内存中,大家知道内存的存储速度是很快的。
究竟要用那种集群技术,就要看自己的选择了。首先要考虑应用的规模,其次要考虑本身的技术问题。不能一味的追求好的,避免造成不必要的浪费。