Web 2.0——泡沫下的啤酒——SOA的润滑油

来源:互联网 发布:office mac 2011破解 编辑:程序博客网 时间:2024/04/28 22:27

  .COM泡沫刚刚崩溃的时候,业界哀鸿遍野,很多人预言,互联网产业将一蹶不振。然而不出三年,互联网经济就在Google、Flickr、MySpace、Diggs、Youtube等新秀的带领下迅速恢复元气,梅开二度。这种现象在人类的经济活动史上是非常罕见的,“何兴之暴也”,人们需要一个解释,于是O’Reilly Media的编辑Dale Dougherty不失时机地提出了“Web 2.0”这个新名词。随后,越来越多的概念被冠以“Web 2.0”,从搜索到tag,从博客到社会网络,从Ajax技术到REST体系结构,纷纷被视为Web 2.0特征。可惜几年过去,成功的网站就那么几家,更多的模仿者并没有获得预想的收益,于是,人们纷纷开始预测,Web 2.0的泡沫即将崩溃。
        Web 2.0的泡沫是否即将崩溃,并不是本文的话题,事实上也我们也不关心。我们关心的是问题的另一个方面,Web 2.0的泡沫下面,究竟有多少啤酒?第一次.COM泡沫的崩溃尽管让很多人痛心疾首,但在1990年代后半期的投资高潮确实给公众和企业的IT基础设施带来了划时代的进步,更使整个软件产业的面貌发生了根本的变化。这些实实在在的功绩,是不容抹煞的。著名的IT评论人方兴东曾经说过,就算.COM是泡沫,也是史上效益最好的泡沫。现在,我们的眼睛盯着Web 2.0。这个已经不新的概念,在不到三年的时间里,已经给我们的观念和实践带来了巨大的变化,引起世界足够的关注,也催发了可观的资本泡沫。现在我们要问,Web 2.0泡沫的效益如何,它的下面究竟藏着多少啤酒?

统一软件运行平台

        要理解Web 2.0带来的变化,首先要知道什么才算是Web 2.0。这实际上是个很困难的问题,其答案取决于你问的是谁。投资者会告诉你Web 2.0是Gmail,是Google AdSense,是MySpace,是Facebook,是Youtube;文人会告诉你Web 2.0是社会网络,是人本主义,是用户中心化;埋头于日常开发而无暇展望未来的程序员会说Web 2.0是Ajax,是REST;而具有前瞻力的技术领袖则告诉我们,Web 2.0是软件的统一运行平台。
        所谓平台,就是对应用程序提供支持的软件基础,具体的说,平台由大量完善的编程、操作接口以及实用工具组成,能够让开发者通过轻松的调用获得非凡的功能。每一个在POSIX、Win32、J2EE和.NET上做过开发工作的程序员,都很清楚平台的意义和重要性。在Web 2.0之前,我们已经经历了两代运行平台。在1990年代之前,主流的软件运行平台无疑是单机操作系统及其开发支持环境,而当计算机网络出现后,本地实现起来很困难的工作,却可以通过网络轻松地交给远程的机器完成。这就使得网络变成了一个越来越重要的平台。传统的网络,一是规模有限,二是协议和标准繁多且互不相通,因此限制很严重。人们很早就设想在遍及全球的最大的网络上,使用一种最普遍的通用协议,为所有联入的计算机提供无以伦比的丰富功能接口。毫无疑问,这将是一个伟大的软件运行平台,值得人们向往。全球最大的网络,无疑是Internet,最通用的互联网应用协议,无疑是HTTP,而使用HTTP协议的应用,就是Web。显然,Web是实现上述伟大平台的最理想候选人。
        然而一直以来,Web被当作一个文档内容的分发网络,在Web中传来传去的,大部分是HTML文本,一种被浏览器解释渲染排版后才能被人所阅读理解的语言。因此,要让Web作为机器之间、应用程序之间相互交流协作的平台,就必须在Web中传递程序和数据,而使得这种传递成为可能的技术体系,我们成为Web服务
        通过Web服务暴露编程接口,并非Web 2.0时代的发明。自2000年起,微软等业界巨头即开始积极推行基于SOAP、WSDL和UDDI的WS-*架构。他们的目标是伟大的,行动是积极的,在不到8年时间里,WS-*已经发展出三十多个协议。但是很奇怪的,社区的反应却并不令人满意。曾经有一位SOAP协议的拥护者事后回忆说,他曾经认为Web服务在2003年就应该统治互联网,但是结果却几乎什么都没有发生。对此,2000年获得博士头衔的HTTP协议起草人Roy Fielding在其学位论文中间接地给予了解释。原来HTTP在设计时,已经考虑了作为全球分布式应用系统协议的需求,也就是说,HTTP不仅仅是一个传输协议,而且是一个相当完整的应用协议。而WS-*却没有洞悉HTTP作为应用协议的能力和优势,而是简单地将HTTP作为一个传输协议,在其上完整地重建了全部应用层机制。不但如此,构建这些应用层机制时,过多考虑了企业计算的需要,从而实现得比较复杂繁重,失去了HTTP协议简单高效、可缓存、可伸展性好的天生优势。
        随着Web 2.0的崛起,Ajax带来了客户端体验的划时代进步,而被称为REST的新的Web应用架构,实现了HTTP风格Web服务的文艺复兴。Web 2.0时代的Web服务是这样的:完全符合Web标准,充分利用HTTP协议的特点,通过REST风格暴露服务,支持Ajax/RIA异步数据传输和界面刷新机制,使用Syndication机制推送数据,以XML表达丰富的、具有初步语义信息的数据,并可方便地被mash-up。
        现在的局面已经非常清楚,在企业应用当中,WS-*还将长久地存在,但是在面向消费者的公共互联网领域里,2.0风格的Web服务将毫无疑问地取得支配地位。随着诸如在线存储、搜索、地理数据、文档等基础服务的2.0化,Web作为软件平台的一面将越来越明显,软件开发的概念将逐渐演变为制造Web服务和整合Web服务。
 

 

  企业应用就是支撑企业运营的软件系统。纯粹从编程技术上来看,企业应用的开发通常是平淡无奇的,既没有高超的算法,也不涉及精妙的底层炫技,然而企业应用之难却是业界公认的。企业应用需求多变,业务逻辑复杂,工期紧张,对分布性、整合、性能、可靠性和可监管性要求甚高,构成企业应用之难的根本原因。然而,当前我们采用的基于构件的软件思想与业务层面距离过大,各技术流派之间难以整合,这些偶发复杂性加剧了企业应用的难度。
        SOA正是试图从这两方面来降低企业应用开发和运维的复杂性。首先,SOA以服务为基础。这一概念既可以作为描述业务的元素和语言,也可以在技术空间得到直接的表达,从而成为沟通业务与技术的桥梁,也缓解了技术与业务之间“阻抗不匹配”的困难,使得IT能够随业务需求灵活应变。其次,SOA通过标准化的、跨平台的技术规范,使得运行在不同地点、不同环境中的服务能够被统一调配组装,从而在业务流程上实现整合。
        SOA的愿景非常壮观,然而要落实到位,还有一些具体问题需要解决。首先,SOA的思想与实现无关,但是SOA的解决方案一定是实现相关的。从概念上来说,Web服务、CORBA甚至DCOM都可以作为SOA的实现基础,那么究竟应当采用何种技术架构来实现SOA,这是第一个问题。其次,不同的技术体系所实现的服务之间,必须能够互相操作,这就需要统一的技术规范来协调,这是第二个问题。SOA带来了企业应用架构的根本变化,也将导致具体技术产品和风格的重大变化,XML上升为核心数据模型,文档的地位越来越重要,给数据的存储、查询、快速处理和应用的扩展性带来了巨大的挑战,需要新的架构、产品和工具。如何应对这些技术层面的挑战?这是第三个问题。SOA强调组合应用,要求服务可以组合为应用或新的服务,而应用本身也可以视为数据和服务,从而成为组合的基础。那么在什么样的基础之上、以何种方式实现这样的组合应用?这是第四个问题。
        Web 2.0的技术浪潮给SOA带来一些新的思路。Web是天生的标准化、高效、高度可扩展的分布式文档系统,通过Ajax/RIA表现出丰富的人机交互界面,mash-up是构建组合应用简单而理想的方式,而且mash-up所生成的新应用本身有可以作为XML数据源而成为新组合应用的基础,这些都与SOA的目标惊人的一致。能否将Web 2.0的技术根据SOA的需求加以整合改造,从而形成一个轻量级的SOA技术栈呢?这是一个很自然,同时又令人心驰神往的境界。APP(ATOM Publish Protocol)协议已经具备了丰富的数据操作能力,XQuery语言也已经成为W3C正式标准,有人提出要给REST架构添加一个类似WSDL的服务契约描述协议,也有一些企业正在研制完整的Web Oriented Architecture技术栈,将Web技术引入企业IT领域。
        Web 1.0给企业应用带来的变化是巨大的,所谓B/S模型现在已经成为企业应用的绝对主流。但是从根本上讲,Web 1.0没有触及到企业应用的核心问题,只是给企业应用安装了一副脸面。能够深刻改变企业IT的是SOA,而Web 2.0又恰好与SOA形成默契的搭档。我们相信,Web 2.0不但将成为企业应用的新面孔,而且成为SOA的润滑剂,会深入到SOA当中,深刻改变企业应用的开发思路。

在Wintel的黄金时代,微软和Intel彼此成为了对方产品的最强有力的推销者。每当安迪格鲁夫把CPU主频提高一个MHz,比尔盖茨就会想办法发明出新的应用特性去吃掉这一个MHz。这样的绝佳组合持续了很多年,然而最终还是硬件占了上峰,当CPU主频上升到1.5GHz以后,软件似乎想不出什么新的招数来唤起人们对更高计算能力的渴望了。然而Intel和AMD并没有就此住手,64位体系结构、双核、四核乃至更多核CPU被不断发明出来,硬件速度飞奔向前,软件显得手足无措。怎么办?难道让用户的计算资源和投资闲置?Web 2.0给出了一个回答。Web 2.0互联网应用在技术上有两个重大特点,一是超大规模用户量带来的超大规模数据,二是基于超大规模数据和新的应用模型的超大规模计算。两者都需要强大的计算资源支撑。
与Web 1.0不同的是,Web 2.0不再认为键盘后面的可以是狗,不再把互联网当成是一张张冷冰冰的网页构成的死气沉沉的文档系统各,而把数据后面的人发掘出来,把所有的用户都视为大写的、有感情、有个性、受尊重的人。Web 2.0通过多种手段收集用户的信息、偏好和使用习惯,并且在这些数据之上实施大规模的协同计算,以获得宝贵的统计性知识。这些知识是企业得以傲然独立的根本,是企业能够进一步发展的基础和动力,是竞争对手夺不走、打不掉的核心知识财富。因此,Web 2.0的领袖们说,“数据是新的Intel Inside”,数据就是企业力量。当你在任何地方看到Google AdSense提供的赞助商链接时,你就能体会到数据的力量。
        然而提供这样规模和质量的数据,需要巨大的计算能力。任何一个大型规模的网站的用户量都远远超过世界上最大企业的员工数量,而Web 2.0要求我们从每一个用户那里充分获得各种必要的信息,这就带来了海量的数据,而从这些海量的数据中快速获得有用的统计性信息和知识,对于计算来说更是规模惊人的任务。
        Google的成功实践表明,采用大量普通PC组合而成的超级计算机集群,是应对Web 2.0海量计算挑战的最具成本优势的解决方案。而每一个计算单元都对于充分发挥计算能力提出更高的要求,多核的每一点计算能量都必须被榨出来加以充分利用。于是,我们看到,在Web 2.0核心服务的开发这者群里,对于如何充分利用多核计算威力的话题最为关注,从Win32线程到IO Completion Port机制,从POSIX线程到epoll/kqueue等并发编程接口,从Java 5的concurrency库到Intel的VTune工具,甚至于Google的MapReduce算法和Erlang的革命性的并发编程模型,都是热议的话题。毫无疑问,Web 2.0应用已经成为推动计算能力进一步发展的最重要的源动力之一。

 

近年来在程序设计语言领域最令人兴奋的事情,无疑是动态语言的崭露头角。随着Ruby on Rails的成功,人们见识了动态语言强大的抽象构造能力,而PHP更是以其轻快高效占据了Web开发的半壁江山。Javascript随着Ajax的兴起而跃升为最重要的编程语言之一,而被Python的简单优美所吸引的人也不在少数。动态语言全面爆发,已经不是一个预言,而是一个现实。
无须细致的分析,我们便会发现,Web 2.0无疑是动态语言最大的舞台,而语言工具的革新将给软件开发的方方面面带来巨大的变化。开发过程将确定无疑地走向敏捷,开发工具会越来越智能,而开发思想也会越来越灵活,限制越来越少。
动态语言的整合正在迅速地进行。目前至少在.NET CLR、JVM和Parrot三个平台上存在着将动态语言全面整合的努力。特别是在.NET与JVM平台上实现动态语言的努力,将新的强大的语言表达能力与丰富的平台资源结合起来,令人兴奋。
另一个必然会发生的事情,是XML进入语言的核心数据类型行列。Web 2.0和SOA都将XML作为核心的数据表达方式,今天通过XML API来操作XML数据的方式显得过于笨重,不符合时代的需要。微软已经通过Linq技术在C# 3.0和VB9中加入了对XML直接查询的强大支持,而Groovy和Scala更是将XML作为原生数据类型,使得对XML的操作、表达和生成能力达到了前所未有的高度。动态语言在支持XML方面具有良好的潜力。
我们可以设想有一天能够在统一的平台上用自己喜爱的、具备强大表达能力的动态语言开发Web和企业应用,毫无疑问,在这样一个理想世界里,软件开发将变成令人愉悦的创造性工作,而其效率也将大大提高。尽管这一切过于理想主义,但是在Web 2.0这个大舞台上,一切都在正确的方向上发展

总结

以上我们从四个方面总结了Web 2.0对软件开发技术的实质性推动。即便有一天,当Web 2.0已经不再时髦,它所带给我们的这些变化也仍将深刻影响软件开发的实践。这些变化之全面深刻,在我们开来,足以将软件开发引领到一个新的阶段,对于这个阶段,不妨命名为软件开发的2.0时代。此时此刻,我们所需要做的,就是深入地理解这些变化的意义,并亲身参与其中,推动技术的发展。
 
                                                                                          

原创粉丝点击