个人简介 毛新生,现任IBM中国开发中心Web 2.0首席架构师。此前他曾任IBM软件集团企业解决方案部大中华区和北亚地区首席架构师与IBM SOA中国设计中心技术主管,在企业级软件方面拥有广泛、扎实、深厚的理论功底和丰富的设计与项目实施经验。
1. 先给我们InfoQ中文站的读者来介绍一下您自己和您现在做的事情吧?
好,谢谢。我在CSDL(IBM中国研发中心)主要是负责Web 2.0的开发工作和研究工作。我们大家都知道说SOA之后,Web 2.0是另外一个很热的事情。在IBM来讲也非常关注,我们怎么样把Web 2.0在企业里面用起来。我们从2006年就开始了,在此之前我是主要是主管SOA设计中心,因为Web2.0很重要,所以这是切换到Web 2.0这边。
2. 给我们简单介绍一下你心目中的Project Zero这个项目吧?
Project Zero是IBM Web 2.0的一个项目,这个项目是非常好玩的。它实际上是它首先采用全新的方式来开发这个软件,所谓的Open Commercial Software。Open Commercial Software就是在社区里面其实还有些争议,大家有非常赞同的,也有觉得这个跟Open Source的精神有所偏离。但是从IBM的角度来讲呢,它是个非常可贵的探索,它代表了这样一种理念。就是说,我们今天怎么样能够让软件的开发既可以有非常好的奉献给社区,同时可以又让公司有利润、有钱可以赚,只有这个样子,我们才会是一个比较可以持续的一件事情,这是很大的一个点。
另外呢,从Project Zero角度讲,它也是一个关于应用的架构,以及应用的形态的一个新的探索。为什么这么讲呢?整个Project Zero它就是一个Incubation(孵化项目),是IBM自己通过我们的投资来做的一个尝试。这个尝试后面一个很重要的理念是说,应用走到今天,我们实际上从Web 2.0的Community看起来,这个软件的形态在发生变化。这个形态上的变化就是牵扯到说我们怎么样去定义应用,应用的整个Style究竟是什么样的?是不是我们这个现有的这个企业里面这些应用,社区里的这些应用就是这个样子的,实际上我们都是有好多变化的。今天大概还没有办法做一个结论,什么样是好的,什么样是不好的,未来究竟展示是什么样子的,但是毫无疑义,我们看到Project Zero在摸索这个非常重要的点,一个就是怎么样采用动态的脚本语言,让这个程序员的工作变得更加的快速和有效,让程序员的学习曲线变得更加的低一些。
第二个是我们怎么样采用REST这种架构的风格,来组织你的应用和组织你的应用群落。REST这个事情我们不需要多讲,大概技术人员对它们都有比较多的、比较好的一个理解。作为一种新的软件的架构,它使得这个应用程序本身非常的轻量级,非常的Scalable,而且很Open。更重要的是说,这样若干个特点将会使得应用程序可以自然而然的构造出来那种开放的、容易整合的,运行起来对资源消耗又比较小的这样一些应用,这是非常了不起的。
另外还有一些,站在这个Web 2.0角度来讲,你看到所带给项目的丰富用户体验,丰富的用户体验以Ajax技术为基础,它其实意味着Web应用的一个巨大的变化。过去这个Web应用,大家都了解,浏览器像是一个哑终端,它用HTML和 CSS来描述这个Presentation层。但是它本质上并不跟3270的Domain Terminal(域终端)有太大的区别,它还是从属于服务器。将每一次用户的交互都送回服务器去处理。有了Ajax为代表的这样一个技术之后呢,浏览器开始摆脱了这个从属的位置,逐渐的变得独立。它从一个独立的可以去部署应用,去运行应用,这样的一个环境和平台,从而导致说浏览器其实可以独立的跟各种各样的这个来自网络中心的服务器去打交道,它使得Web应用的结构本身突然之间发生了一个巨大的变化。这个变化它当然是伴随着丰富体用户验来的,可是它对Web应用从安全,从计算的分割,从逻辑的分割,从结构上的适配,这些若干个方面都存在着巨大的问题,这个是Project Zero所尝试的另外一个方面。
那么综合起来是说,发现Project Zero不仅仅是在技术上来探索这些东西,它同时也在探索,我从一个端到端的角度去看,我们怎么样子将这些技术结合起来使用,使得一个应用从设计到开发,到运行,到部署,到管理,到运营,这若干个层面都是非常的轻量级的。换言之,是省钱的,这后面我们会谈到,你后面有个问题谈到说,这个我们将会做些什么,进一步的谈为什么Project Zero做的那些事情,使得我刚才讲得这个端到端的整个过程当中都变得非常轻量级、很省钱。
3. 那我们有一个比较感兴趣的问题:就是说为什么要把这个项目命名为Zero呢?它有没有一个特别的含义?
是的,之所以讲Zero,就是跟我前面谈的这个精神是互信配合的,我们希望是Zero的Complexity,意思就是说它是高度简洁的,人们前去学习它,使用它,整个端到端的过程当中都来得比较容易。可能今天我们还有些距离,但是你知道事情的进展和发展是需要花一些时间的。第二是说,我们希望它这个Cost是能够比过去要低很多,你部署这个应用、运行这个应用所需要的Infrastructure(基础设施),要比过去更轻量级一些,那么这个Cost会降下来。我们用Zero来形容这件事情,使得用户非常直观的而且具有冲击感的一个感觉,总体上来讲是这样的。
4. 那为什么会选择PHP和Groovy来支持Zero呢?
这是一个好问题,只是这个取决于说,在社区里面,哪些语言比较流行,那我们知道PHP在这个社区里目前来看的话,从动态语言来讲,它应该是最流行的,目前的程序员的量也是比较大的。作为Project Zero来讲,我们刚才谈到了动态的脚本语言作为它的一个重要的成分或者应用,我们不支持PHP是说不过去的透过PHP,这样就使得说这个社区语言,以千万计的PHP程序员可以利用Zero这个平台来开发轻量级的应用,这是非常有吸引力,同时对这个社区来说是件非常好的事情。关于Groovy,Groovy实际上在过去来讲,它发展很快,虽然今天我还没有PHP那么多用户,但是在Java的社区里边,Groovy作为一个极其重要的脚本语言,我想对任何一个Java程序员来讲,这都是件很好的事情。你可以想象一下,PHP的程序员通常难得是Java程序员,而Java程序员通常用PHP来讲,在我的观察里边也比较少,所以对于Java社区里的这些工程师们来讲,Groovy看起来是一个很自然的选择,Groovy通常带来了很好的脚本语言特性,同时呢,还有它又天生的继承了Java的特性,对于Java程序员来讲,这是非常难得的一个好的语言。这是我们为什么选择支持Groovy的一个原因。
5. 那有计划支持其它的语言吗?比如说Ruby,还有像Python这样的动态的脚本语言?
目前从官方的计划来讲,还没有。我不敢保证我们将来有没有,但是有一点我特别希望能够给你讲一下,就是说对脚本语言的支持,以及其它各种各样新的特性的支持,在Project Zero里边来讲,其实都是比较容易的。因为本身,这就是我们前面讲的这个,Community Driven这样的一个开放模式。社区可以在这个基础上,做它们自己的事情,比如说我们现在有一些合作伙伴,有一个CRM的这个系统的开发商,我不方便讲它的名字,但是它们在利用我们这个平台来做它们的事情,它们在增加、扩展这样的一个平台,这些东西将会成为Project Zero社区的一部分,换言之,别的人也将会受惠于这个厂家所做的一些事情。
6. 我们也知道,在这次IMPACT 2008上,IBM宣布了一款名为WebSphere sMash的新产品,我们也知道,它是Zero的商业版,那么这个商业版和现在我们所谈的Zero有什么区别和联系吗?
非常好的问题,Project Zero其中我谈到是IBM的一个Incubation项目,然后它采用社区去开发,同时我也提到说它是Open Commercial Software,所以Project Zero代表的是社区,代表的是大家一起来贡献和开发,大家一起来做,那WebSphere sMash它实际上是Project Zero给这些Technology,尤其是说,当IBM自己开发出来的一些技术的商业化版本。这个商业化版本就是它代表了IBM会对这个商业化版本,进行商业化的运作,进行商业化软件的渠道,技术的支持,以及培训等等。那我们知道,这个Project Zero,它就像像其它的社区一样,使大家自己帮助自己,你可以去Download,你可以去学习,你可以去贡献,但是在那个地方大家基本上是以社区的方式来交互,这是很不一样的。
7. 那么在sMash这个产品里面,它有一个基于浏览器的IDE,那么是什么原因让你们去决定要做一个基于浏览器的IDE,和我们传统的IDE相比有什么优势吗?
这是个非常有趣的话题,至于浏览器这件事情呢,我们花了很长时间才做了决定,事实上我这个小组负责的是这个WebSphere sMash或者Project Zero里面Simple Flow的一些Toolkit。我们做的一部分也是IDE的一部分。在两年前,我们就已经做了浏览器的版本,看起来,这个并不比YahooPipe或者说互联网上的一些很酷很炫的Rich Application有什么差别,都在同一个量级。我们在浏览器上做了很长时间,让我们发现说,原来当我们谈论轻量级的时候,我们还习惯用一个Eclipse去做这件事情,也许重了一些。你去看一看,这个社区里的很多应用,实际上越来越多的人在尝试让人们用浏览器去做一些东西。比如说这个我们看到的Google Application Engine。你可以下载一些文本编辑器来做,但是同时你也可以在浏览器中用简单文本编辑器去做一些事情。不过我们做的这件事情会比简单文本器功能要复杂的多,要高级的多,比如语法的着色,还有怎么对应用进行管理,以及这个应用的启动、停止等等这些功能,所以这些功能都将会跟我们未来这个WebSphere sMash的发展方向相配合,比如说我们会提供这个Hosting,即像Software as a service的方式。
那么在这样的一个情况之下的话,基于浏览器就使得这个程序员可以去做开发,去做应用的部署与管理,这个当然是非常有趣的,也是比较合适的,同时它也是整个Webshpere sMash说,我们希望它和我们这个端到端的轻量级的理念是相吻合的。我想关键的一个技术基础来支持这个决定是因为,还是我们前面谈到Web2.0的进展,使得浏览器本身已经成为一个独立的、应用的、运行的、部署的地方,所以它提供了一个独立的基于浏览器IDE的技术基础。
8. 那么我们知道Zero对Dojo这个框架进行了一个支持,那么我们想问的是,它是否还支持其它流行的JS UI库,比如说ExtJS这样的?
Dojo是IBM自身在社区里面推动的贡献,Ajax的一个Library,所以Dojo作为Zero的一个缺省的支持这并不奇怪。那同时我想提的是说,据目前我提到的整个Project Zero,整个WebSphere sMashp它是基于社区的开发方法,所以人们希望把ExtJS,或者Prototype、jQuery等等这些不同的AJAX Libraries结合进来是非常容易的。因为整体的架构是非常Module的,所以当你用其它的Library去开发你的应用,你可以非常容易的去利用WebSphere sMash在Server上提供的,因为 sMash提供出来的这些接口都是RESTful Style,并不限制你用任何的Ajax Library。
9. 那么我们也知道随着Ruby on Rails的成功,现在市场上出现了很多像Rails风格的Web开发框架,比如说Groovy领域就是GRails,那么和Zero和GRails相比有什么优势吗?
这是一个非常好的问题,其实对我来说也是个非常难回答的问题,我非常希望告诉你说,一二三,它有哪些好;一二三,它有哪些不好。那么在我的理解里面,实际上我觉得它们是这个有着相同的目标,就是我们看得到Rails作为这个就是“不要去重复你自己做过的事情”,这样一个哲学理念,同时它也采用了这个像Convention over Configuration(惯例优于配置)这样的一些各种各样最佳实践。那这些东西你会发现说,在Project Zero里面,在WebSphere sMash里面也有很好的体现,尤其是像Convention over Configuration等等都是非常清晰的在WebSphere sMash里面被使用。那整个Grails在Groovy上来支持Rails这样一个方法去组织和架构你的Web应用,由于Ruby on Rails的成功,所以其实Grails也变得相当的流行。事实上我们看到说,在Rails里面你定义个Model,然后它会帮你处理关系数据库的连接,然后提供相应的这个模块让你去使用。那么在WebSphere sMash里你可以看到有类似功能的Zero Resource Model,你也能简单地定义你的Model,和数据库打交道,做Persistence等也可以做得到。从时间上来讲,开发的速度上来讲,开发一个Rails的应用,一个简单的应用,也许是十几分钟的事情,那么在Zero里面,我也可以用一两分钟给你开发出,所以我不觉得它们在这个简单性、在开发Web应用轻量级这个上面,彼此有太大的差别,我认为它们是不分伯仲的,第二是是说哲学,以及各种各样的在社区里面经过这么多年发展起来的最佳实践,我认为也是类似的,不管是对动态语言的采用,还是说对Rest的支持,你也知道Rails对REST的支持也还不错,看到REST for Rails Application,我觉得这都是非常聪明的选择。然后对这个Ajax的一个自然的支持,比如数据,尤其是对Database Driven(数据库驱动)应用的支持都很好。我觉得这些方面,这二者并没有太大的差别,某些方面我认为Project Zero会好些,某些方面Rails更好一些。
那从另外一个角度来讲,我觉得Project Zero会比它考虑的更多。因为你会发现说,GRails更多的是应用的框架,它本身并不去考虑端到端的故事,从设计到开发,然后怎么去部署,怎么去运行,怎么去运营。这一系列的事情,Rails更多的侧重于说,我有一个应用,那MVC的方式去组织它,然后你定义一个Model,我给你一些必要的Utility,使得这件事情必要的Convention,使得这件事情变得比较容易。当然你如果需要去做进一步定制的时候,其实Rails会给你一些压力,可是在,它在Project Zero里面,首先来讲的话,它着眼点并不是一个某一种类型结构的应用,它着眼的是一个非常通用的平台,在这个平台上你可以做各种各样的应用,换言之说,今天我可以在Project Zero重新构造出一个Rails的框架来,然后你可以在Project Zero上以Rails的方式去做这件事情,但是你只是Project Zero去支持的,一种情况,它可以支持各种各样的情况。比如说我现在纯粹是Ajax加REST style的应用,我们可以支持的很好。而在这样一个基础上,你可以演变出各种各样的模式出来,换言之说,我们实际上需问程序员一个问题,是不是Rails就是唯一的Web应用结构上的方式?我怀疑,很多的程序员都可能会给某一个答案,说,“No,that’s not true.”所以,更重要的情形是说,Project Zero我觉得说,相对来讲,很大的一个区别。打个比方说,我们讲得具体一点,当Project Zero考虑hosting environment的时候,这是一个非常有趣的话题,我们怎么去支持Multi-Tenancy(多重租赁),我们怎么样去支持大型系统的可扩展性,我们怎么样去很好的支持安全性,等等,这些若干个问题出现的时候,这都不是亲爱的Rails想去解决的问题,但是它是Project Zero需要去面对和解决的问题,所以我想那些方面都是很重要的一个差别 。
10. OK,那我们还回到Zero项目本身来去谈一下,我们也知道Zero,它采用的是非常开放,但它不是开源的方式来组织的。为什么会采取这种形式?
前面我已经很诚实的提到这个问题,我希望有一个非常好的,每一个人都喜欢的答案,很可惜没有。实际上,这个里面,一直有一个悖论,就是说我跟中国很多开源,搞开源的一些公司的朋友聊过,他们也都非常的痛苦,就是说今天,我怎么样既通过开源很好的回馈和贡献给社区,同时我又可以生存下去,其实它一直是一个非常艰难的话题,我想我非常诚实。这个话题不光是在开放的社区里面,在努力和奉献的这些可贵的朋友们的话题,同时它也是IBM这样一个,IT行业里面最大的公司一直在思考的话题。IBM在历史上做了无数的开源方面的贡献,从著名的Eclipse到WebSphere Application Server Community Edition,到数据库,到Linux系统的大量的支持,IBM在Open Source方面的贡献几乎涵盖了所有的范围,而且我怀疑它可能是最大的Open Source这样一个捐献者。事实上IBM并没有停止它的脚步,IBM一直还在努力的在开源这个方面,一如既往的在做贡献。比如我们刚才提到了Dojo,IBM其实是Dojo最大的一个贡献者,同时IBM也是围绕着Ajax发起的交互性和规范化方面运动的首倡者——OpenAjax(http://www.openajax.org/)。我不想举更多的例子,我只是想讲有一件事情我们需要严肃的面对,当我们既需要透过Open Source的方式来集合社区的力量,使得我们可以做出非常好的东西,同时使得人们拥有这样一个自由,去得到这些知识,去传播和使用这些知识。但是它可能并不意味着全是免费,事实上Open Source是free software,并不是money free,指的是freedom,你有这样一个自由,追根溯源,其实我们都需要去问这样一个事情,什么样的一个模式可以使得软件这个行业,青春永驻,每一个人都可以很好的贡献,同时又可以生存和发展下去,我想这是在整个这个生态系统里面,每一个程序员都在思考的问题。我不认为今天有谁会给我一个非常完美的答案,但是有一点是非常清楚的,那就是我们需要发挥我们的倡导力寻找到一个合理合适的方式,我们不知道现在做得方式是不是最好的方式,或者是不是未来一定这是一个答案,它是一个探索,是一个尝试,就是为什么我们一直在讲Project Zero是一个孵化项目,这个孵化项目不仅仅是技术,所以请大家不要只是看到它是Dynamic scripting,在讲REST style Architecture,在讲Feed,在讲Ajax。同时它也是在探索软件业新的形态,怎么样去支持Software Service,怎么样去端到端的轻量级,更重要的它也在探索非技术的方面,那就是软件形态和它的商业模式与开发方式究竟将走向何方。我想这是IBM作为一个IT行业的Leader应该去思考的事情,同时我也非常希望我们的朋友们、来自社区的这些个同行们,如果大家有很好的想法,我非常希望有机会跟大家一起去交流,我们完全有这种灵活性,来调整我们的做法,事实上今天的这样一个做法,它在努力的尝试给予这样的灵活性,我们一方面通过Project Zero来给社区足够的开放性,可以去contribute,可以去download我们的开发计划和我们的source code,你可以自由的尝试,但是我们与此同时也提供正规的商业版本,使得我们可以按照常规的商业方式来提供支持、教育和各种各样的后续性的开发。
11. 那么我们知道目前在Zero这个项目上面有两个PHP项目已经能运行,比如说Sugar CRM和PHPBB。那么,我们想问的是,是否所有的PHP应用,目前都能够部署在Zero上面,如果说还不能的话,什么原因?
我是多么的能够希望告诉你这个答案是Yes,但是不是的,它是No。这个原因很简单,目前我们Project Zero支持是在语言这个级别上对PHP进行支持,换言之就是说,你可以,它认识PHP语言,但是我们知道PHP不仅仅是一门语言,它还有非常非常多的,我们称之为Library,非常非常多的这些Library,作为整个PHP runtime的一部分,它们实际上是社区里面无数的这些可爱的朋友们贡献出来,分享出来的。那些东西呢,也是PHP这个语言非常有趣的、有价值的部分,现在我们IBM支撑的力量,就是我们也没有,到现在为止还没有这个能力和精力去做一些PHP Library的支持,你知道很多PHP Library都是用C写的一些扩展的话,事实上Project Zero它是以Java为基础的这样一个运行时间基础,所以做这样的一个移植呢,它需要花费很大的力气的,那么我们特别欢迎社区里面的朋友,大家为第三方软件开发的厂家来所用到的各种各样PHP的Library逐步的做一些必要的移植,使得它们可以在Project Zero的Java环境里面,去做到同样的效果。我想这件事情,应该会在Project社区里面慢慢的发生,比如说SugarCRM,PHPBB,实际上就是第三方的软件厂家它们很认可Project Zero这样一种哲学、设计理念,它们愿意把它们所用到的东西,这样换言之就变成是说SugarCRM做完之后,它的好多东西让社区受益,我们希望看到更多的社区人员加入到这个行业里面来。
12. 那么接下来,我们就畅想一下未来,Zero它的下一步计划是什么?
Zero下一步有非常多的内容,我现在讲几个比较主要的、重要的内容,第一个部分就是关于我们前面谈到的怎么样子让它们运行、运营基础轻量化,这个部分其实我们有一个名字叫做New reality runtime,也不知道怎么翻译比较好,它谈的内容是什么呢,它谈的是说,我们可不可以让Java的虚机非常快速的重启,可以在一台机器上启动很多个实例,然后呢,这样第一是说,我们希望这个Java的虚机呢,运行一个应用就好了,不要运行多个,换言之,我一个虚机运行一个应用,这个变化是很大的,你想过没有,J2EE是一个Container形式的,所以一个Java虚机运行多个应用,对不对?那运行多个应用的话,你会发现对程序员来讲是个巨大的挑战,因为它要有并发的问题,它要有这个怎么样去做区隔,做这个isolation,对内存的访问、对资源的访问、对各种各样东西的访问,这会带来很多的麻烦,然后其中有一个人要是坏了的话,按照俗话所说一只老鼠坏了一锅汤,他坏了,他把内存渗漏了,或者是他怎么样了,然后整个J2EE的stack就crash了。事实上有些东西我们可以从PHP上学习一下,你看PHP要支持一个应用,人,噌,就起来了,很快,毫秒级别就起来了,运行完了,人家就没了,它不需要container。所以对我们讲,这里面有一个观念叫做application as the server,也就是说每一个application是一个独立的应用,它有自己完整的stack,这个应用坏了不影响另外一个,可是这件事情对现有的Java虚机,提出一个巨大的挑战,我们过去的Java虚机,一台机器上启动两个Java虚机就了不得了,在上面run很多很多小应用,大家来分享这个机器,现在突然想说,噢,在一台机器我要run上百个应用,然后每个应用都是独立的,这个是新话题,这是IBM在Java虚机部分希望做的一些优化和改善,从而使得程序员可以拥有一个比过去简化的,多的多的运行时环境,与此同时,这样的一个好处是带来说,程序员可以非常清楚的看到和用到了什么,而不是像container里面,基本上你只是看到这个container本身的这个接口层层面的东西,也看不到container之外的一些东西,那个对你是一个黑箱子,我们大家都有J2EE的一个应用,出了一些问题的时候,我们去调试痛苦的经历,那是不容易的一件事情,因为它意味着你需要对整个J2EE的所有东西都有非常深厚的理解,而且很不幸,那个部分的东西实在是太多了。所以我们讲这样的话,站在我们角度来讲就是说,怎么样就使得程序员看一个相对比较透明的环境,我用到哪些东西,这个东西是怎么运作的,我非常清楚,由我控制,这个实际上也是带来这些simplicity的一个重要基础。换之言说JVM拥有若干个目标,希望使得整体的Project Zero,在轻量级,在编程的简单性这些方面能够提供足够的支持,那个是我们所谈论的New Reality Runtime。与此同时,我们前面谈到过说,Project Zero将会支持Hosting,将还会更加自然而然的支持software as a service的软件模式,今天就我们的中间件来讲的话,要去支持这个Multi-Tenancy还是需要做进一步的工作。
那么,如何使得能够建立一个高度轻量级,高度可扩展,高度Scalable这样的runtime基础,它可以对software as a service这样的一个hosting的环境以及以hosting方式来开发做一个很好的支持,这是我们下一步要继续做的。这件事情其实同时也牵涉到我们怎么样,前面提到,一个new reality runtime怎么做clustering,一台机器进去了,它自己就开始工作,然后怎么样可以开始自己更多的访问的人。所以这些都是Project Zero下一步要去做的。另外IDE,这个IDE将越来越多的更加绚丽的功能,比如Web IDE支持你开发更多的widget,这个widget自然而然的部署在其它的环境和平台之上,这个是我们期望去做的。还有就是说我们的zero resource model,比如说在persistence等等方面的支持。所以总的来讲,Zero下一步将会进一步推进简洁的Scalable轻量级的,这样一个越来越多的Web2.0风格、技术和最佳实践融合进来的这样一个方向去发展。