再说几句:
在多数情况下, 尤其是WEB + EJB的情况下, 也就是说, 没有外部客户的情况下, EJB的集群不但不需要, 也没有实际意义, 而且无法实现, 至少对于WEBLOGIC是如此 (如果JBOSS和WEBSPHERE支持 WEB + EJB 情况下的EJB LOAD BALANCING, 那将十分令人发指).
对于有外部客户的情况, 外部客户多数情况下是J2SE, J2ME之类的所谓RICH CLIENT. 这样的情况下, SESSION 状态可以放在客户段. 这也是C/S传统的做法. 事实上, 即使今天, 象EBAY这样需要处理大量交易的系统, 采用的也是完全"无状态"的结构. 也就是说, 虽然EBAY系统使用J2EE, 但是状态参量是放在客户端(COOKIE, 隐藏HTML参数, JAVASCRIPT 参数, 等等), 或者直接写入数据库的. 我想, 随着AJAX, XAML和XUL的普及, 这种结构回越来越多, 越来越容易实现的.
另外, 记得前面有人讨论到硬件LOAD BALANCER和 WEBLOGIC 集群 "配对服务器" 状态复制算法不匹配的说法. 这是对"配对服务器" 状态复制算法的误解. "配对服务器"的主服务器如果脱线, 硬件服务器会把下一个请求根据 ROUND ROBIN 或其他算法分配到集群中的某服务器. 该服务器会从请求中解析出该SESSION 的主/从服务器, 然后从"从服务器"把状态复制过来, 形成新的"配对". 这种牺牲"FAIL OVER"情况下一次性性能的设计, 远胜于TOMCAT的全局复制的设计. 使用全局复制的集群, 如果节点比较多, 那么复制状态的网络流量将远超出正常工作的流量.