内容


Geronimo 叛逆者

加入集群功能

对 Jeff Genender 的深入访谈

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: Geronimo 叛逆者

敬请期待该系列的后续内容。

此内容是该系列的一部分:Geronimo 叛逆者

敬请期待该系列的后续内容。

新闻速递!Geronimo 中将加入集群

请先想像一下十个人同时敲打计算机键盘的声音。显然,这些声音来自世界各地,有些在美国,有些在意大利,有些在英国,还有一些来自伪装成欧洲的澳大利亚的计算机键盘。现在想像您自己处在意大利里维埃拉的一个中世纪的小镇,周围是 Southern Maritime 阿尔卑斯的青山环绕,离法国尼斯不远。请想像您在这个小村庄安了家,家中安装了 155 兆的光纤 Internet 服务。键盘的声音飞出窗外,飘到山间,而声音实际来自两个热情的软件开发人员,他们住在这个美丽的地方(Colletta di Castelbianco)编写软件!接下来,再请想像所有这些可爱的键盘声音正在为自由软件做贡献。强大的软件:可以在业务中免费使用而且易于使用。

实际上,您刚刚想像的就是在 Web 应用程序分布式基础设施(WADI)项目上进行的软件开发,几乎其中的所有人物理上都分布得很远,但是他们却一直在为一些世界上最先进的支持集群的软件工作。WADI 和 Apache Geronimo 最近走到了一起,要在 Geronimo 的旗帜下构建一套集群功能。它真正让人兴奋的是,由始至终,在不到三个月的时间内,特性集就被组合在一起并提交到 Geronimo 的源代码树!

在本文中,我将重点介绍集群以及它对 Geronimo 的长期生存之所以很重要的原因。关于集群工作如何完成和对开放源码社区产生什么样的影响,我将提供来自集群的团队负责人 Jeff Genender 的一些内部看法。同时,我希望在讨论中插入一些关于这十个人的个人细节以及他们是如何一起工作的。

什么是集群,为什么要实现集群?

集群 描述了一套应用于应用服务器的技术,它允许一个应用程序的多个实例,通常运行在独立的机器上,相互通信,并在彼此间同步数据,从而提升性能和改善稳定性。直到一个小开发团队决定接受挑战,采取行动把这些特性添加进来之前,Geronimo 一直缺乏集群的功能。他们的奉献很有可能会在本月底发布的 Geronimo 1.0 发行版中形成一套完整可用的特性集。

把应用服务器进行集群化的主要原因是提升它的性能和可用性。集群化的系统可以设计来最大化系统的正常运行时间 —— 这样如果系统的某个节点发生故障,系统中的其他节点可以接管故障节点的功能 —— 或者最小化用户等候操作完成的时间长度,这通常叫做负载均衡

集群技术通常利用快速通信协议,比如用户数据报协议(User Datagram Protocol,UDP)或多播协议。这允许全部集群节点彼此之间快速通信,共享必要的信息,以便它们能够与集群中的其他节点同步当前会话信息。这个通信协议以及与它关联的软件,提供了高度事务性的共享数据空间,它们可以实际驻留在集群中每个节点的内存中。如果共享数据空间发生任何修改,就会在集群中的所有其他节点上进行同样的修改。所以,对于驻留在应用服务器上的应用程序的进展来说,全部节点都会有效地处于相同的页面。如果集群中的任何节点发生故障,那么用户会被重定向到系统中的另一个功能节点,而他或她的会话会继续,就像什么也没发生一样。

最后,在应用服务器中,通常会发现一个与集群关联的共享文件系统。这允许把应用程序的内容迅速地分发到集群中的每个节点,这样每个节点都会运行同一个应用程序。有时,这被称为农场化。与应用程序有关的文件被农场化到集群中的每个节点。

在 Java™ 2 Platform, Enterprise Edition(J2EE™)服务器上,服务器中的许多不同组件都必须执行集群操作。Web 容器 —— 对于 Geronimo 来说,可能是 Jetty 或 Tomcat —— 必须与其他集群节点的 Web 容器协作,共享用户会话信息和负载测量。这种共享提供了良好的共享均衡方式,并降低了集群中的单一节点得到的请求超出它的处理能力的可能性。而且,企业 JavaBeans (EJB)容器需要保证无状态会话 bean 被复制到其他集群节点,这样如果把用户重定向到集群中的其他节点,他或她的应用程序看起来就像与以前正在通信的节点处于同一状态。另一个主要的必需组件是高可用的 Java 命名和目录接口(Java Naming and Directory Interface,JNDI)目录。这个目录是 Java 企业应用程序保存名称和引用的地方,可以帮助应用程序发现它们运行时需要的对象。重要的是,如果集群中的节点发生故障,那么这个目录不要丢失信息,所以通常会把它复制到集群中的每个节点。

根据 Jeff Genender 的观点,如果没有水平的可伸缩性,Geronimo 就不会被大规模采用或进入大企业。他指出,在依赖于 24/7 无故障运行时间和高事务负载的关键任务系统中,高可用性非常重要。这些性能对于让 Geronimo 达到下一个级别是必需的,而且目前是 Jeff 的最高优先级。

Codehaus,开放源码技术的温床

现在我们来看看 Geronimo 团队从哪来寻找合适的组件,向它的应用服务器添加集群功能。团队需要软件来执行集群操作、数据共享等。他们从哪得到软件呢?当然,他们可以从头开始编写这些组件,但是这有悖于开放源码软件的目的:开放共享、在现有的库之上构建。看起来,Codehaus 这个开放源码宿主操作(与 SourceForge 类似)有许多合适的项目。根据 Jeff Genender 的说法,进入 Codehaus 的项目的壁垒更高,这意味着要将项目放在那里的要求更严。而反过来,这就意味着项目的质量通常会更高,而项目也更成熟。这并不意味着在 Codehaus 上开发项目更难。相反,在这里,开发可以迅速而平稳地发展,没有其他软件孵化器中存在的许多官僚作风。Geronimo 项目已经寻找了许多满足他们当前策略的项目。

Codehaus 上一个用得非常多的项目是 Java 消息库,叫做 ActiveMQ (请参阅 参考资料 获得链接),它被用来在 Geronimo 内提供 Java 消息服务(JMS)。而且,在 Geronimo 中当然还用了其他许多 Codehaus 项目,比如 ActiveIO、ServiceMix 以及更新的 WADI。

添加集群功能到 Geronimo

当 Jeff 和我进一步讨论 Geronimo 中的集群时,他清楚地指出了 WADI 项目和它的独特特性,以及他希望这些特性会如何允许 Geronimo 在商业环境中发挥作用。实际上,WADI 项目最近被考虑用于从 Codehaus 移植到 Geronimo 项目中,在其孵化器草案中,详细讨论了这个考虑(请参阅 参考资料 获得链接)。

他的第一个陈述是:WADI 非常独特,因为它允许开发人员在异类环境中进行集群,例如把 Tomcat 和 Jetty 实现集群在一起。他希望也把这点带到其他应用服务器;例如,这样 Geronimo 在它的 Web 服务器集群中就可能拥有 IBM WebSphere® 节点。他认为这是一个新概念,将允许对商业软件供应商满意的公司能够用开放源码的替代品进行集群,从而形成划算的应用服务器农场。这当然会提供一条到开放源码的迁移路径,给 Geronimo 提供优势。

我认为这表现出一个重要哲学的作用,而这个哲学在 Geronimo 的许多替代品中通常是缺失的。Geronimo 的开发人员正在寻找方法,好让他们的应用服务器可能与其他许多产品互操作,而不是只能与最好的应用服务器互操作。按照我的观点,促进合作要比树立一个竞争态势更加重要。

我刚从 Jeff 了解到 WADI 实际上已经提交到 Geronimo 的源代码树。不仅这样,他还确信 WADI 为集群添加的功能将允许 Geronimo 1.0 能够完全支持集群!

会见集群团队

在问完 Jeff 谁正在构建 Geronimo 中的集群特性后,他谈到集群团队以及他们是如何把他们需要发布的各个部分组合在一起的。我想知道在团队中是否会有矛盾,这时他笑了,对我保证说团队中的每个人在一起都工作得很好。在团队中,他们有多人已经是 Geronimo 和 Apache 的参与者,还有许多非 Apache 的人员。他说,负责推进 WADI 集群组件集成进 Geronimo 的领导人正是他本人和 Jules Gosnell,后者因为把 Jetty 放入 JBoss 的工作而著名,目前正是 WADI 的首席开发人员。还记得我前面提到的在意大利阿尔卑斯的城堡式小村庄么?对了,这就是 Jetty 的开发人员 Greg Wilkins 和 Jan Bartel 居住的地方,他们的生活中有周围美丽的乡村风光,也有快速的 Internet 连接。Greg 一年多来一直是 WADI 的提倡者,一直和 Jules 一起工作,确保 Jetty 能够很好地与 WADI 一起工作。

我对 WADI 做了些研究,以便理解它在集群中的什么地方发挥作用,结果发现它主要用来处理 Web 应用程序的分布式状态管理。但是进一步阅读 WADI 的 FAQ(请参阅 参考资料 获得链接)又揭示出他们还在设法把 WADI 与应用服务器的 EJB 层集成在一起。实际上,所有工作几乎就是 OpenEJB 与 WADI 的完整集成。当然 OpenEJB 是 Geronimo 内默认使用的(也是目前惟一的)EJB 容器。

Jeff 详细介绍了这一点,他告诉我 Gianni Damour 负责 OpenEJB 组件的开发,他们期望很快就会集成进 GBeans。他告诉我 Jules 和团队正在把 WADI 分成不同的模块,以处理它所支持的其他应用服务器和组件(例如 JBoss 和 JGroups)的 LGPL 许可问题。这是许可冲突的进一步证明,因为看起来 Apache 软件基金会(ASF)不能(或者更可能的是不会)发行在 LGPL 许可下的组件。所以,他们必须把 WADI 分解成模块,并独立发布它们。Codehaus 上的 WADI 项目继续进行 LGPL 连接器模块的开发。

Jeff 还提示了他和 Jules 未来将要做的工作。Jules 将完成基于网格的分布式缓存的工作,而 Jeff 将负责把 WADI 的 GBean 集成加入 Geronimo。同时,Jeff 已经把 Tomcat 的集群 GBeans 集成进 Geronimo,作为在 WADI GBeans 完成之前让 Web 层实现集群的一个快速解决方案。他说,在最终解决方案就位之前,这可以暂时满足少数急需集群功能的用户。

请等一下,因为有十个人。所以为了公平,我必须在列表中加入 Bruce Snyder、Gianni Scenini、James Strachan、James Goodwill 和 Bill Dudney。这是开放源码参与者和创新者的一个全名星队。

对富饶的 Codehaus 大陆的抢夺

我发现有趣的是:对于为 Geronimo 创建一套集群技术的推动,促进了 Codehaus 中许多开放源码项目向 Geronimo 的潜在转移。这类开放源码合并是健康的。它让更广泛的社区承担这个软件的实现,因此毫无疑问会带来更强壮的软件。

我忍不住要指出的是:JBoss 项目最近也被带入一个 Codehaus 项目,存在于 JBoss 小组的旗帜下。这个项目叫做 Drools,它是一个用来在应用程序内开发基于规则的专家系统的系统。我只能猜测 JBoss 正在考虑增加它的小平台产品数量。我希望这不会带来 Geronimo 和 JBoss 之间在 Codehaus 上大规模的跑马圈地战似的事情。可能不是这样,因为 JBoss 已经选好了许多它的构造块组件。

显然,Codehaus 的人正在做正确的事,他们有这么多优秀的项目,而且还有这样一种需求,要把这些项目变成其他开放源码项目的组件。Bob the Despot(Bob McWhirter)是 Codehaus 之父,他做得真是很好。

结束语

不仅是 Geronimo 团队的键盘,而且 WADI 团队开发人员的键盘这些日子也都被敲得冒烟。所有这些键盘的声音淹没了喷气式客机的声音,这些飞机飞往加州圣迭戈参加美国 Apache 2005 大会,在会上 Geronimo 的幕布打开时,闪烁的 LED 会显示 1.0 的标志。是的,Geronimo 将到达它的第一个非里程碑发行版。它的全部最重要的特性都会就位。就在这个假期,当世界各地的 Java 开发人员都有足够的空闲时间可以下载、编译和尝试一些酷酷的软件的时候,它所有的特性都出现在 1.0 版本中了。我肯定会尝试 Geronimo。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Open source
ArticleID=102765
ArticleTitle=Geronimo 叛逆者: 加入集群功能
publish-date=02092006