`
dengyin2000
  • 浏览: 1210514 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Clustering using Tomcat

阅读更多
在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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics