集群和负载均衡在很多软件和平台中都有所应用,根据不同的需求,我们所用的开发语言也不同。现在,就来说一下J2EE下的集群负载均衡的问题。首先我们还是来谈一下这个平台下的基本概念,看看有什么不同。
◆实现一个J2EE集群需要考虑的因素
设计J2EE集群需要考虑很多因素。下面这些问题都是在一个大型的J2EE系统需要考虑的(这个列表取自EJB基本训练文档-“用J2EE创建高可用性和可扩展的应用)。
◆集群
那种类型的集群适用:垂直还是水平扩展?
在那个层次实现集群:web服务器或者,servlet,JSP容器还是HTTPsession对象;或者EJB,应用服务JMS和JNDI对象还是数据库集群?
◆负载均衡
选中一个服务器的时间(也就是affinity,姻亲关系):每次请求,每个事务或者每次会话?
如何选择服务器(也就是负载均衡策略):randomly,round-robin,weight-baesd,least loade dserver,或者由应用决定?
负载均衡在哪个位置上实现,客户端还是服务器?
◆容错
服务器如何进行失败重启检测?
什么时候适合失效重启和尝试使用其他的服务器?
失败节点上的系统和应用的状态?
◆session状态持久化
状态如何传播?
传播的频率?
对象状态如何持久化?
状态持久化机制的效率如何?
复制的状态是否粘性?
网络环境对session状态的复制有限制吗?
◆建议的集群设置
下面列出在推荐的集群环境中,我要达到的目标:
可升级能力高
◆容错
动态配置,易于管理
自动发现新成员
失败重启和负载均衡,session数据内存复制
可插拔/配置的负载均衡策略
当一个成员加入或离开时,能通知组成员
通过多播的方式,无掉包的信息传输
集群对web应用和服务器来说都是无缝的。对客户端和服务端都是透明的。客户透明是指客户端无须知道集群服务或者集群的设置。集群的识别和访问和单机一样,而不是各自独立的服务。服务器透明是指服务器上的应用程序代码不需要知道是在一个集群之内。应用程序代码不能和其他的集群成员通信。
◆总结
我们看看如何部署一个集群(运行多个Tomcat服务实例)来达到上面提交的目标。我们将讨论在Tomcat5中实现session复制的集群架构和配置细节。