近年来,移动客户端和社交网络等成为新趋势,迫使 Web 应用程序处理越来越多的并发连接。这导致了一种基于事件和异步的新服务器架构的出现,已经用在 nginx 和 Node.js 中。2011 年,Tim Fox 开始了 Vert.x 的开发,它是该结构的一个多语言 JVM 变种,允许开发人员在一个应用程序中混合使用 JavaScript、Groovy、Java 和其它语言构建系统。
最近, Vert.x 2.0 发布,为了了解它有哪些新内容,InfoQ 与 Tim 取得了联系:
InfoQ:您能跟我们谈一下这次 Vert.x 更新有哪些关键特性吗?
Tim Fox:Vert.x 2.0 有许多新增和改进的内容,但我重点介绍几个主要方面:
首先,我们对核心 API 进行了广泛而全面的审查和清理,包括增加了许多社区要求的新特性,使这套 API 更好、更一致而且更有用。
其次,我们创建了一个更加模块化和可扩展的 Vert.x。通过引入一个功能强大的新模块系统,它的许多功能现在以模块形式提供,这包括所有的语言支持——核心 Vert.x 项目只支持 Java,其它语言的实现都是以模块形式提供——所以,开发人员只需要安装他们需要的模块。
Vert.x 现在更轻量级、更简化——它的分发包只有 4.5MB。之所以引入该模块系统,是因为我们希望以此鼓励在社区以分散的方式创建 Vert.x 模块生态系统。我们还花了大量时间简化类加载系统,使它更高效,并且在应用程序之间共享资源更简单。
第三,我们集中精力简化了使用 Vert.x 2.0 的开发。它提供了一个 Maven 原型,使开发人员可以轻松地创建和开始一个 Maven 项目。对于 Gradle 用户,它提供了一个 Gradle 模板项目。它还提供了一个测试框架,允许开发人员编写 Vert.x 测试,该测试跟 JUnit 测试类似,但在 Vert.x 容器中自动运行。
我们还集中精力提升 IDE 的用户体验,希望它能尽善尽美——开发人员现在可以在他们最喜欢的 IDE 中运行、调试和测试 Vert.x 模块,而且不需要任何专门的配置或安装。我们还增加了另一个令人愉快的特性,正在 IDE(或者文本编辑器)中运行的 Vert.x 应用程序可以自动重新部署——所以现在开发人员修改 Vert.x 代码或者其它文件,无需任何构建步骤或手动重启,就会自动引发正在运行的应用程序重新部署。
InfoQ:Vert.x 支持新语言吗?语言设计人员要使他们设计的语言兼容 Vert.x 是否可能?
Tim:除了 Java 是 Vert.x 核心项目的一部分外,其它所有的语言实现都是以模块形式提供,这是使 Vert.x 更加模块化的一部分。任何用户只需创建一个新的模块,而且根本不用修改 Vert.x 内核,就可以在 Vert.x 中轻松地创建新语言支持。还有更多关于如何做的信息。这种做法使Vert.x 中所有的语言开发可以分散进行。当前,有团队正致力于为 Scala 和 Clojure 提供支持——这方面的开发非常先进。
InfoQ:根据您的观察,Vert.x“最喜欢”什么语言?
Tim:似乎很多 Vert.x 用户是来自现有的 JVM 用户,他们厌烦了当前的应用程序平台,希望尝试一种不同的方法。有些人对在 Vert.x 中使用 Java 和 JavaScript 有极大兴趣,还有一些人则非常愿意在 Vert.x 中使用其它语言,如 Groovy 和 Ruby。
对于 Vert.x 的 Java 用户来说,Java 8 是个好东西。它引入了 Lambda 表达式,调用异步 API 简单了许多。我也非常期待对 Scala 和 Clojure 的支持,这将使我们拥有一种方案,解决其它应用程序平台上正在由 Java 转向 Scala/Clojure 的 Java 开发人员的问题。
InfoQ:我们谈谈 Vert.x 背后的模块系统。现在有多少模块?是否能使用 npm 库中的 JavaScript 包?开发人员贡献模块难度有多大?
Tim:这个模块系统还非常新(只有一周),所以还不能期望它有像 npm 库那样多的模块。但是,Vert.x 模块系统的工作原理与 npm 不同——它没有提供一个集中的模块库,而是允许开发人员使用其它著名的模块库,如 Maven 中心库和 Bintray,Vert.x 正好支持它们。
模块系统背后的想法是授权 Vert.x 社区创建和共享模块,避免集中开发控制太多所产生的瓶颈。
Vert.x 还提供了一个模块注册表,用户可以注册他们的模块,其他人可以查找,但这些模块并不会真的存储在那里。用户并不是一定要在注册表中注册他们的组件——那样做只是为了使其它人查找更方便。
Vert.x 目前还不支持 npm 库,但我们可以考虑增加对它的支持。有个团队正致力于提供对 Node.js 的嵌入式支持(例如,API 兼容性)——这是一个极大的特性,用户不需要做任何修改就可以在 Vert.x 上运行 Node.js 应用程序,并且提供了一个入口,可以通向更好的 Vert.x 多语言世界。也许当它发布的时候,会有助于 Vert.x 支持 npm 库。
InfoQ:一个简单的问题……我为什么要越过 Node.js 选择 Vert.x?
Tim:有很多理由,而且常常都不必动脑筋去想。Vert.x 可以做 Node.js 能做的任何事,甚至更多。所以,如果你正想用 Node.js 开发一个应用程序,那么 Vert.x 肯定值得考虑。我将详细描述 Vert.x 超过 Node.js 的几个方面:
一方面是性能——对于很多应用程序,Vert.x 可以在性能上轻松击败 Node.js。与 Vert.x 1.x 相比,Vert.x 2.0 有许多性能改进(在许多基准测试中,它都比 Node.js 更快),而且还充分利用了 JVM——一个无与伦比的虚拟机——的能力。我们还与 Netty 团队密切合作——事实上,作为 Vert.x 核心开发人员之一的 Norman Maurer 也是 Netty 的核心开发人员。Netty 4.0 用在了 Vert.x 2.0 中。Norman Maurer 为它带来了一些令人印象深刻的性能提升。
另一方面是语言选择。Node.js 只支持 JavaScript。如果想用 JavaScript 做所有的事,这样很好,但如果不是,这样就不是很好了。Vert.x 支持 Java、JavaScript、Ruby、Groovy 和 Python。还有团队正致力于为 Scala 和 Clojure 提供支持。
对 Vert.x 和 Node.js 的表面比较是有根据的,但实际上 Vert.x 远不止是“JVM 的 Node.js”,它要大很多——它是一个多语言的、分布式应用程序平台。在某种程度上,可以认为 Node.js 所做的是 Vert.x 的一个子集,但 Vert.x 的目标更广。
InfoQ:接下来的问题不仅与 2.0 版本的发布有关,还与 Vert.x 的第一个生日有关。一年来,这款软件的成长情况怎么样?用户群有多大?有什么大用户吗?
Tim:Vert.x 是一个社区项目,不提供任何付费支持,所以没有一本用于注册的工作簿,然而,我知道当前有许多人将 Vert.x 用于生产,包括一些知名人士。
InfoQ:请您描述下 Vert.x 的适用场景。或者反过来说——什么类型的应用程序不适合用 Vert.x?
Tim:Vert.x 是一个非常通用的应用程序平台,适合于大多数类型的应用程序。它目标广泛,包括移动、Web 和企业级应用程序。随着 Vert.x 生态系统中新功能模块的增加,我们希望 Vert.x 成为更受应用程序编写人员欢迎的一种选择,否则,他们会考虑更加传统的平台(例如,JavaEE 或者 Rails)。
我们看到,现在许多人正在考虑使用 Vert.x 进行 Web 应用程序开发——尤其是服务器推送类型的应用程序,需要大量有强大性能支撑的连接——由于很好地支持非阻塞,Vert.x 在这方面的表现超乎寻常。
InfoQ:在谈论 Vert.x(或者 Node.js)的时候,人们经常会问我,与通常的 JEE 栈相比,它有多少实实在在的好处?在上述它适用的场景中,可以节省多少硬件,或处理的流量可以大多少?
Tim:关于这点,很难给出一个答案,这个数值很大程度上取决于特定的应用程序。但是,对于吞吐量大的应用程序,例如那些有大量连接的——社交网络应用程序就是一个很好的例子——非阻塞方式是必不可少的,而传统的应用程序平台恰恰没有实现。
但是,这也不全与性能和扩展性有关。实际上,很多应用程序不需要那种级别的扩展性。对于这部分应用程序,Vert.x 的优势在于更加轻量化和应用程序开发方法更新鲜。Vert.x 非常轻量级而且简单易用,只需要极少的配置——它是一种与 JavaEE 完全不同的方式,对于开发人员非常有吸引力,似乎是市场的发展方向。它也可以嵌入到现有的 Java 应用程序中。
InfoQ:为了充分利用异步的概念,需要特殊的操作系统支持吗?
Tim:不需要特殊的操作系统支持。
InfoQ**:2013 年初,有一些关于 Vert.x 未来的讨论。关于这点和最终结论,您能稍微告诉我们一些信息吗?**
Tim:一切都解决的很好。核心 Vert.x 项目正在移到一个中立实体——Eclipse 基金会,不再受任何公司控制——那里有同时属于 Red Hat 和 VMWare 的开发人员,作为 Eclipse 项目的核心开发人员。
商标已经转交给 Eclipse,而 Eclipase 正设法将转交带来的痛苦尽可能降低,例如,该项目可以继续在 Github 上运行。所以,大部分日常活动将照常进行。转交过程预计在未来的数周内完成。
Tim Fox 在 2011 年开始开发 Vert.x,那时他在 VMWare 工作。现在,作为 Red Hat 的高级首席软件工程师,他仍然领导着 Vert.x 项目。
查看英文原文: Tim Fox: What’s new in Vert.x 2.0
感谢杨赛对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。
评论