服务器集群下,写程序要注意什么?

服务器集群下,不使用ejb, 只用java bean,写程序要注意什么?如何能写好代码?

你这个问题有些矛盾,如果你用javaBeans,又要支持集群,那么就必须自己手工实现,没有现成框架。

如果你发现手工实现困难,那就必须用EJB,还没有你提问题的情况出现,EJB为集群背负了那么多缺点,如果象你说的情况存在,EJB早就不存在了

我要的只是web层的集群

banq老大不要再误导人家了,没了ejb还能啥都不能干了?其实集群下要注意的问题也没那么特别深奥~
只要注意以下几点:(目前只想到这些)
1、往session里边放的东东要实现序列化的接口(session复制用)
2、因为session要复制,所以session里边的东西要尽可能的少,否则可能集群性能还不如单机
3、集群下没有真正单例的实现,所以不要用单态模式来保存集群内所有服务器都需要的状态,比如程序的某个全局变量,可以考虑用jndi来实现。不过相信好的程序这么做的并不多。
4、同步问题也要注意~比如不要试图用加同步来实现取得最大id这样的操作,可以通过保存到数据库的手段来解决这个问题

哦,还有,特别要注意缓存的情况,大部分开源的缓存实现是不支持集群的。这时候要全面考虑你需要的缓存情况再定夺。比较省事的办法是不用缓存(缓存的作用不是任何时候都很大,比如客户查询话费祥单记录,越加缓存越坏事)。如果对数据实时性要求不算高那也好说,定期的重建缓存就是了。如果都不行,只有使用jboss cache等支持集群的cache实现。或者采用某些商业性的实现。

看看我文章里推荐的文章,可是TSS登载的,辛苦不是我写的,否则被你们这些无知无畏的人又骂到哪里了,以前我可是因为集群一直在力挺EJB,不知和多少人吵过架,结果象你这样迷途的人越来越多。

在好好读读这篇英文文章:
http://www.theserverside.com/articles/article.tss?l=J2EEClustering

如果你普通JavaBeans不费力气能实现真正集群,EJB真的不必存在了。
10个CPU以上的商业服务器集群能力是惊人的,而Tomcat只能是简陋的集群,JBoss则最多是5台,多了就不灵了。

http://www.jdon.com/jive/thread.jsp?forum=121&thread=22848

你说的Session同步只是集群的很小部分,初学者别被一些翻译文章迷惑,曾经在国内社区看到一篇所谓集群文章,其中大部分谈的是Web层简陋load balance。

没有EJB,你真的很难玩转集群。就是玩通了,可伸缩性如何?是否可不断增加服务器,增加后是强者越强?

我把那篇翻译的误导文章地址贴在这里:
http://www.matrix.org.cn/resource/article/43/43829_JBoss_Clustering.html
题目是:JBoss 4.0.2集群指南
其实整篇文章谈的都是JBoss中嵌入的Tomcat集群,题目也许可以改为:
Tomcat 5.0集群指南。

关于Tomcat 的简陋集群可以参考上述TSS的那篇文章。

这才是误导啊。

JBoss集群Huihoo的这篇文章比较完整:
http://www.huihoo.com/jboss/clustering/strategy.html
对比两篇文章,huihoo是谈原理,上面误导篇是谈配置,按道理,原理实现和配置使用应该是一致的,但是你仔细研究会发现两篇不一致,因为huhoo谈了EJB集群,而后者则没有谈集群重要核心EJB集群的配置,包括EJB应用应该注意什么。

不过这篇误导性文章也谈到:
“Jboss 支持如下类型的cluster:EJB、web、JNDI、JMS,我们主要了解web cluster。”

但是题目取得就不太确切了,而且从TSS文章可以了解到Web Cluster其实很简陋,没多大可伸缩性。

呵呵,banq 旁征博引的精神让人很是佩服~~
不过粗粗看下来~好像没有说没了ejb ,cluster就不能跑的阿,嘿嘿,照此说来,我也完全可以说,banq你是完全错的,详情请看http://www.theserverside.com/articles/article.tss?l=J2EEClustering 等等等等~

俺也没说session同步是集群的全部阿~我这里只是摆出了without ejb的情况下,使用集群应该注意的事项而以,而且我可以确信注意到了这些,程序跑在集群上是没有问题的,没那么多理由,因为项目就是这么跑的,运行的也很正常,集群该发挥作用的也都好好的发挥着,我们可不是用tomcat那种玩具的,呵呵~

呵呵,偶尔吵一吵也很有趣~~真想多说一点理由……不过懒得打字了

Web Cluste再简陋,那也是你程序的门面啊~,web一旦死住了,你ejb集群再多就是100个cpu又有什么用呢
说话要负责任的,谁说web cluste没多大可伸缩性,如果程序里边不使用session(好像tss就是这样?),你集群里有两台server,就能基本上撑住两倍的访问量,三台就是三倍,只要server前端有台四层交换机分布请求就ok了。不必ejb差吧?

很多商业网站并不都是j2ee ejb做的吧

我一再强调使用集群两个字就包含两个字:负载平衡和failover。
yuxie说的不错,web cluster只是负载平衡,使用Web cluster字样是不准确,容易造成初学者以为集群很简单,就是前面加个分发器。

但是万一有一台机器坏了,或者网络有问题,分发器还是继续将request发往那台坏的服务器啊,这就引起另外一个问题:failover。

使用EJB,可以很好地支持failover,而且动态负载平衡要做得比外部分发器要灵敏多,外部分分发策略是很傻的,无法知道到底哪个EJB耗CPU啊。

另外还有EJB组件的分布式事务。

所以 Web Cluster一般称为web balance load, 负载平衡和集群是两种概念。我们不能因为轻易将其混乱。


现在国内大的网站都是内容网站,是一种方向推的技术,而不是互动网站,所以这些内容网站只要前段使用分发器以及缓存就可以了,越是动态互动性强,对技术要求就高,这也是eBay网站 Google网站技术很高的原因所在。