J2EE集群原理

05-08-24 banq
这篇文章被放置于TSS右边重要栏目第二个,说明很多人对J2EE集群原理认识严重不足,而且在进行架构选择时,极其容易被忽视。

http://www.theserverside.com/articles/article.tss?l=J2EEClustering

TSS上这篇来自Wang yu的文章,文章阐述了负载平衡和failover的意思,比较了Web层Tomcat的动态负载平衡和HttpSession Failover原理,由于Tomcat 5采取的是多服务器内存复制策略实现的HttpSession Failover,当一个服务器中的session改变,Tomcat要通知所有的服务器,Tomcat作为Web服务器主要负责客户端连接,当访问量增加时,Tomcat的这种Session复制策略无疑是雪上加霜,因此没有太大的实用价值。

因为Tomcat是只支持Web应用系统,所以采取struts+hibernate或tapestry+hibernate(或者中间加上Spring/Jdon)都属于Web应用系统,他们都是单机Stand-alone系统,利用上述Tomcat的负载平衡只能勉强支撑两三台服务器,而且随着访问量增加,Tomcat等Web服务器将趋于缓慢,从这篇文章观点来看,Web应用程序在性能的伸缩性不太高。

下面讨论的都是因为使用EJB后而使得你的应用程序自动获得的能力:

以Weblogic JBoss为主的采取的paired servers 对服务器复制策略则要提高性能很多,但是对load balancer算法要求高,有些普通的load balancer不一定符合要求。

IBM采取的是中央状态服务器策略;而SUN则采取的是特殊数据库复制HADB策略。

该文最后分析了JNDI EJB和JMS的集群原理,实际也是阐述了从性能集群原理上说,为什么会诞生EJB等复杂技术以及对于一些大型应用为什么需要使用EJB的原因所在。

文章还否定了这样的观点:单机系统几乎可以透明的迁移到集群结构。

在迁移时,需要考虑很多问题,如状态/缓存 httpsession以及特殊的服务等。

另外观点:分布式结构一定比配置定制结构可靠吗?不一定。

在使用EJB时有人喜欢什么都实现分布式,其实这是不必的,一般可让Web应用程序首先选择同台服务器中的EJB服务,这叫配置结构。

作者的结论是:

Clustering is different from the stand-alone environment

集群架构是完全不同于单机结构的。在建立一个大型的可伸缩系统之前,我们必须对不同的J2EE服务器产品实现集群有不同的了解和掌握,选择合适的第三方框架保证确认他们也是支持集群环境的(如Jdon框架),合适的架构设计将从集群中得益,而不是将苦难留给你的企业及其其他后来的同事(国人经常是在架构设计时,喜欢方便自己,害了系统和他人)。

一直以来,所谓轻量的架构系统受到狂热分子的鼓吹和极端追从,甚至提出否定EJB的观点(如Spring作者提出的without EJB),这些祸患人心的观点不能说是完全错误的,但是至少是极端,属于一叶遮目,看待EJB不能只从OO设计角度,还要从实际应用性能上考虑,就象看到SOA结构一样,设计和性能是实际架构选择的两个基本点,善于平衡才是我们实际架构选择的主要宗旨。

                   

1
banq
2005-08-24 18:12
使用Jdon框架开发的既支持POJO Service又支持EJB服务的系统,在下面案例增加了EJB部分,展示使用Jdon框架可从简单JavaBeans平滑过渡到EJB架构。

源码下载:http://www.jdon.com/jdonframework/JdonFrameworkTest.rar

yuxie
2005-08-25 10:39
ejb要保存状态的话,使用sfsb不一样也需要复制策略,效率照样不高。分布式部署效率最高的时候是不考虑状态保持的情况下,不过这种情况下集群的效率也一样比较高吧……

再说了,with out ejb 并没有完全否认ejb的功能,只不过说在很多的情况下并不需要分布式部署,也不需要ejb提供的功能。我们电信boss的前台也不过只要两台机器作集群就ok了。

banq
2005-08-25 14:46
没好好读这篇文章,这篇文章没有激动人心的所谓“新概念”,没有令人蒙人的“耳目一新”,踏踏实实用逻辑来分析了状态的复制策略,比较了它们之间的区别。

"只不过说在很多的情况下并不需要分布式部署,也不需要ejb提供的功能"

以前我们眼睛看到地球是平的,所以我们就认为地球是平的,在我们眼界范围内的企业系统不需要分布式,但是以后呢?以后是否能够从单机顺利迁移到分布式系统呢?

选择架构是需要长远眼光,发展眼光,需要全面的了解所有知识,不能因为我们个人能力限制或眼光短浅而毁送一个系统的生命。

banq
2005-08-26 17:56
这篇文章询问为什么要使用有态Session bean,而不是httpSession,从以上J2EE集群原理我们已经了解了原因,如果有状态尽量使用有态Session bean,因为你的J2EE容器在集群failover时,JBoss Weblogic Websphere等对有态Session bean机制都比Web层的HttpSession failover要好。

http://www.jdon.com/jive/thread.jsp?forum=16&thread=22281

猜你喜欢
9Go 1 2 3 4 ... 9 下一页