在构建高效能Web应用时,使用Apache、Memcached-Session-Manager与Tomcat集群是一种常见的做法。然而,在实际部署过程中,可能会遇到一些挑战。例如,当所有组件(包括两个Tomcat节点、Apache和Memcached服务器)都部署在同一台虚拟机上时,无法准确地模拟真实的生产环境。此外,这样的设置也无法完全体现分布式环境的优势。
为了解决这些问题,我们对原有的物理架构进行了重新设计。新的设计保留了原有的配置方法,但将各组件分散部署到不同的主机上,以更接近真实的生产环境。
以下是具体的操作步骤:
- 将已配置好的Tomcat节点复制到两台不同的主机上。
scp -r apache-tomcat-node1 root@hadoop2:/u01
scp -r apache-tomcat-node2 root@hadoop3:/u01 - 编辑Apache的worker.properties文件,更新负载均衡器的配置。
[root@hadoop1 /]# vi /etc/httpd/conf/workers.properties
worker.list=loadbalancer
worker.tomcat1.port=8009
worker.tomcat1.host=192.168.163.156
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
worker.tomcat2.port=8019
worker.tomcat2.host=192.168.163.166
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=tomcat1,tomcat2
worker.loadbalancer.sticky_session=true - 调整每个Tomcat节点上的MSM配置,确保它们指向正确的Memcached服务器。
- 使用ApacheBench工具进行吞吐量测试,评估系统性能。
c:\Apache24\bin>ab -n 10000 -c 4 http://192.168.163.146/examples/testSession.jsp
...
Requests per second: 968.84 [#/sec] (mean)
... - 模拟一个节点故障的情况,再次进行性能测试,观察系统的恢复能力和性能表现。
c:\Apache24\bin>ab -n 10000 -c 4 http://192.168.163.146/examples/testSession.jsp
...
Requests per second: 1250.92 [#/sec] (mean)
...
测试结果显示,即使在一个节点故障的情况下,系统的吞吐量仍然能够达到1250.92次请求/秒,甚至超过了双节点正常运行时的表现。
最后,对于是否应使用Memcached来存储Session,存在一定的争议。虽然Memcached提供了快速的数据访问能力,但在某些场景下,如内存溢出或集群扩展时,可能会导致用户会话丢失等问题。因此,建议采用Memcached结合关系型数据库(或NoSQL数据库)的方式,以平衡性能和稳定性。具体实现策略包括:
- 用户登录时,同时将Session写入Memcached和数据库;
- 在Session中添加一个字段,记录最后一次写入数据库的时间;
- 每次页面加载时,优先从Memcached读取Session,若未命中则从数据库读取;
- 每隔一段时间或页面加载次数达到一定阈值后,将Session重新写入数据库,以防止数据丢失。