1。所谓状态恢复,就是通过状态复制实现的。状态复制不一定要在两个节点之间。比如WEBSPHERE,就是把状态复制到数据库。在WEBSPHERE里,状态复制有两种方式,通过内存复制(类似WEBLOGIC),或者通过数据库永久化。无论那种方式,对于应用而言都是透明的,目的都是在FAIL-OVER情况下实现透明的状态恢复。
2。EJB的负载平衡,也不是所谓“时时刻刻都在发生”。EJB的负载平衡,同样有“SESSION AFFINITY”的优化,当然这是针对于SFSB。对于SLSB而言,既然没有状态,和WEB负载平衡就不具备可比性。
EJB的负载平衡,不但在概念上,甚至在算法上,实现上,都和WEB集群完全一致。
并且,EJB的负载平衡和 WEB负载平衡相比,作用要小得多。这样说的原因:
第一:绝大多数生产环境里,EJB的客户端是WEB,并且EJB和WEB是共同部署。也就是说,如果EJB容器死了,那么WEB容器肯定也死了。EJB的负载平衡逻辑是建入在STUB里的。既然WEB已经死了,那么STUB也就不存在了。谈何EJB负载平衡?
第二,LOCAL EJB是没有集群功能的。
第三,ENTITY EJB是没有集群功能的。
第四,在WEB,EJB共同部署的情况下,即使WEB访问EJB是通过REMOTE INTERFACE, 应用服务器也会做优化,把访问当作类似LOCAL INTERFACE的方式处理(目的是为了省略不必要的对象序列化)。这样获得的STUB有目的地关闭了集群逻辑。原因在一中已经描述。
所以,EJB的集群,只在下面的情况下才会发生:
REMOTE SESSION BEAN(STATEFUL或者STATELESS), 并且客户端不部署在同一JVM里。即使在这样的情况下,EJB开发者还要保证EJB方法是IDEMPOTENT的。
不明白BANQ为什么对EJB集群情有独衷。更不动所谓WEB集群“简陋”是什么意思。二者的实现,在代码层面都是用同样的代码,何来一者简陋另一者高级?
> 我的意思是:Session复制是可有可无,如果没有Session复制
> 透茫蛭饣峤档Web服务器接收客户端的处理能力。
>
> failover主要是指状态的恢复,别因为一台服务器当机,把保
> 嬖谀诖嬷械淖刺Я耍Session
> Failover只能解决保存在Session的状态的failover。
>
> 而我们有提倡尽量少用Session,所以一般不用Session来保存
> 刺谡飧鏊悸废拢Session
> Failover等于一个空概念,个人认为没有实用价值。
>
> Cache等failover概念比较重要。
> 另外负载平衡还有一个动态概念,EJB提供远程方法调用,所?
> 每时每刻运行时,都有可能保持各个服务器之间负载相当,这
> 帜芰ξ腋鋈巳衔苣芽客獠考际跏迪值摹?
>
> 可以用一个比喻来解释:你作为一个外部东东,要了解我内部
> 脑诵校憧隙ㄒ筛龆钊胛夷诓考嗍樱悄愕亩植
> 要影响我运行,不成为我的负担,很难啊。单纯靠外部技术的
> 缧藕攀呛苣训摹?
>
> 所以集群在Web实现很简陋,不能实现大幅度拓展服务器能力?