应用服务器的集群策略及Java EE 5.0

    在中国Java技术界,袁红岗是一个不能忽视的名字。他的观点,及对中间件趋势的看法,是很多人感兴趣的。日前,在金蝶Apusic于广州花园酒店举办的“Java俱乐部”上,记者和这位极少露面的金蝶中间件首席科学家就集群、Java EE5.0等热门话题展开了直率的深入对话。果然,袁红岗出语惊人,带来了很多独特的视角和精彩的观点。
  
    记者:不管是一般的技术观点,还是在平时打单过程中,我们似乎可以感觉到,集群功能一直是国外中间件厂商攻击国内中间件的弱点。而据我们所知,你们金蝶中间件在去年下半年推出了自己的集群功能,并且在宣传中提及,在国家质检总局全行业这个大单中和几个主要国外产品同等测试,测试结果甚至排在前面,这是否表示Apusic的集群功能已经能满足客户的需求?你对集群功能又怎么看,你认为中J2EE集群的本质是什么?
  
    袁红岗:首先我可以向你证实,在国家质检总局的核心电子业务系统“大通关”项目中,金蝶Apusic中间件与三家世界主要中间件厂商的产品,在同一平台和环境下用国际测试工具进行了全方位的性能测试,经过三轮严苛的点对点、兼容性和性能测试,结果我们成功夺标。在测试结果中,Apusic在集群性能上并不逊色国外同类产品。
  
    集群是中间件厂商经常热捧的一个概念,说只有采取集群策略你的应用系统的性能才能提高。不明就里的用户在付出了数倍的价钱去购买集群设备和软件以后,却往往得不到所应该得到的效果。Apusic作为一家负责任的公司,应当向大家来澄清所谓的“集群悖论”。所谓集群,只有在细粒度计算中其效果才会明显,也就是将计算过程以一定的并行算法进行细分,将计算分布到多个处理机运行,最后再将计算结果合并。有一个很有名计划叫做SETI@home,是一项利用全球联网的闲置计算机共同搜索地外文明的科学实验计划,只需要下载一个小程序就可以对从射点望远镜得到数据进行分析。这就是一个典型的细粒度计算,所有的参与计划的计算机并行地计算浩如烟海的庞大数据库中的一小段数据,再将计算的结果汇总,从而发现可能的智能信号。而反过来我们看到在J2EE应用中大多数计算都是粗粒度的,再加上事务处理需要在分布式计算中进行协调,更降低了集群的整体处理能力。因此集群并不是解决性能问题的最佳途径,在单机低并发的情况下如果你认为性能不理想,那么请不要指望集群能给你带来性能的提升,相反你会发现性能反而还会有所下降。
  
    那么,集群仅是厂商宣传的噱头吗?在以下两种情况下集群是有用的:1. 高并发超负荷运行的主机,例如google这样的网站,它的访问量是相当大的,因此google会采取集群策略来分散客户的请求,以提高整体响应能力。我们接触的很多J2EE应用负荷量都不大,其实每秒访问量在500以下的应用都没有必要采取集群策略。2. 失效转移,其实我认为这才是集群真正有用的地方,使用一台低成本计算设备作为主设备的备份,在主设备发生故障时及时接替,以保证7×24小时不间断服务。综上所述,在准备采用集群之前,一定要仔细分析具体的应用环境,以避免不必要的浪费。
  
   作为一种选择,Apusic同样实现了集群技术,但我们并没有沿用大多数应用服务器厂商所采取的内存复制技术(in-memory replication),我们知道在集群中需要在各结点之间同步一些状态信息,如果采用内存复制技术,将耗费大量的网络带宽,对性能也有很大影响。这是因为每当一个结点的状态发生变化时,都需要通过多播等方式向其他结点传递状态信息,随着集群内部结点的增多,内存复制将会非常频繁,从而造成广播风暴,严重阻塞带宽。Apusic所采取的技术是客户端缓存,即直接将状态信息保存在客户端,当服务器失效时将状态转移到可用服务器。
  
    记者:其实直到现在,还有人对中国人能做出中间件不相信、对产品不信任。你在去年曾说“大家在同一个标准下开发,Apusic和IBM、BEA的产品没什么本质区别”、对于这句话,你今天能否再解释一下?
  
    袁红岗:这个问题其实不需要证明,没有人认为神舟飞船和阿波罗飞船在本质上有什么区别,都是为载人航天而制造出来的工具,并不会因为一个是中国制造、另一个是美国制造,在用途上就存在什么区别。诚然,我们和国外产品还存在一些差距,但在J2EE标准框架之下,我们提供了完全可供用户使用的产品,用户的选择是对我们产品最大的肯定。中国软件起步较晚,基础较薄弱,但在中间件领域我们是及时跟进的,当时站在同一条起跑线上,现在仍然没有被淘汰出局,相反差距还在逐步缩小。我相信凭我们的技术实力,我们完全有资格和国外产品同台竞技。
  
    记者:在我参加各种技术大会,包括去年北京Java10周年大会时,跟许多技术人员交流、聊天的时候,他们都反映Apusic的启动速度非常快,很快就启动了,和同类产品相比非常突出。看来使用者们对它快速启动的特点非常喜爱。据我了解,Apusic的代码只是其它产品的几分之一,是因为这个原因吗?你设计时是怎么想的?
  
    袁红岗:很多人不理解,为什么Apusic和其他产品比起来代码规模上要小很多,但使用起来并没有感觉到有什么功能缺失呢?这里要涉及到软件使用上的一个“二八原则”,即80%的使用者通常只会用到一个软件20%的功能。象微软的产品个个都是巨无霸,但对某个产品真正做到完全精通的可以说寥寥无几。以Word为例,平时我们只是用它来写写文档,很多高级功能其实根本用不上。在Apusic应用服务器的开发上我们也是遵循同样的原则,我们将尽可能地将整个软件产品最重要的20%的功能做好、做完善,以保证大多数用户的需求,剩下的80%功能将根据需要逐步增加。譬如国外产品很早就有的集群功能我们最近才推出来,并不是我们没有能力实现集群功能,而是在我们看来,集群并不是解决性能问题的最好方案,只有在真正大并发请求下集群才会展现它的优势。因此,我们把集群功能归结为低优先级需求,只有在其他方面的性能和稳定性有了很大提高后再来考虑集群。
  
    另一个使Apusic运行轻便的重要原因在于软件架构的设计。架构是一个软件的灵魂,好的架构将延长软件的生命力,轻松应付各种变化。Apusic的架构在2001年时就已定型,以微内核和多路复用为其核心,历经产品多次重大升级而未影响核心体系,展现了顽强的生命力。相反,如果架构设计不合理,每次升级都要对架构进行调整,势必引入大量冗余代码,使整个产品臃肿不堪。
  
    第三个原因在于代码编写的简洁性上。莎士比亚有一句名言:“简洁是智慧的灵魂”,在科学界同样也推崇简洁性,麦克斯韦方程组简洁深刻,被誉为是上帝谱写的诗歌,爱因斯坦的著名公式E=mc^2更是将简洁性发挥到了极致。程序设计语言不仅仅是为计算机运行而设计的,它也是一种思想表达工具,甚至比自然语言更简洁、深刻、无歧义。我平时很少写文档,因为我认为代码本身就已经表达了作者的思想。当我看到简洁优美的代码时,我认为是在读一篇美丽的诗篇,并为作者深邃奔放的思想所折服。相反,当看到混乱、繁复而无章法的代码时,我相信作者的思想同样是混乱的。
  在中国Java技术界,袁红岗是一个不能忽视的名字。他的观点,及对中间件趋势的看法,是很多人感兴趣的。日前,在金蝶Apusic于广州花园酒店举办的“Java俱乐部”上,记者和这位极少露面的金蝶中间件首席科学家就集群、Java EE5.0等热门话题展开了直率的深入对话。果然,袁红岗出语惊人,带来了很多独特的视角和精彩的观点。
  
    记者:不管是一般的技术观点,还是在平时打单过程中,我们似乎可以感觉到,集群功能一直是国外中间件厂商攻击国内中间件的弱点。而据我们所知,你们金蝶中间件在去年下半年推出了自己的集群功能,并且在宣传中提及,在国家质检总局全行业这个大单中和几个主要国外产品同等测试,测试结果甚至排在前面,这是否表示Apusic的集群功能已经能满足客户的需求?你对集群功能又怎么看,你认为中J2EE集群的本质是什么?
  
    袁红岗:首先我可以向你证实,在国家质检总局的核心电子业务系统“大通关”项目中,金蝶Apusic中间件与三家世界主要中间件厂商的产品,在同一平台和环境下用国际测试工具进行了全方位的性能测试,经过三轮严苛的点对点、兼容性和性能测试,结果我们成功夺标。在测试结果中,Apusic在集群性能上并不逊色国外同类产品。
  
    集群是中间件厂商经常热捧的一个概念,说只有采取集群策略你的应用系统的性能才能提高。不明就里的用户在付出了数倍的价钱去购买集群设备和软件以后,却往往得不到所应该得到的效果。Apusic作为一家负责任的公司,应当向大家来澄清所谓的“集群悖论”。所谓集群,只有在细粒度计算中其效果才会明显,也就是将计算过程以一定的并行算法进行细分,将计算分布到多个处理机运行,最后再将计算结果合并。有一个很有名计划叫做SETI@home,是一项利用全球联网的闲置计算机共同搜索地外文明的科学实验计划,只需要下载一个小程序就可以对从射点望远镜得到数据进行分析。这就是一个典型的细粒度计算,所有的参与计划的计算机并行地计算浩如烟海的庞大数据库中的一小段数据,再将计算的结果汇总,从而发现可能的智能信号。而反过来我们看到在J2EE应用中大多数计算都是粗粒度的,再加上事务处理需要在分布式计算中进行协调,更降低了集群的整体处理能力。因此集群并不是解决性能问题的最佳途径,在单机低并发的情况下如果你认为性能不理想,那么请不要指望集群能给你带来性能的提升,相反你会发现性能反而还会有所下降。
  
    那么,集群仅是厂商宣传的噱头吗?在以下两种情况下集群是有用的:1. 高并发超负荷运行的主机,例如google这样的网站,它的访问量是相当大的,因此google会采取集群策略来分散客户的请求,以提高整体响应能力。我们接触的很多J2EE应用负荷量都不大,其实每秒访问量在500以下的应用都没有必要采取集群策略。2. 失效转移,其实我认为这才是集群真正有用的地方,使用一台低成本计算设备作为主设备的备份,在主设备发生故障时及时接替,以保证7×24小时不间断服务。综上所述,在准备采用集群之前,一定要仔细分析具体的应用环境,以避免不必要的浪费。
  
    作为一种选择,Apusic同样实现了集群技术,但我们并没有沿用大多数应用服务器厂商所采取的内存复制技术(in-memory replication),我们知道在集群中需要在各结点之间同步一些状态信息,如果采用内存复制技术,将耗费大量的网络带宽,对性能也有很大影响。这是因为每当一个结点的状态发生变化时,都需要通过多播等方式向其他结点传递状态信息,随着集群内部结点的增多,内存复制将会非常频繁,从而造成广播风暴,严重阻塞带宽。Apusic所采取的技术是客户端缓存,即直接将状态信息保存在客户端,当服务器失效时将状态转移到可用服务器。
  
    记者:其实直到现在,还有人对中国人能做出中间件不相信、对产品不信任。你在去年曾说“大家在同一个标准下开发,Apusic和IBM、BEA的产品没什么本质区别”、对于这句话,你今天能否再解释一下?
  
    袁红岗:这个问题其实不需要证明,没有人认为神舟飞船和阿波罗飞船在本质上有什么区别,都是为载人航天而制造出来的工具,并不会因为一个是中国制造、另一个是美国制造,在用途上就存在什么区别。诚然,我们和国外产品还存在一些差距,但在J2EE标准框架之下,我们提供了完全可供用户使用的产品,用户的选择是对我们产品最大的肯定。中国软件起步较晚,基础较薄弱,但在中间件领域我们是及时跟进的,当时站在同一条起跑线上,现在仍然没有被淘汰出局,相反差距还在逐步缩小。我相信凭我们的技术实力,我们完全有资格和国外产品同台竞技。
  
    记者:在我参加各种技术大会,包括去年北京Java10周年大会时,跟许多技术人员交流、聊天的时候,他们都反映Apusic的启动速度非常快,很快就启动了,和同类产品相比非常突出。看来使用者们对它快速启动的特点非常喜爱。据我了解,Apusic的代码只是其它产品的几分之一,是因为这个原因吗?你设计时是怎么想的?
  
    袁红岗:很多人不理解,为什么Apusic和其他产品比起来代码规模上要小很多,但使用起来并没有感觉到有什么功能缺失呢?这里要涉及到软件使用上的一个“二八原则”,即80%的使用者通常只会用到一个软件20%的功能。象微软的产品个个都是巨无霸,但对某个产品真正做到完全精通的可以说寥寥无几。以Word为例,平时我们只是用它来写写文档,很多高级功能其实根本用不上。在Apusic应用服务器的开发上我们也是遵循同样的原则,我们将尽可能地将整个软件产品最重要的20%的功能做好、做完善,以保证大多数用户的需求,剩下的80%功能将根据需要逐步增加。譬如国外产品很早就有的集群功能我们最近才推出来,并不是我们没有能力实现集群功能,而是在我们看来,集群并不是解决性能问题的最好方案,只有在真正大并发请求下集群才会展现它的优势。因此,我们把集群功能归结为低优先级需求,只有在其他方面的性能和稳定性有了很大提高后再来考虑集群。
  
    另一个使Apusic运行轻便的重要原因在于软件架构的设计。架构是一个软件的灵魂,好的架构将延长软件的生命力,轻松应付各种变化。Apusic的架构在2001年时就已定型,以微内核和多路复用为其核心,历经产品多次重大升级而未影响核心体系,展现了顽强的生命力。相反,如果架构设计不合理,每次升级都要对架构进行调整,势必引入大量冗余代码,使整个产品臃肿不堪。
  
    第三个原因在于代码编写的简洁性上。莎士比亚有一句名言:“简洁是智慧的灵魂”,在科学界同样也推崇简洁性,麦克斯韦方程组简洁深刻,被誉为是上帝谱写的诗歌,爱因斯坦的著名公式E=mc^2更是将简洁性发挥到了极致。程序设计语言不仅仅是为计算机运行而设计的,它也是一种思想表达工具,甚至比自然语言更简洁、深刻、无歧义。我平时很少写文档,因为我认为代码本身就已经表达了作者的思想。当我看到简洁优美的代码时,我认为是在读一篇美丽的诗篇,并为作者深邃奔放的思想所折服。相反,当看到混乱、繁复而无章法的代码时,我相信作者的思想同样是混乱的。


    记者:去年你曾预言J2EE正在迎来一次划时代的变革,关键词是EJB,对此你能再做一次阐述吗?


    袁红岗:J2EE可以说是这几年发展非常快速的一个应用开发平台,这和Java这种灵活、方便、开放、跨平台的语言具有不可分隔的联系。Java是一个讲求实用的语言,所有对应用开发有用的特性都被吸收进来,成为Java平台的一部分,而那些花稍但无实际作用的特性被摒弃。Java的类库丰富、开发社区完善等特色标志着它还将在相当长的时期内保持旺盛的生命力。


    J2EE可以说是在Java平台中应用最为广泛的技术,而且正在逐步走向成熟。JCP组织在总结了过去J2EE实践中的经验和教训,在将来的Java EE 5.0规范中将对J2EE技术做一个相当大的调整,其中最受影响的就是EJB规范。过去EJB给人的感觉过重,而且开发过程复杂,不易维护,因此在实际项目中使用EJB的很少。在EJB3中,EJB的开发方法将彻底改变,不再使用Home, Remote接口等概念,而采取轻量级的开发模式,以Java 5.0中引进的annotation作为EJB描述工具,特别是实体Bean的角色将被重新定位,使其单纯担负起O/R Mapping的作用。所有这些举措都是为了使EJB的开发过程更加简单、效率更高、维护更方便。


    在Web开发方面,Java EE 5增加了新的JSF规范,这是一个类似于struts之类的web开发框架,但比它们更方便。JSF基于事件及UI组件模型的开发方式颠覆了传统的web开发习惯,结合开发工具的支持,将使其更接近于一个真正的MVC编程环境。使用JSF开发表现层现在看起来更象swing编程,基于UI组件的模型能够把web界面定制的很多工作独立出来,厂商可以针对具体的目标定制更多更好用的组件。而我们作为国产中间件厂商,比国外厂商理应更了解国内客户的需求,因此我们的应用开发平台Apusic Studio将成为以JSF为基础的一个强大的web应用开发平台。


 记者:现在很多应用已经转移到所谓的轻量级J2EE方案上去了,比如Spring,已经红了快两年了。现在才推出Java EE 5.0是不是来得太晚些了?怎样预期Java EE对于整个产业的影响?


 袁红岗:在我们主办的“Java俱乐部”地面活动上,也有技术爱好者问及我这个问题,当时我回答到“非官方和官方互相促进,Java EE 5.0来得并不晚”。


 开源社区(往往是非官方标准)代表的经常是理想主义者,而商业公司(往往是官方标准)代表的经常是现实主义者。两者之间有相互竞争的地方,但从长远来看,更多的是一种是相互补充、相互促进的过程。


 Spring及Hibernate等开源框架,已经对Java EE的技术发展趋势产生了非常重大的影响。或者说Java EE的发展,也借鉴并吸取了这些开源框架的一些优秀的思想。从技术层面来看,这反而会使Java EE具有一定的后发优势;同时,这些新技术在业界的广泛使用,总是需要一定的周期,并且,采用Java EE构建业务系统的最终用户,也总是希望能够获得诸多厂商的官方支持与商业标准。因此,从这些方面来看,Java EE 5.0 来得其实并不晚。至于Java EE对于整个产业的影响,可能是J2EE这个概念自诞生以来比较重量级的一次震撼。它所带来的影响是深远的(更多的表现在对J2EE开发过程的影响),但用户自1.4平台向5.0平台之上的迁移,却是平缓的。


 记者:让我们把话题再回到你的心血杰作Apusic Platform产品家族上,有人曾说,国产中间件的出路是专注于某个产品、用单一化的差异优势竞争。以前同样有人讲APUSIC产品线单一,但现在我听说你们马上要推出消息中间件和开发平台,在这里你能否对这两种产品作一点介绍?


 袁红岗:过去我们的产品线是比较单一,仅有一个应用服务器产品,这次我们推出了Apusic MQ和Apusic Studio这两个产品,使产品线有了很大的扩充,形成一个相对比较完整的Apusic Platform产品家族。在这个产品家族中Apusic Studio将扮演一个非常重要的角色。我们知道,各厂商的应用服务器产品都是大同小异的,用户主要根据性能、易用性、售后服务等指标来进行选择。但是仅有应用服务器产品是不够的,还需要一个好的开发工具来支持。过去我们就深受缺少开发工具的困扰,很多用户其实很喜欢Apusic应用服务器,觉得用起来很不错,但开发起来太麻烦,甚至有人先在其他平台上开发,等开发完了再移植过来,这种困扰多少打击了一部分开发人员的积极性。


 在Apusic Studio立项会议上,我们一开始是想为JBuilder、Eclipse等写一些插件,利用第三方开发工具来支持Apusic的开发,但我们最终抛弃了这一想法,决定搞一个和Apusic应用服务器紧密结合的,更接近于应用开发的平台。金蝶集团具有十几年的应用开发历史,积累了大量的经验和教训,在这样的基础上,我们更应该秉承“帮助客户成功”的集团宗旨,不仅向用户提供一个方便、高效的开发工具,更重要的是要在产品中和用户分享金蝶的应用开发经验,以开发思想、开发模式、开发工具、应用组件等全方位的开发平台提供给客户。


 Apusic Studio以Eclipse为基础,不仅具有大多数J2EE开发工具所应当具有的功能,还提供了以XP方法为代表的轻量级开发方面的工具,另外,我们还提供了一些现成的组件,以帮助用户快速构建应用系统。我们知道,在J2EE规范中,将一个应用的开发分解成若干个角色,包括开发、配置、部署、管理等,但实际上,部署、配置、管理等阶段,都是开发过程中必不可少的一个阶段。那么,怎么把这些阶段有机的集成在一起呢?Apusic Studio就是这样一个统一的开发平台,它基于Eclipse技术,通过与Apusic应用服务器的紧密集成,给开发人员提供了一个轻量级的J2EE开发平台。


    记者:最后一个问题说点轻松的,国内很多程序员都曾看过你那篇创下点击几十万的牛帖《程序员的几个基本原则》,那么现实生活中你真是这样生活的吗?比如写累了休息时疯狂打暴力游戏?


 袁红岗:娱乐是为了更好的工作,一个不懂得娱乐的程序员不是一个好程序员