Geronimo 叛逆者: Web 2.0 评估报告

来源:百度文库 编辑:神马文学网 时间:2024/04/29 02:48:34
2007 年 2 月 08 日
尽管 Web 2.0 一词的实际含义遭到了普遍质疑,但它仍是计算机行业内最炙手可热的时髦字眼。本月的 Geronimo 叛逆者将避开这些干扰,着眼于 Apache Geronimo 项目,从 Web 2.0 应用程序的构建程序和 Web 2.0 应用程序本身的角度加以分析。
在Geronimo 叛逆者专栏 中,我们已经大量讨论了业内的新生技术,以及 Geronimo 如何让您能够充分利用这些技术。毕竟,最热门的新技术和实践能吸引人去用不就是这些最新最棒的技术的意义所在么?但是若谈及新事物,与任何其他术语比较而言,有一个术语会被更多地提到:Web 2.0。Web 2.0 让公司能以标新立异和远见卓识的形象脱颖而出,而且最重要的是,它表明这些公司绝非 Web 1.0 泡沫破裂的牺牲品。
评定 Web 2.0 就是典型地在对新生热门事物进行探究,如果您觉得这种说法有点太过模糊因而毫无意义,那么您并不是惟一持这种想法的人。事实上,我敢说很多宣称自己公司(或其产品)采用了 Web 2.0 的那些公司实际上并不理解该术语的实际含义。事实上,对该术语实际含义的争论从它产生的那一天就开始了,而且到现在仍未停止。

因此为了避免让我们全都被时髦字眼搞得头脑过热,我认为有必要利用这次机会来讨论术语 Web 2.0 背后的概念并研究一下这些概念与 Geronimo 以及与使用 Geronimo 才得以构建的应用程序之间的关系。
那么,首先我们究竟该如何定义 Web 2.0 呢?最广为接受的定义来自于 Tim O‘Reilly 对于此主题的讨论(有关链接,请参阅本文末尾的参考资料 部分)。让我们结合他定义的如下这七个核心概念来审视一下 Geronimo。




回页首
Web 2.0 应用程序使用 Web 作为平台,这不用动脑筋也能看出来:它的名字里不是清楚地写着么?但这并不像看起来那么明显。应用程序使用 Web 作为平台并不意味着所讨论的应用程序一定就是基于浏览器的应用程序。它只是表明如果 Web 不存在,则应用程序也不存在。
在某些情况下,有些东西还是十分明显的。对于是 Web 站点的 Web 2.0 应用程序,Web 肯定是它们的必备部分。但是对于那些虽不是 Web 站点但却使用了 Web 架构的应用程序,又该如何呢?例如,一个经常被提及的 Web 2.0 应用程序是 BitTorrent,它不是 Web 站点而是一个对等文件共享应用程序和网络。BitTorrent 使用 Web 架构来实现其功能。在后台大量使用 Web 服务的应用程序也可以被认为是使用 Web 作为平台。
认为 Web 2.0 应用程序的突出特征是以 Web 为平台,实际上也揭示了它所不 具备的那些特征。Web 2.0 应用程序不依赖于单独的大型安装或专门的硬件。事实上,虽然在这里做这样的讨论看上去有点不合适,但我还是要提一下在许多方面 Web 2.0 应用程序这方面的特性都展示了 Web 应用程序的民主化。换言之,Web 2.0 的目的就是要将所有人都包括进来,而不仅仅只是少数特权者。
要描述此概念往往会涉及另一个时髦字眼(或者恰当地说,热门词汇):长尾。该词汇源于 Bell 曲线的概念,在 Bell 曲线中,从表面上看,大部分操作应在中心巨大的凸起部分发生。然而实际上,大多数数据点会落于边侧的范围内,远离中心(或在这种情况下,落于右侧,远离凸起部分),如图 1 所示,该图引自 Wikipedia 中的相关讨论。

请看下面的情况:很多美国人都喜欢看足球比赛作为消遣。相对而言,喜欢其他消遣的人数很少(例如冰壶或养骆驼)。这样看来,如果要寻找最大的观众群,您只有跟踪喜欢看足球的人。但是,如果把所有对其他消遣(例如冰壶、养骆驼、参加慈善活动、看电影等等)感兴趣的人数都加起来,您将会获得更高的数字。惟一的区别是这些人群的兴趣不在一处。
Web 2.0 就是要充分利用长尾理论,或者像 Tim O‘Reilly 所说的那样,从边缘做起而不只侧重于中心。在这种环境下,即使您的兴趣仅被世界上其他 13 个人共享也没有关系,因为还有一个社区在支持您。
那么,Geronimo 又是如何回应这些标准呢?作为 Web 应用服务器,Geronimo 当然要使用 Web 作为平台。就从边缘做起而言,Geronimo 是一个免费的 Web 应用服务器并且任何人都可以安装。这样一来,您无需一个大型社区来证明其使用是否正当。我敢说使用了 Geronimo 的大多数项目都很小,如果长尾项目要求在软件上投入数万美元,那么这些项目很可能永远无法得见天日。
这种概念还可推广到由 Geronimo 启用的应用程序中。由于任何人都可以使用 Geronimo,因此任何人都可以基于它构建应用程序,而不管该应用程序是否需要一个大型社区来证明其存在与否。




回页首
Web 2.0 应用程序的另一个特性是利用集体智慧。这句话意味着越多的人使用应用程序,它就会变得越好。例如,当您注册了 Netflix 影片租赁服务后,站点在向您推荐影片时,不仅会考虑您个人的喜好,而且还可能会参考其他访问者的喜好。换言之,如果您说自己喜欢星球大战 系列影片,则站点可以根据大多数喜欢星球大战 系列影片的人也喜欢印第安纳.琼斯 系列影片这一事实,向您推荐印第安纳.琼斯 系列影片。当然,参与到此系统中的用户越多,您获得的数据就越好。
实际上,Web 2.0 的另一个原则是默认参与的理念。换言之,只有少量与站点进行交互的人会积极地参与。这是事实。以 Amazon.com 上的评论为例。它们对于网站和用户都很有帮助,但只有少量访问者会撰写这些评论。另一方面,您每执行一次搜索或者(甚至更好)在站点每购买一次商品,都在加深站点对购买模式及其背后的集体智慧的理解。
在某种意义上讲,开源项目想当然就可以利用此概念。越多的人使用,项目就运行得越好,因为 bug 会被找到并修正。作为一个开源项目,Geronimo 满足此标准。您可以将 Geronimo 用于核心内容而无需修正任何 bug。
就使应用程序可以利用集体智慧并与 Java? 2 Platform, Enterprise Edition (J2EE) 完全兼容而言,Geronimo 为此类应用程序提供了所需的全部功能,因此在这方面,Geronimo 也没问题。




回页首
如果经过先前的讨论,您现在有了这样一种概念:数据对整个 Web 2.0 概念十分重要,那么您是绝对正确的。实际上,有时候 Web 2.0 看上去好像更关注于数据本身而不是对数据采取的操作。这也许是整体灵活性的问题,也可能是 Web 2.0 应用程序利用集体智慧的结果。在任何一种情况下,这些标准背后的理念是 Web 2.0 应用程序在很大程度上依赖数据,而且数据最好对于应用程序来说是惟一的,这使市场的各个领域(例如个人身份、公共日历)都陷入了绝境。
O‘Reilly 举了图书和产品信息的示例。Amazon.com 和 Barnesandnoble.com 都从同一个数据集开始 —— 行业书籍数据库 —— 但是 Amazon.com 不断直接和间接地向该数据集中添加信息。不仅如此,Amazon 还添加了几十万的非书籍产品,因此如果某天您需要在您的博客上引用某一产品,您很可能就会包括一个指向 Amazon.com 的链接。应用程序将 Amazon 标准识别码(Amazon Standard Identification Number,ASIN)即 Amazon 版本的国际标准书号(International Standard Book Number,ISBN)作为标准产品标识符的日子应该也不远了吧。
就这条标准而言,Geronimo 本身并不太多关注于数据,因此它在这个范畴内的表现不佳。但是 Geronimo 的确具有直接在应用服务器内创建 Apache Derby 数据库的功能,因此我认为在帮助启用这类应用程序方面,Geronimo 还是值得赞扬的。




回页首
Web 应用程序的优点之一是能够即时做出更改。换言之,如果您在某个中午发现应用程序有 bug,就可以修正它。您可以在开发环境中测试修补程序,然后部署,到下班之前,即可完成这一切。就这么简单!如果您习惯于 Web 环境而不是传统的桌面应用程序,那么对您来说,这样的处理顺序和过程非常自然。但是,如果您具有传统的软件编程背景,则这种随意编码的态度将是您所不能容忍的。
现在,在传统的软件开发环境中,更改都是通过不断推出发布版来实现的。发布版可能每几个星期、每几个月就有一个,如果是特别大型的软件,可能每几年发布一次 —— 但不管怎样,发布新版本都是大事。事实上没必要一定要这样做事,Web 2.0 就利用了这一点。如果开发了一个新功能并且已准备好投入使用,为什么还要等,而不让用户立即使用呢?事实上,Web 2.0 应用程序在一天内发布若干次新功能的情况十分常见(因此有了永久测试版 的说法)。
在这一方面,Geronimo 打了个擦边球。由于它实际上不是基于 Web 的应用程序并且用户必须不断地下载新应用程序才能获得其益处,因此它需要有一个实际的软件发布周期。在一个 Web 应用程序(包括通过 Geronimo 构建的那些应用程序)中,只要 Geronimo 一有新的发布,所有用户就会自动收到新代码的优点。但是这并不意味着 Geronimo 用户受限于其发布周期;作为一个开源项目,专业用户随时可以到 apache.org 查看源代码的最新版本。




回页首
如前所述,数据是 Web 2.0 应用程序的重要部分,与之有关的一个概念是要能够访问该数据且访问不必非要通过主应用程序。mashup 是从 Web 2.0 得来的,一个应用程序包含其他应用程序的数据,而这个应用程序又可被并入第三个应用程序。例如,如果您有一个提供各种酒店信息的站点,您可能会在网站中包括一张配有用户注释的该区域的 Google 地图。一个旅游站点可以通过利用轻量级协议 —— 例如基于 Representational State Transfer(REST)的 Web 服务 —— 来利用您的酒店信息。
这种能够混合搭配应用程序的能力是 Web 2.0 的特点之一。事实上,如果您认为用户无论通过您的网站还是通过他人网站使用您的数据对您来说都是件好事,那么您可能就需要设计应用程序使其易于其他用户介入。
Geronimo 通过两种不同的方法来满足这个条件:就应用程序本身而言,应当采用模块化设计,从而使每个人都可以添加扩展、GBean 等等,即使应用程序并不提供可在其他地方使用的数据。另一方面,Geronimo 能够运行 Apache Axis2 软件包,它让您可以轻松地提供简单对象访问协议(Simple Object Access Protocol,SOAP)和数据的 REST Web 服务,因此能够很好地让您在自己的应用程序中使用此功能。




回页首
Web 2.0 的另一个原则是虽然应用程序可能使用 Web 作为平台,但这些应用程序并不受限于台式机上的浏览器,甚至根本不受限于任何浏览器。O‘Reilly 给出了 iTunes 作为示例,它不但是 Web 上的一个应用程序,而且还是从音乐文件扩展到 iPod 的整个架构。请记住,Web 2.0 致力于技术的民主化;这种概念既然适用于人,就没有理由不适用于设备(是的,您需要有一个 iPod 才能脱离浏览器运行 iTunes,因此这与民主化观点有点背道而驰,但从技术的角度来看,至少它是可行的)。
将来将数据扩展到无所不能的程度的另一个术语是无所不在的 Web 或无缝 Web。个人来讲,我更倾向于我在此提出的术语分布信息,归类到分布式计算中。
本质上,这些术语意味着 Web 2.0 应用程序应当在任何可能的位置(可以是浏览器、移动电话或汽车的仪表板)都可用。作为一个 Web 应用服务器,Geronimo 当然是被设计用于运行在比移动电话大的设备上的,但是理论上它可以运行于具有足够容量的任何设备(使用 1.1 版,您可以下载 Geronimo 的 Little G 发布版,它占用的空间更小,但没有 J2EE 证书)。这已经是幸事了,因为它能够使自己嵌入到非 Web 应用程序中,但是以这种方法实现应用程序违反了用 Web 作为平台的要求。




回页首
最后一个标准是丰富的用户体验。热门词汇 Web 2.0 和 Ajax (Asynchronous JavaScript + XML) 几乎是同时开始流行起来的,因此可能很多人应当会很自然地认为它们完全是一回事。Ajax 可提高 Web 页面的交互性,方法是使用户可以请求新信息而不刷新整个页面。这些技术实际上已经存在多年,但直到去年它们才差不多能够方便地被使用。Google 用 Google Maps 应用程序证明了 Ajax 技术的有效性,展示了当整个应用程序可以显示在单个页面内(进而在貌似单个的浏览器请求的内容内)时所能进行的操作。
但是创建 Web 2.0 应用程序不仅需要启用了 Ajax 的 Web 页面。关键是要能以最简单的方法创建有价值的应用程序。比如,在页面的一侧创建列表并在用户单击该列表中的链接时更新页面的另一侧。又如,在用户需要数据之前先透明地请求数据并使用户可以在页面内任意移动,正如在 Google Maps 中所做的那样。不管怎样,这都将意味着提供一种能让用户参与的用户体验。
Geronimo 在根本上是一个服务器端应用程序,因此除了管理页面以外,没有客户机前端需要评估。在另一方面,Geronimo 提供了创建 Web 服务的功能,这些服务可由这些丰富的用户体验来调用。




回页首
现在,让我们来回顾一下这次讨论在评估 Geronimo 及可用 Geronimo 构建的应用程序方面为我们提供了哪些提示。从能否冠以 Web 2.0 之名的角度考虑,Geronimo 可能只能得 C+。但是这很糟糕么?只有当您指望用 Web 2.0 这一热门字眼来吸引大众的时侯,才会显得十分不利。而这正是问题的关键。Web 2.0 是一个概念,一个有待讨论的东西。它并不是所有应用程序都必须遵守的固定内容。如果 Geronimo 不是 Web 2.0 应用程序会有什么差别?一点也没有。重要的是 Geronimo 让您可以从中构建 Web 2.0 应用程序。在这方面它完全可以得 A,并且这才是真正至关重要的。
Geronimo 绝不仅仅限于其概念本身,它所代表的是用 Geronimo 能够实现 的功能。