Vert.x 4将于年底发布!它曾让VMware和Red Hat掐架

Vert.x是一个基于JVM、轻量级、高性能的应用平台。今年10月,Vert.x 开源项目的核心贡献者Paulo Lopes将来到QCon全球软件开发大会(上海站)2019,他透露,Vert.x 4将于2019年底发布。为让大家对Vert.x 有一个更加清晰的了解,我们对他进行了采访。

如果时间回到六年前,你会看到一场VMware和Red Hat的battle

一位名叫 Tim Fox 的开发人员曾在VMware的SpringSource部门工作。在此期间,他领导开发了Vert.x 项目。2012年,Tim跳槽到了Red Hat并希望能够继续从事该项目的开发,却得到了一封律师函。VMware让他交出Vert.x商标、域名、博客、GitHub帐户及Google Group的控制权。此后 VMWare 与 RedHat 多次商讨以寻找出一个双方都满意的解决方案,但都无疾而终。僵持许久之后,VMware最终同意将项目和相关IP转移到Eclipse基金会。2016年1月12日,Tim Fox辞去了Vert.x项目负责人一职,目前该职务由长期贡献者Julien Viet担任。

Eclipse Vert.x是一个用于在JVM上构建响应式应用程序的工具包。根据官方描述,Eclipse Vert.x是事件驱动和非阻塞的。这意味着您的应用程序可以使用少量内核线程处理大量并发。Vert.x可让您的应用程序以最少的硬件进行扩展。它有一个模块化、高性能、易于使用的响应式生态系统。正因为生态系统的多样性,我们可以编写像实时Web应用、IoT、协议适配器和分布式应用等不同种类的程序,当然也可以构建微服务。

它的高性能、低延迟特性吸引了不少开发者,目前,该项目在GitHub上已经获得了超过10k的star。


项目地址:https://github.com/eclipse-vertx/vert.x/

去年10月,Vert.x项目负责人、Red Hat 首席软件工程师Julien Viet在QCon全球软件开发大会(上海站)2018从HTTP性能基准测试出发与我们探讨了Vert.x高性能的秘密。今年10月,Vert.x 开源项目的核心贡献者Paulo Lopes也将来到QCon,他透露,Vert.x 4将于2019年底发布。为让大家对Vert.x 有一个更加清晰的了解,我们采访了Paulo 。

Vert.x是什么?

InfoQ:请为我们介绍一下Vert.x。

Paulo:Vert.x是一个运行在JVM中的事件驱动的、异步非阻塞、支持多种编程语言的应用开发工具。你可以把它当做一组积木,允许你开发在所需的工作负载下保持低延迟特性的高性能应用。Vert.x能让开发人员自由决定应用程序应该如何工作。由于每个应用程序都是独一无二的,我们并不提倡开发人员应该如何构建他们的应用程序;我们称之为“不固执己见”。我们观察到,Vert.x的用户主要将它用于嵌入较大的应用程序,这使得它非常通用,比如你可以在Spring应用程序中使用Vert.x。

InfoQ:Vert.x有哪些优点?我们能用它解决什么问题?

Paulo:编写非阻塞、并发和可伸缩的代码是困难的。通过提供基于reactor模式的简单编程模型,Vert.x 提供了构建此类应用程序的最简单方法,这将允许应用程序高效地使用所有硬件资源。使用内置的集群和事件驱动体系结构,可以让开发人员专注于领域问题,而不是技术细节,扩展变得轻而易举。

InfoQ:Verticle、event-loop、EventBus 分别是什么?

Paulo:Verticle是由 Vert.x 部署和运行的代码块。一个Vert.x实例维护几个事件循环线程(通常是可用CPU内核数的2倍)。Verticle 可以用Vert.x支持的任何语言编写,单个应用程序可以包括用多种语言编写的verticle。你可以把Verticle当做Actor模型中的Actor。

Vert.x 的 API 是事件驱动的。在大多数案例中,Vert.x使用一个叫做event loop的线程来调用你的处理程序。由于在Vert.x 或应用程序块中没有任何内容,event loop可以在事件到达时连续地将事件传递给不同的处理程序。

EventBus是Vert.x的神经系统。它允许应用程序的不同部分相互通信,而不管它们是用什么语言编写的,也不管它们是在同一个Vert.x实例中,还是在不同的Vert.x实例中(以集群形式)。它甚至可以桥接以允许运行在浏览器中的客户端JavaScript在同一EventBus上通信。

InfoQ:Vert.x线程是如何工作的?

Paulo:如上所说,Vert.x的API主要是事件驱动的,可以将事件看作计时器、HTTP请求、文件读取等等)。如果可以立即提供结果,则会立即返回。如果没有这个功能,您通常会在稍后提供一个handler来接收事件。

因为没有一个Vert.x API会阻塞线程,这意味着您可以使用Vert.x来处理大量的并发,只需使用少量的线程。

使用传统的阻塞API,调用线程可能会在读取文件、接收HTTP请求或向数据库发送数据时阻塞。在上述所有情况下,当你的线程等待结果时,它不能做任何其他事情,在这段时间它就是无用的,这样一来效率就太低了。

Vert.x很快,真的很快

InfoQ:您认为谁需要Vert.x?何时使用Vert.x是必要的?

Paulo:每个人都可以在任何地方使用Vert.x。您可以构建一个小型web应用程序、一个复杂的分布式电子商务解决方案或构建集成,例如,将ActiveMQ桥接到Kafka,而无需HTTP桥接。用户最初对Vert.x的关注就在于它的优秀性能。想象一下,假如你是电子商务行业的,时间就是金钱,我们的每一秒都十分珍贵,Vert.X将帮助企业更快地向客户提供产品,更快地完成交易。这不需要额外的硬件成本,多么合算!

InfoQ:我们常用Vert.x来处理低延迟的问题,那么,Vert.x能有多快?它是怎么实现的?能否举个例子?

Paulo:是的,Vert.x 速度非常快。然而,要给出具体的数字总是很困难的,因为这些数字应该根据具体情况进行评估。不过我可以给你举个最简单的例子,比如我们建立了一个应用,它要在REST API 端点上返回"Hello World",TechEmpower(一个独立的基准测试)表明,在相同的条件下,Vert.x应用可以提供超过450万个请求/秒的模式,而优化后的Servlet在Tomcat上却只能提供大约90万个请求/秒的服务。

这种糟糕的性能差异确实可能存在。因为Vert.x有效地使用了所有可用的计算资源。使用reactor模式,应用程序不受处理请求的线程数(就像在典型的Servlet容器上发生的那样)的限制。Event loop使用所有请求的全部CPU容量(因为没有阻塞I/O),而不是等待I/O处理完毕单个请求的线程。这个小小的差别就是造成这种结果的原因。

InfoQ:为什么说 Vert.x 是创建轻量级,高性能微服务的理想选择?

Paulo:简而言之,微服务是分布在网络上的大量小型应用程序节点。这些节点通过网络进行通信,这意味着任何两个节点都有应用程序外部的I/O性能开销。延迟是微服务中的一个关键问题,因为服务之间的每一跳都会增加请求/响应时间。选择Vert.x将允许微服务高效地使用CPU和网络,从而减少整个应用程序的延迟。

Vert.x的未来

InfoQ:Vert.x 4.0版本是否很快就能与我们见面?其路线图中提到,“Vert.x 4.0将使Vert.x 3的一些重要方面现代化,你甚至可以预期它会发生重大变化”,能否透露一下它将有哪些重大变化?

Paulo:Vert.x 4.0会在今年年底与大家见面。事实上,我们已经发布了一些里程碑式的更新,而且我们还将继续。Vert.x 4.0专注于提供社区期望的两个重要功能:它提供了一个面向未来的编程模型,它还集成了Java内置的CompletionStage,当然,这不会妨碍我们现在流行的与RxJava的集成。我们还将通过与Zipkin或OpenTracing等工具集成来支持分布式跟踪。

其实,Vert.x 4是Vert.x 3.x系列的演进版本, 它带来了上面提到的两个特性。因为任何新的主要版本都会破坏一些API,对此我们有明确的政策,下面我会解释一下。

首先,它不是破坏性改变的露天酒会,任何重大变化都必须有一个很好的理由。然后,任何破坏性改变在Vert.x 3.x系列中都会有相应解决办法的替代方案。

例如,在Vert.x 4版本里,我们把Vert.x Web 中的 HTTP cookie API 移到了Vert.x Core里面,为了实现这一点,我们为Vert.x 3.8的Vert.x Core提供了新的cookie API ,并弃用了Vert.x Web cookie API,因此应用程序可以为升级到Vert.x 4做准备了。

总的来说,Vert.x 3.x现在正在加速迁移到Vert.x 4。

最后但同样重要的是,目前在MEAP中的Vert.x行动手册自然涵盖了Vert.x 3。我们的基准是,本书中的所有示例也将适用于Vert.x 4。书中所有的例子都是Java代码,我们用Vert.x 3.x和Vert.x 4的里程碑编译来检查这个代码。

InfoQ:为推动Vert.x跨过早期采用者阶段,你们会做点什么吗?

Paulo:Vert.x已经成熟,并被证明是构建高性能和可伸缩应用程序的可靠框架。对于新用户来说,学习成本可能很高,因为它需要一种不同于我们过去几年在Java世界中看到的思维方式。反应式编程在过去是一个复杂的主题,但今天,它已经被诸如Reactive Extension之类的库广泛使用。随着越来越多的开发人员开始了解这个编程模型,将它应用到后端服务器代码并采用Vert.x就越容易了。正如我们所讨论的,它的优点是巨大的,所以我建议所有的读者尝试一下。

目前,VMware、Red Hat、Hulu、增信通、易快报、力谱宿云、炼石网络等公司都在使用它,具体可见官网。

InfoQ: 最后一个问题,Vert. X与Red Hat互相提供了什么?

Paulo:Vert.x是 Eclipse Foundation的一个项目,因此,它是独立的。这个项目由很多来自不同公司的贡献者开发,有些是 Eclipse Foundation的成员。

Red Hat赞助了Vert.x项目,雇佣了一些贡献者,让他们能做喜欢的事情并以此谋生。当然,作为RHOAR 产品的一部分,Red Hat为Vert.x提供支持。Red Hat对Vert.x十分感兴趣,因为它构建了许多行之有效的解决方案,比如Strimzi项目(一个致力于将Apache Kafka 运行在Kubernetes 上的项目),另外,Quarkus项目(一个为 GraalVM 和 OpenJDK HotSpot 量身定制的 Kubernetes 原生 Java 框架)最近也在使用Vert.x构建HTTP客户端和服务器。

采访嘉宾:Paulo Lopes 是 Vert.x 开源项目的核心贡献者,目前就职于 Red Hat,任首席软件工程师。他拥有超过 10 年的软件开发经验,在编写、重写、写到想撞墙等方面的经验十分丰富。为让 Vert.x 成为一个更棒的框架,他一直在编写和重新编写高性能 Web 应用程序的道路上奋斗着。

在QCon上海2019的演讲中,Paulo 将介绍 Vert.x 在 ES4X(基于GraalVM 和 Vert.x 的开发的 JavaScript Runtime)中的应用,它为 JavaScript 应用程序带来了令人难以置信的性能提升。想要破解延迟难题,点此了解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章