InfoQ 编辑部出品——2021年度技术盘点与展望 了解详情
写点什么

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

Paulo Lopes、邓艳琴

  • 2019 年 10 月 10 日
  • 本文字数:4144 字

    阅读完需:约 14 分钟

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 应用程序带来了令人难以置信的性能提升。想要破解延迟难题,点此了解。


2019 年 10 月 10 日 11:204140

评论 2 条评论

发布
用户头像
Paulo Lopes 是 Vert.x 开源项目的核心贡献者,目前就职于 Red Hat,任首席软件工程师。他拥有超过 10 年的软件开发经验,在编写、重写、写到想撞墙等方面的经验十分丰富。为让 Vert.x 成为一个更棒的框架,他一直在编写和重新编写高性能 Web 应用程序的道路上奋斗着。
2019 年 10 月 21 日 21:37
回复
这个自我介绍很有趣
2019 年 10 月 21 日 21:38
回复
没有更多了
发现更多内容

你的决定我做主——锚定效应

Justin

心理学 28天写作 游戏设计

ARTS - Week 6

Khirye

Java LeetCode arts

算法攻关-从上到下打印二叉树(O(n))_offer32

小诚信驿站

架构师 刘晓成 小诚信驿站 28天写作 算法攻关

Python 通过命令行安装包的时候 pip 提示错误

HoneyMoose

法大大完成D轮9亿元融资,腾讯领投

人称T客

问题剖析之消息队列的架构设计

Kylin

读书笔记 消息队列架构 3月日更

关于写东西的一点思考

道伟

28天写作

价值感知:如何评价企业IT项目的价值?

boshi

价值传递 七日更 项目经验

如果写文字只是自我表达「Day 19」

道伟

28天写作

前端开发:Vue项目中解决Emitted value instead of an instance of Error问题

三掌柜

vue.js 大前端 3月日更

MySQL原理

Sakura

28天写作 3月日更

FutureTask源码解析

程序员星星toC

多线程 Future future设计模式

四、MongoDB查询(2)

Kylin

读书笔记 分布式数据库mongodb 3月日更

习惯

lenka

3月日更

Python 注释

HoneyMoose

翻译:《实用的Python编程》04_04_Defining_exceptions

codists

Python

Hello World!!!

小太阳

NewSQL分布式数据库,例如TIDB用K/V的底层逻辑

守护石

大数据 分布式 分布式存储 RocksDB TiDB

正则表达式.06 - 断言

insight

正则表达式 3月日更

Python 基础语法

依旧廖凯

28天写作 3月日更

Wireshark数据包分析学习笔记Day7

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

Python yaml 使用的包

HoneyMoose

深入分析mysql为什么不推荐使用uuid或者雪花id作为主键

xcbeyond

MySQL MySQL优化 3月日更

引爆40亿播放的抖音春节道具,背后是怎样的技术?

字节跳动技术团队

软考备考视频的目录

IT蜗壳-Tango

3月日更 软考

Elasticsearch Reindex & Index Alias

escray

elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

醒一醒,讲到 ZooKeeper 的选举机制了

HelloGitHub

Java zookeeper ZooKeeper原理

为什么选择python

张鹤羽粑粑

28天写作 3月日更

甚至你可以在网抑云上听歌

ES_her0

28天写作 3月日更

Python 变量类型

依旧廖凯

28天写作 3月日更

(28DW-S8-Day19) 以太坊是什么

mtfelix

28天写作

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