锁定老帖子 主题:Clustering经典范文学习
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-19
作者:江南白衣,原文地址:http://blog.csdn.net/calvinxiu/archive/2007/05/10/1602891.aspx,版权所有,转载请保留。 构造Cluster是架构师们实现Scalability与High Availability 的最直接用药。所以大家很多都会无意中使用Cluster的思想去设计自己的服务器。其实Java EE里的Clustering已经做得很熟很烂,大家如果烂熟各家vendor对Web,EJB,JNDI,JMS,WebService....的Cluster实现,再思考自己的烂摊子时,思路便快捷清晰,少很多与同僚们的无谓争论。 JavaEE Cluster的经典范文是Sun的王昱写于2005年的Uncover the hood of J2EE Clustering Preface,更可贵的是dev2dev上的JadeYuan兄弟将它高质的翻成了中文。 一、所谓集群 目的就是以负载均衡(Load Balance)与失败转移(Failover) 实现可扩展性(Scalability)和高可靠性(High Availability),主要实现的功能: Load Balance 算法主要有轮循、权重(根据服务器硬件配置的不同)和随机三种,但更酷的做法是基于负载(直接查探或者服务器主动报告它们的负载)。 Health Check心跳系统与发现协议。Server一般会主动定期多播报告自己状态,也会Ping对方来问候平安。比如Weblogic每10秒会向全世界发送一次心跳,如果有30秒没有收到某个服务器的心跳了(考虑到多播可能会丢失数据包)就可视对方为阵亡。 Session Replication 因为服务器会记录与特定用户的会话信息,Balancer应该把同一用户的请求定位到同一台服务器上。如果该服务器失效,就把该用户和会话信息转移到新服务器上。 除了Scalability 与High Availability,一个集群还应该对已有代码影响最小,对性能影响最小,配置与部署简单,以及运行时可监控。 二、Web层群集 Balancer无非Apache/IIS插件,balance Servlet,硬件四层交换机三类,而讨论的重点在Session 信息的Replication 实现上,简单的分有全部服务器冗余备份,三三两两互为冗余备份,中央备份服务器三种模式。 1.多服务器全冗余备份 2.三三两两互为冗余备份 文中没讲的Geronimo使用的WADI,应该也属于这种类型,不过更为灵活,详见Geronimo 叛逆者: 加入集群功能第1部分 和 第2部分。 3. 中央备份服务器 使用内存备份session时,Tomcat/JBoss使用的JavaGroups 是一个很好的工具,它的“ Group membership protocols” and “message multicast”特性都非常有用。 另外,无论使用内存还是数据库,都需要串行化Java对象,性能损耗厉害,所以JRun 就采用了Jini架构 ,而Tangosol Coherenc ,Terracotta这些Data Grid方案都提出了自己的session备份做法,整天显示着比传统方案快多少多少。Data Grid分布式缓存本身就是很Enterprise的功能,下篇blog再详述。 三、EJB集群 从stub 调用实际EJB对象时,有三种方法实现负载均衡和fail over:
在JNDI查找EJBHome,EJBHome Stub查找生成EJB实例,调用EJB方法三种时候都可以实现负载均衡,对statefull,stateless,entity bean,又有不同的做法。 EJB需要具有幂等性(在部署描述符中声明)才能failover。 四、其他集群 JMS集群,可以有多个broker组成集群(JBoss,如果要持久化Message,就要把原来嵌入式的数据库改为共享模式),activeMQ还支持多个消费者组成集群,但每个消费者负责同一类的任务,比如订单队列的处理,Server A只处理图书类的订单,或只处理《Programming Ruby 2nd》的订单。 数据库集群有Oracle的RAC,但JDBC本身的failover能力很低,一旦connection 中断,resultset等对象都会失效,Weblogic的连接池会尝试重连。 五、走的更远 Weblogic9/10的广域网群集和服务器迁移(有些服务在群集中只能有一个实例在运行,如果该实例失效,迁移到下一个实例)功能。 如果只要单纯的load balance,不要fail over的话,使用纯硬件如F5已经足够,不需要在软件上做任何事情。 群集有两种模式,一种是只在入口的Web层进行负载均衡,一种是Web层和对象层(EJB)分别进行负载均衡。 六、Cluster的神话 1.Failover可彻底避免错误 2.小心编写可集群的程序 1.http session要放能serilaze的对象,对象不要太大,变更时要显式的setAttribute(). 2. 注意Cache的使用。如果每个JVM独立使用Cache,会否不一致,如果进行同步,注意开销。 3.不能使用静态变量,如在线用户数,要搞成分布式的 Cache。 4.外部资源如文件系统(一台机器上没有另外一台机器的文件),存成DB或者使用SAN 5.特别服务:如timer服务,基于事件的服务, 六、延伸阅读:
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-04-30
好多概念要慢慢消化一阵,一般大型软件公司有专门的集群工程师吗?还是只由架构师或者高级工程师来做构造Cluster
|
|
返回顶楼 | |
发表时间:2008-04-30
又看到江南白衣的帖子了,请问一下,springside大概什么时候能够重开呢,比较关注。
|
|
返回顶楼 | |
发表时间:2008-04-30
使用J2EE环境下的分布式集群简直就是闭门造车。LINUX系统级别的集群:LVS 可以解决所有的问题。从APACHE 负载均衡到weblogic 集群高可用 到超大规模的数据库集群。。 无一例外的有LINUX的解决方式 。。。
|
|
返回顶楼 | |
发表时间:2008-04-30
YRHYRH 写道 使用J2EE环境下的分布式集群简直就是闭门造车。LINUX系统级别的集群:LVS 可以解决所有的问题。从APACHE 负载均衡到weblogic 集群高可用 到超大规模的数据库集群。。 无一例外的有LINUX的解决方式 。。。
JavaEE跟Linux有什么关系 |
|
返回顶楼 | |
发表时间:2008-04-30
rainlife 写道 又看到江南白衣的帖子了,请问一下,springside大概什么时候能够重开呢,比较关注。
有阵没去springside 了,才知道关闭了。 希望springside能早日开放 |
|
返回顶楼 | |
浏览 6854 次