Clustering using Tomcat

本文探讨了分布式系统的可扩展性误区,并介绍了Tomcat集群的实现方式及其带来的优势。文章详细讲解了如何配置Tomcat集群,实现session复制及负载均衡,确保应用系统的高性能与稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Without Ejb第四章中有段对EJB的分布化和可扩展性的讨论:

在人们中间有一个广为传播的信念: 分布式应用系统是高度可扩展的.这种观点认为,可以使用4个web容器, 8个ejb容器所有的业务都通过web层远程调用.这样就可以得到非常好的扩展行.

然后作者在下文中批判了这种观点.每次远程方法调用造成的性能代价太过高昂,以至于在理论上还有什么 收益的化,早也被网络传输或对象编组中的损失给大大超过了. 作者建议的是对整个应用系统进行集群式部署. 然后在运用硬件负载均衡或web容器的负载均衡来分流访问.

集群是个诱惑的名字. 今天花了一上午了解了如何在Tomcat中实现集群. 还不错, 当在Tomcat官方网站上看了集群的文章时, 感觉并不是很难, Tomcat5.X已经把集群内嵌了.

配置也瞒简单的, Tomcat是用多波包(multicast)的方式去发现其他的节点,其他节点回返回IP 和 端口, 以提供session的复制.  所以放在session里面的对象一定要实现序列化,  当在一定的时间内没有收到某个节点返回值时, 那个节点就判定死了.  还有就是要怎样实现load balancing ,  你要怎样分发请求(request)到集群节点(Node)去, 这里也有许多方法,  我看的是用Servlet Filter去做这件事的(参考下面网站的例子).

集群能给我们带来很多好存, 性能的可扩展性,  可以关掉几台Node, 而系统不受影响.

今天在Javalobby看到一个关于集群的一个trick.
假如在一台node中的session中存有一个List对象.
如果你是这样使用的话,
List l = (List)session.getAttribute("list");
l.add("Denny");
这个session不会引发session复制. 所有你还需要把这个List set回session中.

If you have an ArrayList in the session representing shoppingcart objects and if you just call getAttribute() to retrieve theArrayList and then add or change something without calling thesetAttribute(……………) then the container may not know that you have addedor changed something in the ArrayList. So the session will not bereplicated.

ok 就讲这么多了.
官方指南
http://tomcat.apache.org/tomcat-5.5-doc/cluster-howto.html

下面的这个不错, 带了一个例子, 自己实现了两个load balancing的算法. 用的是Filter

Clustering and Load Balancing in Tomcat 5, Part 1

http://www.onjava.com/pub/a/onjava/2004/03/31/clustering.html?page=1

Clustering and Load Balancing in Tomcat 5, Part 2

http://www.onjava.com/pub/a/onjava/2004/04/14/clustering.html?page=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值